1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
import { setBaseResourcePath } from '../../framework/resources.js';
import { DefaultTestFileLoader } from '../../internal/file_loader.js';
import { parseQuery } from '../../internal/query/parseQuery.js';
import { assert } from '../../util/util.js';
import { setupWorkerEnvironment, WorkerTestRunRequest } from './utils_worker.js';
// Should be WorkerGlobalScope, but importing lib "webworker" conflicts with lib "dom".
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
declare const self: any;
const loader = new DefaultTestFileLoader();
setBaseResourcePath('../../../resources');
async function reportTestResults(this: MessagePort | Worker, ev: MessageEvent) {
const { query, expectations, ctsOptions } = ev.data as WorkerTestRunRequest;
const log = setupWorkerEnvironment(ctsOptions);
const testcases = Array.from(await loader.loadCases(parseQuery(query)));
assert(testcases.length === 1, 'worker query resulted in != 1 cases');
const testcase = testcases[0];
const [rec, result] = log.record(testcase.query.toString());
await testcase.run(rec, expectations);
this.postMessage({
query,
result: {
...result,
logs: result.logs?.map(l => l.toRawData()),
},
});
}
self.onmessage = (ev: MessageEvent) => {
void reportTestResults.call(ev.source || self, ev);
};
self.onconnect = (event: MessageEvent) => {
const port = event.ports[0];
port.onmessage = (ev: MessageEvent) => {
void reportTestResults.call(port, ev);
};
};
|