
# test262-täckning

[test262](https://github.com/tc39/test262) är den officiella testsviten för överensstämmelse, som underhålls av TC39 och är det vedertagna sättet att jämföra JavaScript-motorer.

Phasis godkänner **hela testsviten till 100 %** i alla kategorier — språklig semantik, standardbiblioteket, `Intl`, äldre webbtekniker `annexB`, katalogen `staging` med tester under utveckling och testkörarens självtester. Inga kringgåenden med funktionsflaggor, inga blocklistposter för luckor i värdmiljön, inga uteslutningar per delkörning.

Testsviten är låst till en viss version: delmodulen `test262` git låser revisionen som Phasis mäts mot, och nya uppströmstester räknas först när delmodulen uppdateras. Ögonblicksbilden av hela testsviten i [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md) återskapas av arbetsflödet `compat-matrix.yml`, som startas manuellt och inte vid varje push; `COMPAT.md` anger när ögonblicksbilden togs och vilken commit den gäller.

Som jämförelse följer [test262.fyi](https://test262.fyi) samma testsvit för varje produktionsmotor för JS:

| Motor | Överensstämmelse |
|---|---:|
| V8 (Chrome / Node) | 99.8 % |
| SpiderMonkey (Firefox) | 99.6 % |
| JavaScriptCore (Safari) | 99.4 % |
| QuickJS | ~97 % |
| Hermes (React Native) | ~95 % |
| **Phasis** | **100 %** |

Dessa motorer har alla ett litet antal återstående luckor (nyligen landade förslag och ovanliga specialfall under utveckling). Phasis täpper till luckan genom att vara en implementering med ett enda syfte och fokus på överensstämmelse.

## Kör lokalt

Testköraren kräver delmodulen `test262` och testklasserna i arkivet, som inte ingår i paketet Composer. Kör den därför från en klon:

```bash
git clone https://github.com/inline0/phasis
cd phasis
git submodule update --init test262
composer install
./bin/test262 --jobs 4
```

En fullständig körning tar omkring 20 minuter på en nyare Mac. CI-matrisen delar upp testerna och kör dem parallellt, vilket tar mindre än tio minuter.

Kör en enskild kategori vid felsökning:

```bash
./bin/test262 --category built-ins/Array
./bin/test262 --category language/expressions/yield --failures
```

Se [referensen för CLI](https://phasis.inline0.dev/sv/docs/cli#bin-test262) för alla flaggor.

## Varför det här spelar roll

JavaScript har subtil semantik — `NaN !== NaN`, `-0 === 0`, `[1] + 1 === "11"`, den exakta ordningen för uppräkning av egenskaper och tidpunkten för Promises mikrouppgifter. Ett bibliotek som kör JS användarkod behöver att allt detta fungerar rätt, varje gång. test262 sätter ribban för vad ”rätt” innebär; en godkännandegrad på 100 % innebär att ett JS-program som körs på V8 ger byteidentiska resultat på Phasis (med undantag för webbläsarspecifika API:er).
