@digabi/exam-engine-rendering 16.1.3-alpha.0 → 16.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/puppeteerUtils.d.ts +0 -1
- package/dist/__tests__/puppeteerUtils.d.ts.map +1 -1
- package/dist/__tests__/puppeteerUtils.js +2 -14
- package/dist/__tests__/puppeteerUtils.js.map +1 -1
- package/dist/__tests__/testCasTransition.js +3 -3
- package/dist/__tests__/testCasTransition.js.map +1 -1
- package/dist/__tests__/testChoiceAnswer.js +6 -6
- package/dist/__tests__/testChoiceAnswer.js.map +1 -1
- package/dist/__tests__/testOfflineGeneration.js +2 -2
- package/dist/__tests__/testOfflineGeneration.js.map +1 -1
- package/dist/__tests__/testScoredTextAnswers.js +3 -3
- package/dist/__tests__/testScoredTextAnswers.js.map +1 -1
- package/dist/__tests__/testTextAnswers.js +34 -28
- package/dist/__tests__/testTextAnswers.js.map +1 -1
- package/dist/__tests__/tsconfig.tsbuildinfo +1 -1
- package/dist/createOfflineExam.js +5 -5
- package/dist/createOfflineExam.js.map +1 -1
- package/dist/demo.d.ts +2 -0
- package/dist/demo.d.ts.map +1 -0
- package/dist/demo.js +77 -0
- package/dist/demo.js.map +1 -0
- package/dist/exam-loader.js +3 -3
- package/dist/exam-loader.js.map +1 -1
- package/dist/getOfflineWebpackConfig.js +1 -1
- package/dist/getOfflineWebpackConfig.js.map +1 -1
- package/dist/getPreviewWebpackConfig.js +1 -1
- package/dist/getPreviewWebpackConfig.js.map +1 -1
- package/dist/getWebpackConfig.js +1 -1
- package/dist/getWebpackConfig.js.map +1 -1
- package/dist/hooks.d.ts +2 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +31 -0
- package/dist/hooks.js.map +1 -0
- package/dist/offline.js +3 -3
- package/dist/offline.js.map +1 -1
- package/dist/preview.js +11 -11
- package/dist/preview.js.map +1 -1
- package/dist/previewExam.js +2 -2
- package/dist/previewExam.js.map +1 -1
- package/package.json +7 -7
@@ -6,5 +6,4 @@ export declare function halt(page: Page): Promise<void>;
|
|
6
6
|
export declare function getInnerText(page: Page, selector: string): Promise<string>;
|
7
7
|
export declare function getOuterHtml(page: Page, selector: string): Promise<string>;
|
8
8
|
export declare function getTextContent(page: Page, selector: string): Promise<string>;
|
9
|
-
export declare function expectElementNotToExist(page: Page, selector: string): Promise<void>;
|
10
9
|
//# sourceMappingURL=puppeteerUtils.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"puppeteerUtils.d.ts","sourceRoot":"","sources":["../../__tests__/puppeteerUtils.ts"],"names":[],"mappings":"AAEA,OAAkB,EAAW,IAAI,EAAE,MAAM,WAAW,CAAA;AAIpD,wBAAgB,aAAa,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,CAgBnD;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGrE;AAED,wBAAsB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzD;AAGD,wBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpD;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhF;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhF;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQlF
|
1
|
+
{"version":3,"file":"puppeteerUtils.d.ts","sourceRoot":"","sources":["../../__tests__/puppeteerUtils.ts"],"names":[],"mappings":"AAEA,OAAkB,EAAW,IAAI,EAAE,MAAM,WAAW,CAAA;AAIpD,wBAAgB,aAAa,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,CAgBnD;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGrE;AAED,wBAAsB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzD;AAGD,wBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpD;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhF;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhF;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQlF"}
|
@@ -3,13 +3,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.
|
6
|
+
exports.getTextContent = exports.getOuterHtml = exports.getInnerText = exports.halt = exports.delay = exports.loadExam = exports.initPuppeteer = void 0;
|
7
7
|
const puppeteer_1 = __importDefault(require("puppeteer"));
|
8
8
|
const isInDebugMode = process.env.PUPPETEER_DEBUG === '1';
|
9
9
|
function initPuppeteer() {
|
10
10
|
let browser;
|
11
11
|
beforeAll(async () => {
|
12
|
-
browser = await puppeteer_1.default.launch({ headless: !isInDebugMode });
|
12
|
+
browser = await puppeteer_1.default.launch({ headless: !isInDebugMode, args: ['--no-sandbox', '--disable-setuid-sandbox'] });
|
13
13
|
});
|
14
14
|
afterAll(async () => {
|
15
15
|
await browser.close();
|
@@ -71,16 +71,4 @@ async function getTextContent(page, selector) {
|
|
71
71
|
});
|
72
72
|
}
|
73
73
|
exports.getTextContent = getTextContent;
|
74
|
-
// TODO is there a prettier way?
|
75
|
-
async function expectElementNotToExist(page, selector) {
|
76
|
-
let thrown = false;
|
77
|
-
try {
|
78
|
-
await page.$eval(selector, (e) => e);
|
79
|
-
}
|
80
|
-
catch (expected) {
|
81
|
-
thrown = true;
|
82
|
-
}
|
83
|
-
expect(thrown).toBe(true);
|
84
|
-
}
|
85
|
-
exports.expectElementNotToExist = expectElementNotToExist;
|
86
74
|
//# sourceMappingURL=puppeteerUtils.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"puppeteerUtils.js","sourceRoot":"","sources":["../../__tests__/puppeteerUtils.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;;;;AAEZ,0DAAoD;AAEpD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,GAAG,CAAA;AAEzD,SAAgB,aAAa;IAC3B,IAAI,OAAgB,CAAA;IACpB,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,OAAO,GAAG,MAAM,mBAAS,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,aAAa,EAAE,CAAC,CAAA;
|
1
|
+
{"version":3,"file":"puppeteerUtils.js","sourceRoot":"","sources":["../../__tests__/puppeteerUtils.ts"],"names":[],"mappings":"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"}
|
@@ -4,11 +4,11 @@ const exam_engine_exams_1 = require("@digabi/exam-engine-exams");
|
|
4
4
|
const exam_engine_rendering_1 = require("@digabi/exam-engine-rendering");
|
5
5
|
const puppeteerUtils_1 = require("./puppeteerUtils");
|
6
6
|
describe('testCasTransition.ts - Allowing CAS software in a math exam', () => {
|
7
|
-
const createPage = puppeteerUtils_1.initPuppeteer();
|
7
|
+
const createPage = (0, puppeteerUtils_1.initPuppeteer)();
|
8
8
|
let page;
|
9
9
|
let ctx;
|
10
10
|
beforeAll(async () => {
|
11
|
-
ctx = await exam_engine_rendering_1.previewExam(exam_engine_exams_1.resolveExam('N/N.xml'), {
|
11
|
+
ctx = await (0, exam_engine_rendering_1.previewExam)((0, exam_engine_exams_1.resolveExam)('N/N.xml'), {
|
12
12
|
casCountdownDurationSeconds: 2,
|
13
13
|
});
|
14
14
|
page = await createPage();
|
@@ -17,7 +17,7 @@ describe('testCasTransition.ts - Allowing CAS software in a math exam', () => {
|
|
17
17
|
await ctx.close();
|
18
18
|
});
|
19
19
|
it('hides questions of the first section after clicking enable CAS button', async () => {
|
20
|
-
await puppeteerUtils_1.loadExam(page, ctx.url);
|
20
|
+
await (0, puppeteerUtils_1.loadExam)(page, ctx.url);
|
21
21
|
await expectQuestionToBeVisible(true);
|
22
22
|
await clickToggleCas(true);
|
23
23
|
await expectQuestionToBeVisible(false);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"testCasTransition.js","sourceRoot":"","sources":["../../__tests__/testCasTransition.ts"],"names":[],"mappings":";;AAAA,iEAAuD;AACvD,yEAA2E;AAE3E,qDAA0D;AAE1D,QAAQ,CAAC,6DAA6D,EAAE,GAAG,EAAE;IAC3E,MAAM,UAAU,GAAG,8BAAa,
|
1
|
+
{"version":3,"file":"testCasTransition.js","sourceRoot":"","sources":["../../__tests__/testCasTransition.ts"],"names":[],"mappings":";;AAAA,iEAAuD;AACvD,yEAA2E;AAE3E,qDAA0D;AAE1D,QAAQ,CAAC,6DAA6D,EAAE,GAAG,EAAE;IAC3E,MAAM,UAAU,GAAG,IAAA,8BAAa,GAAE,CAAA;IAClC,IAAI,IAAU,CAAA;IACd,IAAI,GAAmB,CAAA;IAEvB,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,GAAG,GAAG,MAAM,IAAA,mCAAW,EAAC,IAAA,+BAAW,EAAC,SAAS,CAAC,EAAE;YAC9C,2BAA2B,EAAE,CAAC;SAC/B,CAAC,CAAA;QACF,IAAI,GAAG,MAAM,UAAU,EAAE,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClB,MAAM,GAAG,CAAC,KAAK,EAAE,CAAA;IACnB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,IAAA,yBAAQ,EAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;QAE7B,MAAM,yBAAyB,CAAC,IAAI,CAAC,CAAA;QACrC,MAAM,cAAc,CAAC,IAAI,CAAC,CAAA;QAC1B,MAAM,yBAAyB,CAAC,KAAK,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,cAAc,CAAC,KAAK,CAAC,CAAA;QAC3B,MAAM,yBAAyB,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4GAA4G,EAAE,KAAK,IAAI,EAAE;QAC1H,MAAM,cAAc,CAAC,IAAI,CAAC,CAAA;QAC1B,MAAM,yBAAyB,CAAC,KAAK,CAAC,CAAA;QACtC,MAAM,0BAA0B,EAAE,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,KAAK,UAAU,cAAc,CAAC,OAAgB;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAA;IACpE,CAAC;IAED,KAAK,UAAU,yBAAyB,CAAC,OAAgB;QACvD,MAAM,IAAI,CAAC,eAAe;QACxB,+FAA+F;QAC/F,qDAAqD;QACrD,CAAC,YAAqB,EAAE,EAAE;YACxB,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;YAC5C,OAAO,YAAY,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAA;QACzD,CAAC,EACD,SAAS,EACT,OAAO,CACR,CAAA;IACH,CAAC;IAED,KAAK,UAAU,0BAA0B;QACvC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;YAC9B,MAAM,iBAAiB,GAAG,QAAQ,CAAC,aAAa,CAAC,+BAA+B,CAAC,CAAA;YACjF,IAAI,iBAAiB,EAAE;gBACrB,OAAO,iBAAiB,CAAC,WAAY,CAAC,IAAI,EAAE,KAAK,kBAAkB,CAAA;aACpE;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;AACH,CAAC,CAAC,CAAA"}
|
@@ -4,27 +4,27 @@ const exam_engine_exams_1 = require("@digabi/exam-engine-exams");
|
|
4
4
|
const exam_engine_rendering_1 = require("@digabi/exam-engine-rendering");
|
5
5
|
const puppeteerUtils_1 = require("./puppeteerUtils");
|
6
6
|
describe('testChoiceAnswer.ts - choice answer interactions', () => {
|
7
|
-
const createPage = puppeteerUtils_1.initPuppeteer();
|
7
|
+
const createPage = (0, puppeteerUtils_1.initPuppeteer)();
|
8
8
|
let page;
|
9
9
|
let ctx;
|
10
10
|
beforeAll(async () => {
|
11
|
-
ctx = await exam_engine_rendering_1.previewExam(exam_engine_exams_1.resolveExam('SC/SC.xml'));
|
11
|
+
ctx = await (0, exam_engine_rendering_1.previewExam)((0, exam_engine_exams_1.resolveExam)('SC/SC.xml'));
|
12
12
|
page = await createPage();
|
13
13
|
});
|
14
14
|
afterAll(async () => {
|
15
15
|
await ctx.close();
|
16
16
|
});
|
17
17
|
it('selects no answer by default', async () => {
|
18
|
-
await puppeteerUtils_1.loadExam(page, ctx.url);
|
18
|
+
await (0, puppeteerUtils_1.loadExam)(page, ctx.url);
|
19
19
|
expect(await getRadioButtonValue(page, 1)).toBeUndefined();
|
20
20
|
});
|
21
21
|
it('remembers the choices after reloading', async () => {
|
22
|
-
await puppeteerUtils_1.loadExam(page, ctx.url);
|
22
|
+
await (0, puppeteerUtils_1.loadExam)(page, ctx.url);
|
23
23
|
await setChoiceAnswer(page, 1, '91');
|
24
|
-
await puppeteerUtils_1.loadExam(page, ctx.url);
|
24
|
+
await (0, puppeteerUtils_1.loadExam)(page, ctx.url);
|
25
25
|
expect(await getRadioButtonValue(page, 1)).toEqual('91');
|
26
26
|
await setChoiceAnswer(page, 1, '93');
|
27
|
-
await puppeteerUtils_1.loadExam(page, ctx.url);
|
27
|
+
await (0, puppeteerUtils_1.loadExam)(page, ctx.url);
|
28
28
|
expect(await getRadioButtonValue(page, 1)).toEqual('93');
|
29
29
|
});
|
30
30
|
});
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"testChoiceAnswer.js","sourceRoot":"","sources":["../../__tests__/testChoiceAnswer.ts"],"names":[],"mappings":";;AAAA,iEAAuD;AACvD,yEAA2E;AAE3E,qDAA0D;AAE1D,QAAQ,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAChE,MAAM,UAAU,GAAG,8BAAa,
|
1
|
+
{"version":3,"file":"testChoiceAnswer.js","sourceRoot":"","sources":["../../__tests__/testChoiceAnswer.ts"],"names":[],"mappings":";;AAAA,iEAAuD;AACvD,yEAA2E;AAE3E,qDAA0D;AAE1D,QAAQ,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAChE,MAAM,UAAU,GAAG,IAAA,8BAAa,GAAE,CAAA;IAClC,IAAI,IAAU,CAAA;IACd,IAAI,GAAmB,CAAA;IAEvB,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,GAAG,GAAG,MAAM,IAAA,mCAAW,EAAC,IAAA,+BAAW,EAAC,WAAW,CAAC,CAAC,CAAA;QACjD,IAAI,GAAG,MAAM,UAAU,EAAE,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClB,MAAM,GAAG,CAAC,KAAK,EAAE,CAAA;IACnB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,IAAA,yBAAQ,EAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;QAC7B,MAAM,CAAC,MAAM,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;IAC5D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,IAAA,yBAAQ,EAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;QAE7B,MAAM,eAAe,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;QACpC,MAAM,IAAA,yBAAQ,EAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;QAC7B,MAAM,CAAC,MAAM,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAExD,MAAM,eAAe,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;QACpC,MAAM,IAAA,yBAAQ,EAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;QAC7B,MAAM,CAAC,MAAM,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1D,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,KAAK,UAAU,mBAAmB,CAAC,IAAU,EAAE,UAAkB;IAC/D,OAAO,IAAI;SACR,KAAK,CAAC,yBAAyB,UAAU,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAE,CAAsB,CAAC,KAAK,CAAC;SAC5F,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;AAC3B,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,IAAU,EAAE,UAAkB,EAAE,KAAa;IAC1E,MAAM,IAAI,CAAC,KAAK,CAAC,yBAAyB,UAAU,aAAa,KAAK,IAAI,CAAC,CAAA;IAC3E,MAAM,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC,CAAA;AAC3D,CAAC"}
|
@@ -9,14 +9,14 @@ const path_1 = __importDefault(require("path"));
|
|
9
9
|
const tmp_promise_1 = __importDefault(require("tmp-promise"));
|
10
10
|
const puppeteerUtils_1 = require("./puppeteerUtils");
|
11
11
|
describe('testOfflineGeneration.ts - Offline version generation', () => {
|
12
|
-
const createPage = puppeteerUtils_1.initPuppeteer();
|
12
|
+
const createPage = (0, puppeteerUtils_1.initPuppeteer)();
|
13
13
|
let page;
|
14
14
|
let examHtmlFile;
|
15
15
|
let attachmentsHtmlFile;
|
16
16
|
let gradingInstructionHtmlFile;
|
17
17
|
beforeAll(async () => {
|
18
18
|
const tmpdir = await tmp_promise_1.default.dir().then((r) => r.path);
|
19
|
-
const [outputDirectory] = await exam_engine_rendering_1.createOfflineExam(exam_engine_exams_1.resolveExam('A_E/A_E.xml'), tmpdir);
|
19
|
+
const [outputDirectory] = await (0, exam_engine_rendering_1.createOfflineExam)((0, exam_engine_exams_1.resolveExam)('A_E/A_E.xml'), tmpdir);
|
20
20
|
examHtmlFile = path_1.default.resolve(outputDirectory, 'index.html');
|
21
21
|
attachmentsHtmlFile = path_1.default.resolve(outputDirectory, 'attachments/index.html');
|
22
22
|
gradingInstructionHtmlFile = path_1.default.resolve(outputDirectory, 'attachments/index.html');
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"testOfflineGeneration.js","sourceRoot":"","sources":["../../__tests__/testOfflineGeneration.ts"],"names":[],"mappings":";;;;;AAAA,iEAAuD;AACvD,yEAAiE;AACjE,gDAAuB;AAEvB,8DAA6B;AAC7B,qDAAgD;AAEhD,QAAQ,CAAC,uDAAuD,EAAE,GAAG,EAAE;IACrE,MAAM,UAAU,GAAG,8BAAa,
|
1
|
+
{"version":3,"file":"testOfflineGeneration.js","sourceRoot":"","sources":["../../__tests__/testOfflineGeneration.ts"],"names":[],"mappings":";;;;;AAAA,iEAAuD;AACvD,yEAAiE;AACjE,gDAAuB;AAEvB,8DAA6B;AAC7B,qDAAgD;AAEhD,QAAQ,CAAC,uDAAuD,EAAE,GAAG,EAAE;IACrE,MAAM,UAAU,GAAG,IAAA,8BAAa,GAAE,CAAA;IAClC,IAAI,IAAU,CAAA;IACd,IAAI,YAAoB,CAAA;IACxB,IAAI,mBAA2B,CAAA;IAC/B,IAAI,0BAAkC,CAAA;IAEtC,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,MAAM,GAAG,MAAM,qBAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAClD,MAAM,CAAC,eAAe,CAAC,GAAG,MAAM,IAAA,yCAAiB,EAAC,IAAA,+BAAW,EAAC,aAAa,CAAC,EAAE,MAAM,CAAC,CAAA;QACrF,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,eAAe,EAAE,YAAY,CAAC,CAAA;QAC1D,mBAAmB,GAAG,cAAI,CAAC,OAAO,CAAC,eAAe,EAAE,wBAAwB,CAAC,CAAA;QAC7E,0BAA0B,GAAG,cAAI,CAAC,OAAO,CAAC,eAAe,EAAE,wBAAwB,CAAC,CAAA;QACpF,IAAI,GAAG,MAAM,UAAU,EAAE,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,2BAA2B,CAAC,YAAY,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,2BAA2B,CAAC,mBAAmB,CAAC,CAAA;IACxD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,2BAA2B,CAAC,0BAA0B,CAAC,CAAA;IAC/D,CAAC,CAAC,CAAA;IAEF,KAAK,UAAU,2BAA2B,CAAC,QAAgB;QACzD,MAAM,aAAa,GAAa,EAAE,CAAA;QAClC,MAAM,UAAU,GAAY,EAAE,CAAA;QAE9B,qEAAqE;QACrE,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,GAAgB,EAAE,EAAE;YAC5C,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,EAAG,CAAC,SAAS,CAAA;YAC1C,IAAI,SAAS,KAAK,kBAAkB,EAAE;gBACpC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA;aAC9B;QACH,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QAEnD,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,QAAQ,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAA;QACpE,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACjC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAChC,CAAC;AACH,CAAC,CAAC,CAAA"}
|
@@ -4,11 +4,11 @@ const exam_engine_exams_1 = require("@digabi/exam-engine-exams");
|
|
4
4
|
const exam_engine_rendering_1 = require("@digabi/exam-engine-rendering");
|
5
5
|
const puppeteerUtils_1 = require("./puppeteerUtils");
|
6
6
|
describe('testScoredTextAnswers.ts — Scored text answer interactions', () => {
|
7
|
-
const createPage = puppeteerUtils_1.initPuppeteer();
|
7
|
+
const createPage = (0, puppeteerUtils_1.initPuppeteer)();
|
8
8
|
let page;
|
9
9
|
let ctx;
|
10
10
|
beforeAll(async () => {
|
11
|
-
ctx = await exam_engine_rendering_1.previewExam(exam_engine_exams_1.resolveExam('SC/SC.xml'));
|
11
|
+
ctx = await (0, exam_engine_rendering_1.previewExam)((0, exam_engine_exams_1.resolveExam)('SC/SC.xml'));
|
12
12
|
page = await createPage();
|
13
13
|
});
|
14
14
|
afterAll(async () => {
|
@@ -17,7 +17,7 @@ describe('testScoredTextAnswers.ts — Scored text answer interactions', () => {
|
|
17
17
|
const firstAnswerId = 81;
|
18
18
|
const secondAnswerId = 82;
|
19
19
|
it('highlights the hint when focusing a scored text answer', async () => {
|
20
|
-
await puppeteerUtils_1.loadExam(page, ctx.url);
|
20
|
+
await (0, puppeteerUtils_1.loadExam)(page, ctx.url);
|
21
21
|
await focusAnswer(firstAnswerId);
|
22
22
|
await expectAnswerHintToBeHighlighted(firstAnswerId);
|
23
23
|
await focusAnswer(secondAnswerId);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"testScoredTextAnswers.js","sourceRoot":"","sources":["../../__tests__/testScoredTextAnswers.ts"],"names":[],"mappings":";;AACA,iEAAuD;AACvD,yEAA2E;AAE3E,qDAA0D;AAE1D,QAAQ,CAAC,4DAA4D,EAAE,GAAG,EAAE;IAC1E,MAAM,UAAU,GAAG,8BAAa,
|
1
|
+
{"version":3,"file":"testScoredTextAnswers.js","sourceRoot":"","sources":["../../__tests__/testScoredTextAnswers.ts"],"names":[],"mappings":";;AACA,iEAAuD;AACvD,yEAA2E;AAE3E,qDAA0D;AAE1D,QAAQ,CAAC,4DAA4D,EAAE,GAAG,EAAE;IAC1E,MAAM,UAAU,GAAG,IAAA,8BAAa,GAAE,CAAA;IAClC,IAAI,IAAU,CAAA;IACd,IAAI,GAAmB,CAAA;IAEvB,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,GAAG,GAAG,MAAM,IAAA,mCAAW,EAAC,IAAA,+BAAW,EAAC,WAAW,CAAC,CAAC,CAAA;QACjD,IAAI,GAAG,MAAM,UAAU,EAAE,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClB,MAAM,GAAG,CAAC,KAAK,EAAE,CAAA;IACnB,CAAC,CAAC,CAAA;IAEF,MAAM,aAAa,GAAG,EAAE,CAAA;IACxB,MAAM,cAAc,GAAG,EAAE,CAAA;IAEzB,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,IAAA,yBAAQ,EAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;QAE7B,MAAM,WAAW,CAAC,aAAa,CAAC,CAAA;QAChC,MAAM,+BAA+B,CAAC,aAAa,CAAC,CAAA;QAEpD,MAAM,WAAW,CAAC,cAAc,CAAC,CAAA;QACjC,MAAM,+BAA+B,CAAC,cAAc,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,eAAe,CAAC,aAAa,CAAC,CAAA;QACpC,MAAM,2BAA2B,CAAC,aAAa,CAAC,CAAA;QAEhD,MAAM,eAAe,CAAC,cAAc,CAAC,CAAA;QACrC,MAAM,2BAA2B,CAAC,cAAc,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;IAEF,KAAK,UAAU,WAAW,CAAC,UAAsB;QAC/C,MAAM,IAAI,CAAC,KAAK,CAAC,kCAAkC,UAAU,IAAI,CAAC,CAAA;IACpE,CAAC;IAED,KAAK,UAAU,eAAe,CAAC,UAAsB;QACnD,MAAM,IAAI,CAAC,KAAK,CAAC,kCAAkC,UAAU,IAAI,CAAC,CAAA;IACpE,CAAC;IAED,KAAK,UAAU,+BAA+B,CAAC,UAAsB;QACnE,MAAM,IAAI,CAAC,eAAe,CAAC,6CAA6C,UAAU,IAAI,CAAC,CAAA;IACzF,CAAC;IAED,KAAK,UAAU,2BAA2B,CAAC,UAAsB;QAC/D,MAAM,IAAI,CAAC,eAAe,CAAC,kCAAkC,UAAU,UAAU,CAAC,CAAA;IACpF,CAAC;AACH,CAAC,CAAC,CAAA"}
|
@@ -4,18 +4,18 @@ const exam_engine_exams_1 = require("@digabi/exam-engine-exams");
|
|
4
4
|
const exam_engine_rendering_1 = require("@digabi/exam-engine-rendering");
|
5
5
|
const puppeteerUtils_1 = require("./puppeteerUtils");
|
6
6
|
describe('testTextAnswers.ts — Text answer interactions', () => {
|
7
|
-
const createPage = puppeteerUtils_1.initPuppeteer();
|
7
|
+
const createPage = (0, puppeteerUtils_1.initPuppeteer)();
|
8
8
|
let page;
|
9
9
|
let ctx;
|
10
10
|
beforeAll(async () => {
|
11
|
-
ctx = await exam_engine_rendering_1.previewExam(exam_engine_exams_1.resolveExam('
|
11
|
+
ctx = await (0, exam_engine_rendering_1.previewExam)((0, exam_engine_exams_1.resolveExam)('SC/SC.xml'));
|
12
12
|
page = await createPage();
|
13
13
|
});
|
14
14
|
afterAll(async () => {
|
15
15
|
await ctx.close();
|
16
16
|
});
|
17
17
|
it('updates the character count', async () => {
|
18
|
-
await puppeteerUtils_1.loadExam(page, ctx.url);
|
18
|
+
await (0, puppeteerUtils_1.loadExam)(page, ctx.url);
|
19
19
|
await type('h');
|
20
20
|
await expectCharacterCountToBe(1);
|
21
21
|
await type('e');
|
@@ -26,45 +26,51 @@ describe('testTextAnswers.ts — Text answer interactions', () => {
|
|
26
26
|
await expectCharacterCountToBe(0);
|
27
27
|
});
|
28
28
|
it('updates the saved indicator after a delay', async () => {
|
29
|
-
await puppeteerUtils_1.loadExam(page, ctx.url);
|
29
|
+
await (0, puppeteerUtils_1.loadExam)(page, ctx.url);
|
30
30
|
await expectSaveIndicatorNotToExist();
|
31
31
|
await type('moi');
|
32
32
|
await expectNotToBeSaved();
|
33
|
-
await puppeteerUtils_1.delay(2000);
|
34
33
|
await expectToBeSaved();
|
35
34
|
await type(' kaikille');
|
36
35
|
await expectNotToBeSaved();
|
37
|
-
await puppeteerUtils_1.delay(2000);
|
38
36
|
await expectToBeSaved();
|
39
|
-
await puppeteerUtils_1.loadExam(page, ctx.url);
|
37
|
+
await (0, puppeteerUtils_1.loadExam)(page, ctx.url);
|
40
38
|
await expectToBeSaved();
|
41
39
|
});
|
42
|
-
it('
|
43
|
-
await puppeteerUtils_1.loadExam(page, ctx.url);
|
44
|
-
await
|
45
|
-
await type('oikea vastaus',
|
46
|
-
await type('oikea vastaus 2',
|
47
|
-
await
|
48
|
-
await
|
49
|
-
|
50
|
-
expect(errorText).toEqual('Osa 1: Vastaa joko tehtävään 1 tai 2.');
|
51
|
-
await clearInput(3);
|
52
|
-
await puppeteerUtils_1.delay(2000);
|
53
|
-
await expectErrorIndicatorNotToExist();
|
40
|
+
it('shows the error indicator when too many answers', async () => {
|
41
|
+
await (0, puppeteerUtils_1.loadExam)(page, ctx.url);
|
42
|
+
await expectErrorIndicatorToDisappear();
|
43
|
+
await type('oikea vastaus', 87);
|
44
|
+
await type('oikea vastaus 2', 88);
|
45
|
+
await expectErrorIndicator('Tehtävä 20: Vastaa joko kohtaan 20.1 tai 20.2.');
|
46
|
+
await clearInput(88);
|
47
|
+
await expectErrorIndicatorToDisappear();
|
54
48
|
});
|
55
|
-
|
56
|
-
|
57
|
-
await
|
49
|
+
it('shows the error indicator when answer is too long', async () => {
|
50
|
+
await (0, puppeteerUtils_1.loadExam)(page, ctx.url);
|
51
|
+
await expectErrorIndicatorToDisappear();
|
52
|
+
await type('o'.repeat(241), 87);
|
53
|
+
await expectErrorIndicator('Tehtävä 20.1: Vastaus on liian pitkä.');
|
54
|
+
});
|
55
|
+
const expectErrorIndicator = async (text) => {
|
56
|
+
await page.waitForFunction((text) => {
|
57
|
+
const errorIndicator = document.querySelector('.error-indicator');
|
58
|
+
return (errorIndicator === null || errorIndicator === void 0 ? void 0 : errorIndicator.innerText.trim()) === text;
|
59
|
+
}, {}, text);
|
60
|
+
};
|
61
|
+
const type = (text, questionId = 87) => page.type(`.text-answer[data-question-id="${questionId}"]`, text);
|
62
|
+
async function clearInput(questionId = 87) {
|
63
|
+
await page.click(`.text-answer[data-question-id="${questionId}"]`, { clickCount: 3 });
|
58
64
|
await page.keyboard.press('Backspace');
|
59
65
|
}
|
60
|
-
async function expectCharacterCountToBe(expectedCount) {
|
61
|
-
const text = await puppeteerUtils_1.getTextContent(page,
|
66
|
+
async function expectCharacterCountToBe(expectedCount, questionId = 87) {
|
67
|
+
const text = await (0, puppeteerUtils_1.getTextContent)(page, `.text-answer[data-question-id="${questionId}"] ~ .answer-toolbar`);
|
62
68
|
const count = Number(/\d+/.exec(text));
|
63
69
|
expect(count).toEqual(expectedCount);
|
64
70
|
}
|
65
|
-
const expectToBeSaved = () => page
|
66
|
-
const expectNotToBeSaved = () =>
|
67
|
-
const expectSaveIndicatorNotToExist = () =>
|
68
|
-
const
|
71
|
+
const expectToBeSaved = () => page.waitForSelector('.save-indicator-text--saved');
|
72
|
+
const expectNotToBeSaved = () => page.waitForSelector('.save-indicator-text--saved', { hidden: true });
|
73
|
+
const expectSaveIndicatorNotToExist = () => page.waitForSelector('.save-indicator', { hidden: true });
|
74
|
+
const expectErrorIndicatorToDisappear = () => page.waitForSelector('.error-indicator', { hidden: true });
|
69
75
|
});
|
70
76
|
//# sourceMappingURL=testTextAnswers.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"testTextAnswers.js","sourceRoot":"","sources":["../../__tests__/testTextAnswers.ts"],"names":[],"mappings":";;AAAA,iEAAuD;AACvD,yEAA2E;AAE3E,
|
1
|
+
{"version":3,"file":"testTextAnswers.js","sourceRoot":"","sources":["../../__tests__/testTextAnswers.ts"],"names":[],"mappings":"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"}
|