test262
Runs upstream test262 files verbatim through test/test262.test.ts. The files
themselves are not committed yet: populate them from a local checkout with
git clone https://github.com/tc39/test262 ~/development/test262
bun run script/sync-test262.ts ~/development/test262
Without them the runner registers no tests, so CI is unaffected. Licensed under test/LICENSE.test262.
Layout
manifest.json— the pinned upstream revision, which upstream directories are copied, and what is left out.built-ins/,language/— the copied files, mirroring upstreamtest/; gitignored.skipped.txt— vendored files that fail on a known interpreter gap, onepath # reasonper line. They are skipped, and each gap is listed as unchecked ininterpreter-support.md.run.ts— runs one file: prepends"use strict", provides the harness (assert,Test262Error,compareArray,$DONE,$DONOTEVALUATE) as host globals, and interprets the file's frontmatter (negative,flags: [async]).
What is not vendored
script/sync-test262.ts skips a file when its frontmatter declares a flags, features, or includes value the
manifest marks unsupported, or when its code matches one of the manifest's boundaries patterns. The sync checks the
checkout is at the pinned revision, so every machine runs the same 3993 files. Boundaries are
intentional limits of the interpreter, not compatibility work: classes, this, arguments, prototype objects,
property descriptors, accessors, boxed primitives, sloppy mode, eval, Symbol(), and the $262 host API. If one
of those decisions changes, delete its entry and re-sync; the tests are upstream, not lost.
Commands
bun run script/sync-test262.ts /path/to/test262 # re-copy at the pinned revision; edit manifest.json to change scope
bun run script/test262-report.ts [--write] [dir] # run everything, group failures by cause; --write regenerates skipped.txt
bun test test/test262.test.ts # what CI runs
When a fix makes skipped files pass, the report lists them so they can be removed from skipped.txt, and the
matching gap in interpreter-support.md is checked in the same change.