import { pressKey, simulateTimeline, startTimeline } from "@jspsych/test-utils"; import animation from "."; jest.useFakeTimers(); describe("animation plugin", () => { test("no delay before first frame (#1885)", async () => { const { getHTML, expectFinished } = await startTimeline([ { type: animation, stimuli: ["img/face_1.jpg", "img/face_2.jpg"], render_on_canvas: false, }, ]); expect(getHTML()).toBe(''); jest.advanceTimersByTime(250); expect(getHTML()).toBe(''); jest.advanceTimersByTime(250); await expectFinished(); }); }); describe("animation simulation", () => { test("data mode works", async () => { const timeline = [ { type: animation, stimuli: ["1.png", "2.png", "3.png", "4.png"], sequence_reps: 3, render_on_canvas: false, }, ]; const { expectFinished, getData } = await simulateTimeline(timeline); await expectFinished(); const data = getData().values()[0]; expect(data.animation_sequence.length).toBe(12); expect(data.response).not.toBeUndefined(); }); test("visual mode works", async () => { const timeline = [ { type: animation, stimuli: ["1.png", "2.png", "3.png", "4.png"], sequence_reps: 3, frame_time: 50, frame_isi: 50, render_on_canvas: false, }, ]; const { expectFinished, expectRunning, getHTML, getData, displayElement } = await simulateTimeline(timeline, "visual"); await expectRunning(); expect(getHTML()).toContain("1.png"); jest.advanceTimersByTime(50); expect(displayElement.querySelector("img").style.visibility).toBe("hidden"); jest.advanceTimersByTime(50); expect(getHTML()).toContain("2.png"); jest.runAllTimers(); await expectFinished(); const data = getData().values()[0]; expect(data.animation_sequence.length).toBe(24); expect(data.response).not.toBeUndefined(); }); });