import htmlKeyboardResponse from "@jspsych/plugin-html-keyboard-response";
import { JsPsych, initJsPsych } from "../../src";
import { pressKey } from "../utils";
import testExtension from "./test-extension";
let jsPsych: JsPsych;
jest.useFakeTimers();
// https://github.com/jspsych/jsPsych/projects/6#card-64825201
describe.skip("jsPsych.extensions", () => {
beforeEach(() => {
jsPsych.extensions.test = testExtension;
});
test("initialize is called at start of experiment", () => {
var initFunc = jest.spyOn(jsPsych.extensions.test, "initialize");
var timeline = [{ type: htmlKeyboardResponse, stimulus: "foo" }];
jsPsych = initJsPsych({
timeline,
extensions: [{ type: "test" }],
});
expect(initFunc).toHaveBeenCalled();
});
test("initialize gets params", () => {
var initFunc = jest.spyOn(jsPsych.extensions.test, "initialize");
var timeline = [{ type: htmlKeyboardResponse, stimulus: "foo" }];
jsPsych = initJsPsych({
timeline,
extensions: [{ type: "test", params: { foo: 1 } }],
});
expect(initFunc).toHaveBeenCalledWith({ foo: 1 });
});
test("on_start is called before trial", () => {
var onStartFunc = jest.spyOn(jsPsych.extensions.test, "on_start");
var trial = {
type: htmlKeyboardResponse,
stimulus: "foo",
extensions: [{ type: "test" }],
on_load: () => {
expect(onStartFunc).toHaveBeenCalled();
},
};
jsPsych = initJsPsych({
timeline: [trial],
});
pressKey("a");
});
test("on_start gets params", () => {
var onStartFunc = jest.spyOn(jsPsych.extensions.test, "on_start");
var trial = {
type: htmlKeyboardResponse,
stimulus: "foo",
extensions: [{ type: "test", params: { foo: 1 } }],
on_load: () => {
expect(onStartFunc).toHaveBeenCalledWith({ foo: 1 });
},
};
jsPsych = initJsPsych({
timeline: [trial],
});
pressKey("a");
});
test("on_load is called after load", () => {
var onLoadFunc = jest.spyOn(jsPsych.extensions.test, "on_load");
var trial = {
type: htmlKeyboardResponse,
stimulus: "foo",
extensions: [{ type: "test" }],
on_load: () => {
// trial load happens before extension load
expect(onLoadFunc).not.toHaveBeenCalled();
},
};
jsPsych = initJsPsych({
timeline: [trial],
});
expect(onLoadFunc).toHaveBeenCalled();
pressKey("a");
});
test("on_load gets params", () => {
var onLoadFunc = jest.spyOn(jsPsych.extensions.test, "on_load");
var trial = {
type: htmlKeyboardResponse,
stimulus: "foo",
extensions: [{ type: "test", params: { foo: 1 } }],
};
jsPsych = initJsPsych({
timeline: [trial],
});
expect(onLoadFunc).toHaveBeenCalledWith({ foo: 1 });
pressKey("a");
});
test("on_finish called after trial", () => {
var onFinishFunc = jest.spyOn(jsPsych.extensions.test, "on_finish");
var trial = {
type: htmlKeyboardResponse,
stimulus: "foo",
extensions: [{ type: "test", params: { foo: 1 } }],
};
jsPsych = initJsPsych({
timeline: [trial],
});
expect(onFinishFunc).not.toHaveBeenCalled();
pressKey("a");
expect(onFinishFunc).toHaveBeenCalled();
});
test("on_finish gets params", () => {
var onFinishFunc = jest.spyOn(jsPsych.extensions.test, "on_finish");
var trial = {
type: htmlKeyboardResponse,
stimulus: "foo",
extensions: [{ type: "test", params: { foo: 1 } }],
};
jsPsych = initJsPsych({
timeline: [trial],
});
pressKey("a");
expect(onFinishFunc).toHaveBeenCalledWith({ foo: 1 });
});
test("on_finish adds trial data", () => {
var trial = {
type: htmlKeyboardResponse,
stimulus: "foo",
extensions: [{ type: "test", params: { foo: 1 } }],
};
jsPsych = initJsPsych({
timeline: [trial],
});
pressKey("a");
expect(jsPsych.data.get().values()[0].extension_data).toBe(true);
});
test("on_finish data is available in trial on_finish", () => {
var trial = {
type: htmlKeyboardResponse,
stimulus: "foo",
extensions: [{ type: "test", params: { foo: 1 } }],
on_finish: (data) => {
expect(data.extension_data).toBe(true);
},
};
jsPsych = initJsPsych({
timeline: [trial],
});
pressKey("a");
});
});