1cb93a386Sopenharmony_ci// The increased timeout is especially needed with larger binaries
2cb93a386Sopenharmony_ci// like in the debug/gpu build
3cb93a386Sopenharmony_cijasmine.DEFAULT_TIMEOUT_INTERVAL = 20000;
4cb93a386Sopenharmony_ci
5cb93a386Sopenharmony_cidescribe('Debugger\'s Playback Behavior', function() {
6cb93a386Sopenharmony_ci    const container = document.createElement('div');
7cb93a386Sopenharmony_ci    document.body.appendChild(container);
8cb93a386Sopenharmony_ci
9cb93a386Sopenharmony_ci    beforeEach(function() {
10cb93a386Sopenharmony_ci        container.innerHTML = `<canvas id=debugger_view width=720 height=1280></canvas>`;
11cb93a386Sopenharmony_ci    });
12cb93a386Sopenharmony_ci
13cb93a386Sopenharmony_ci    afterEach(function() {
14cb93a386Sopenharmony_ci        container.innerHTML = '';
15cb93a386Sopenharmony_ci    });
16cb93a386Sopenharmony_ci
17cb93a386Sopenharmony_ci    it('can switch to the second frame of an animated skp', function(done) {
18cb93a386Sopenharmony_ci        const filename = '/debugger/anim.mskp'
19cb93a386Sopenharmony_ci        const fetchSkpPromise = fetch(filename);
20cb93a386Sopenharmony_ci
21cb93a386Sopenharmony_ci        Promise.all([LoadDebugger, fetchSkpPromise]).then((values) => {
22cb93a386Sopenharmony_ci
23cb93a386Sopenharmony_ci            const response = values[1];
24cb93a386Sopenharmony_ci            if (!response.ok) {
25cb93a386Sopenharmony_ci                throw new Error("HTTP error, status = " + response.status);
26cb93a386Sopenharmony_ci            }
27cb93a386Sopenharmony_ci            response.arrayBuffer().then((buffer) => {
28cb93a386Sopenharmony_ci                catchException(done, () => {
29cb93a386Sopenharmony_ci                    const canvasElement = document.getElementById('debugger_view');
30cb93a386Sopenharmony_ci                    const fileContents = new Uint8Array(buffer);
31cb93a386Sopenharmony_ci                    console.log('fetched '+filename);
32cb93a386Sopenharmony_ci                    const player = Debugger.SkpFilePlayer(fileContents);
33cb93a386Sopenharmony_ci                    const bounds = player.getBounds();
34cb93a386Sopenharmony_ci                    canvasElement.width = bounds.fRight - bounds.fLeft;
35cb93a386Sopenharmony_ci                    canvasElement.height = bounds.fBottom - bounds.fTop;
36cb93a386Sopenharmony_ci                    expect(canvasElement.width).toBe(1080);
37cb93a386Sopenharmony_ci                    expect(canvasElement.height).toBe(1920);
38cb93a386Sopenharmony_ci                    const surface = Debugger.MakeWebGLCanvasSurface(canvasElement);
39cb93a386Sopenharmony_ci                    expect(surface).toBeTruthy();
40cb93a386Sopenharmony_ci                    const numFrames = player.getFrameCount();
41cb93a386Sopenharmony_ci                    expect(numFrames).toBe(10);
42cb93a386Sopenharmony_ci
43cb93a386Sopenharmony_ci                    let cmd = JSON.parse(player.jsonCommandList(surface));
44cb93a386Sopenharmony_ci                    expect(cmd).toBeTruthy();
45cb93a386Sopenharmony_ci
46cb93a386Sopenharmony_ci                    // Move to last command in first frame
47cb93a386Sopenharmony_ci                    player.drawTo(surface, cmd.commands.length);
48cb93a386Sopenharmony_ci                    surface.flush();
49cb93a386Sopenharmony_ci
50cb93a386Sopenharmony_ci                    // Move to frame two
51cb93a386Sopenharmony_ci                    player.changeFrame(1);
52cb93a386Sopenharmony_ci                    cmd = JSON.parse(player.jsonCommandList(surface));
53cb93a386Sopenharmony_ci                    expect(cmd).toBeTruthy();
54cb93a386Sopenharmony_ci                    // move to command 100 in frame 2
55cb93a386Sopenharmony_ci                    player.drawTo(surface, 100);
56cb93a386Sopenharmony_ci                    surface.flush();
57cb93a386Sopenharmony_ci
58cb93a386Sopenharmony_ci                    console.log('drew picture to canvas element');
59cb93a386Sopenharmony_ci                    surface.dispose();
60cb93a386Sopenharmony_ci                    done();
61cb93a386Sopenharmony_ci                })();
62cb93a386Sopenharmony_ci            });
63cb93a386Sopenharmony_ci        });
64cb93a386Sopenharmony_ci    });
65cb93a386Sopenharmony_ci});
66