
# test262 katvus

[test262](https://github.com/tc39/test262) on TC39 hallatav ametlik vastavustestide komplekt ja standardne viis ECMAScripti mootorite võrdlemiseks JavaScript.

Phasis läbib **kogu komplekti tulemusega 100 %** kõigis kategooriates — keele semantika, standardteek, `Intl`, `annexB` pärandveebifunktsioonid, inkubatsioonifaasis testide kataloog `staging` ja testimisraamistiku enesetestid. Funktsioonilippudega möödahiilimisi, hosti puudujääkide loendikirjeid ega killupõhiseid välistusi pole.

Testikomplekti versioon on fikseeritud: `test262` giti alamoodul määrab versiooni, mille alusel Phasis mõõdetakse, ja uued ülesvoolu testid lähevad arvesse alles pärast alamooduli uuendamist. Kogu komplekti hetktõmmis asukohas [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md) luuakse uuesti `compat-matrix.yml` töövooga, mis käivitatakse käsitsi, mitte iga tõuke korral; `COMPAT.md` märgib hetktõmmise loomise aja ja kasutatud sissekande.

Võrdluseks jälgib [test262.fyi](https://test262.fyi) sama testikomplekti iga tootmiskasutuses oleva JS mootori puhul:

| Mootor | Vastavus |
|---|---:|
| V8 (Chrome / Node) | 99.8 % |
| SpiderMonkey (Firefox) | 99.6 % |
| JavaScriptCore (Safari) | 99.4 % |
| QuickJS | ~97 % |
| Hermes (React Native) | ~95 % |
| **Phasis** | **100 %** |

Kõigil neil mootoritel on väike jääkpuudujääk (äsja lisatud ettepanekud, arendatavad harvad erijuhud). Phasis sulgeb selle tühimiku, sest on loodud spetsiaalselt vastavuse tagamiseks.

## Käivitamine kohalikus keskkonnas

Käivitaja vajab `test262` alamoodulit ja hoidla testiklasse, mida Composer pakett ei sisalda, seega käivitage see hoidla kloonist:

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

Täielik käivitus võtab uuema Maciga umbes 20 minutit; CI maatriks jagab testid paralleelseteks osadeks ja lõpetab mõne minutiga.

Silumise ajal ühe kategooria käivitamiseks:

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

Kõigi lippude kohta vaadake [CLI viidet](https://phasis.inline0.dev/et/docs/cli#bin-test262).

## Miks see oluline on

JavaScript semantika on nüansirohke — `NaN !== NaN`, `-0 === 0`, `[1] + 1 === "11"`, omaduste loetlemise täpne järjekord ja Promise'i mikroülesannete ajastus. Teek, mis käitab kasutajate JS koodi, peab iga kord iga üksikasja õigesti käsitlema. test262 määrab, mida tähendab „õigesti“; tulemus 100 % tähendab, et JS programm annab V8 ja Phasis puhul brauseripõhiseid API-sid arvestamata baiditäpselt sama väljundi.
