temporal-test262-runner v0.4.0
Lightweight runner for ECMAScript Temporal's Test262 tests
This package provides a fast way for polyfills of ECMAScript
Temporal
to run Temporal's 6,300+
Test262 tests. Test262 (https://github.com/tc39/test262) is the official
conformance test suite for ECMAScript, and this package quickly runs a subset of
those tests that are specific to Temporal. All Temporal polyfills should pass
Test262.
This runner is much faster than
test262-harness
(the default
Test262 harness) because:
- It runs only 6,300+ Temporal-specific tests, instead of the full suite.
- It pre-parses the Temporal polyfill into a
vm.Script
, instead of reading and parsing the whole file once for each test like the prelude option oftest262-harness
does.
For code coverage, set the environment variable NODE_V8_COVERAGE
to the path
(relative to the working directory) where coverage metrics should be output.
These can be processed with the c8
tool. NOTE:
as of Node 18.7 there is a memory leak that makes it impossible to run the
entire suite with NODE_V8_COVERAGE, so for code coverage tests you should run it
in chunks.
Example Usage
import runTest262 from 'temporal-test262-runner';
const result = runTest262({
test262Dir: 'test262',
polyfillCodeFile: 'dist/script.js',
expectedFailureFiles: ['test/expected-failures.txt'],
testGlobs: process.argv.slice(2)
});
// if result is `true`, all tests succeeded
process.exit(result ? 0 : 1);
Options
polyfillCodeFile: string
- Filename of the Temporal polyfill. Must be a single ECMAScript file that contains the Temporal object injected into the global namespace, as well as Temporal-related changes polyfilled intoIntl
andDate
built-in objects.test262Dir: string
- Root directory of the test262 submodule repo.testGlobs?: string[]
- If omitted, all tests will be run. This option provides glob patterns that specify a subset of tests to be run. Globs are resolved relative totest/**/Temporal/
subdirectories oftest262Dir
. If a pattern doesn't match any files relative totest/**/Temporal/
, it will also try to match relative to the current working directory, so that tab completion works. Example:[ 'PlainDateTime/**', 'prototype/with/*.js' ]
expectedFailureFiles?: string[]
Optional array of text filenames that each contain a list of test files (relative to thetest
subdirectory oftest262Dir
) that are expected to fail. Lines starting with#
and blank lines are ignored. Lines from multiple files will be concatenated and de-duped. Example:# https://github.com/tc39/test262/pull/3548 built-ins/Temporal/Duration/compare/argument-string-negative-fractional-units.js built-ins/Temporal/Duration/from/argument-string-negative-fractional-units.js