mirror of
https://github.com/bendtherules/ask262.git
synced 2026-08-18 21:31:46 +00:00
git-subtree-dir: engine262 git-subtree-split: ae71998cc5a8315700555135b1ac202a0d6d0b31
101 lines
2.4 KiB
TypeScript
101 lines
2.4 KiB
TypeScript
/* eslint-disable no-console */
|
|
/* eslint-disable no-await-in-loop */
|
|
import fs from 'node:fs';
|
|
import path from 'node:path';
|
|
import { styleText } from 'node:util';
|
|
import { globSync } from 'tinyglobby';
|
|
import { createTestReporter, annotateFileWithURL } from '../tui.mts';
|
|
import { Test } from '../base.mts';
|
|
import {
|
|
Agent,
|
|
setSurroundingAgent,
|
|
ManagedRealm,
|
|
AbruptCompletion,
|
|
inspect,
|
|
} from '#self';
|
|
|
|
const failed = [
|
|
// stack overflow for us
|
|
'n_structure_100000_opening_arrays.json',
|
|
'n_structure_open_array_object.json',
|
|
];
|
|
|
|
const BASE_DIR = path.resolve(import.meta.dirname, 'JSONTestSuite');
|
|
|
|
const agent = new Agent();
|
|
setSurroundingAgent(agent);
|
|
|
|
const reporter = createTestReporter();
|
|
reporter.start();
|
|
|
|
function test(filename: string) {
|
|
const realm = new ManagedRealm();
|
|
|
|
const source = fs.readFileSync(filename, 'utf8');
|
|
const test = new Test(filename, filename, [], null!, '', source);
|
|
reporter.addTest(test);
|
|
|
|
if (failed.includes(path.basename(filename))) {
|
|
reporter.skipTest(test.id, 'skip-list');
|
|
return;
|
|
}
|
|
|
|
reporter.updateWorker(0, test.id);
|
|
let result;
|
|
try {
|
|
result = realm.evaluateScript(`JSON.parse(${JSON.stringify(source)});`);
|
|
} catch (error) {
|
|
reporter.updateWorker(0, null);
|
|
console.error(filename, error);
|
|
fail(filename, test.id, '');
|
|
return;
|
|
}
|
|
reporter.updateWorker(0, null);
|
|
|
|
const testName = path.basename(filename);
|
|
|
|
if (!result || result instanceof AbruptCompletion) {
|
|
if (testName.startsWith('n_')) {
|
|
reporter.testPassed(test.id);
|
|
} else if (testName.startsWith('i_')) {
|
|
reporter.testPassed(test.id);
|
|
} else {
|
|
console.error(inspect(result));
|
|
fail(filename, test.id, '');
|
|
}
|
|
} else {
|
|
if (testName.startsWith('n_')) {
|
|
fail(filename, test.id, 'Expected failure but got success');
|
|
} else {
|
|
reporter.testPassed(test.id);
|
|
}
|
|
}
|
|
}
|
|
|
|
const tests = globSync(
|
|
'test_{parsing,transform}/**/*.json',
|
|
{ cwd: BASE_DIR, absolute: true },
|
|
);
|
|
|
|
for (const t of tests) {
|
|
test(t);
|
|
await new Promise<void>((resolve) => {
|
|
setImmediate(resolve);
|
|
});
|
|
}
|
|
|
|
reporter.allTestsDiscovered();
|
|
reporter.exit();
|
|
setTimeout(() => {
|
|
process.exit();
|
|
});
|
|
|
|
function fail(file: string, testId: number, message: string) {
|
|
process.exitCode = 1;
|
|
|
|
// FAILED filename.js
|
|
const line1 = `${styleText('red', `FAILED ${annotateFileWithURL(file)}`)}\n`;
|
|
reporter.stdout(line1, message);
|
|
reporter.testFailed(testId);
|
|
}
|