mirror of
https://github.com/Heretek-AI/opencode.git
synced 2026-11-10 10:21:31 -10:00
44 lines
2.4 KiB
Markdown
44 lines
2.4 KiB
Markdown
# test262
|
|
|
|
Runs upstream [test262](https://github.com/tc39/test262) files verbatim through `test/test262.test.ts`. The files
|
|
themselves are not committed yet: populate them from a local checkout with
|
|
|
|
```sh
|
|
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 (every `built-ins` and
|
|
`language` directory, about 14,900 files after filtering), and what is left out.
|
|
- `built-ins/`, `language/` — the copied files, mirroring upstream `test/`; gitignored.
|
|
- `skipped.txt` — vendored files that fail on a known interpreter gap, one `path # reason` per line. They are
|
|
skipped, and each gap is listed as unchecked in `interpreter-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 files. Boundaries are
|
|
intentional limits of the interpreter, not compatibility work: classes, prototype objects, property descriptors,
|
|
accessors, boxed primitives, typed arrays and buffers, `WeakRef` and `FinalizationRegistry`, `Reflect` and `Proxy`, 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
|
|
|
|
```sh
|
|
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.
|