
# test262 lefedettsége

A [test262](https://github.com/tc39/test262) a TC39 által fenntartott hivatalos megfelelőségi tesztcsomag és az JavaScript motorok összehasonlításának szabványos módja.

A(z) Phasis **a teljes tesztcsomag 100%-át teljesíti** minden kategóriában — a nyelvi szemantikát, a szabványos könyvtárat, az `Intl` elemet, az `annexB` örökölt webes funkciókat, a kísérleti teszteket tartalmazó `staging` könyvtárat és a tesztkeretrendszer önellenőrzéseit is beleértve. Nincsenek megkerülések funkciójelzőkkel, tiltólistás gazdagéphiányok vagy kihagyott tesztfelosztások.

A tesztcsomag rögzített: a(z) `test262` Git-almodul meghatározza a(z) Phasis mérésének alapjául szolgáló revíziót, és az új, upstream tesztek csak az almodul frissítése után számítanak. A teljes tesztcsomag pillanatképe a [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md) helyen található, és a(z) `compat-matrix.yml` munkafolyamat készíti újra; ezt kézzel indítják, nem minden push után. A(z) `COMPAT.md` rögzíti, mikor készült a pillanatkép, és melyik commit ellenőrizte.

Összehasonlításképpen a [test262.fyi](https://test262.fyi) ugyanezt a tesztcsomagot követi nyomon minden éles JS motor esetében:

| Motor | Megfelelőség |
|---|---:|
| V8 (Chrome / Node) | 99.8 % |
| SpiderMonkey (Firefox) | 99.6 % |
| JavaScriptCore (Safari) | 99.4 % |
| QuickJS | ~97 % |
| Hermes (React Native) | ~95 % |
| **Phasis** | **100 %** |

Ezekben a motorokban kisebb fennmaradó hiányok vannak (újonnan bevezetett javaslatok, fejlesztés alatt álló ritka szélső esetek). A(z) Phasis azért szünteti meg ezeket a hiányokat, mert kifejezetten a specifikációnak való megfelelésre összpontosít.

## Helyi futtatás

A futtatóhoz szükség van a(z) `test262` almodulra és a tároló tesztosztályaira; ezek egyike sem része a(z) Composer csomagnak, ezért klónból futtassa:

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

Egy teljes futtatás egy újabb Macen körülbelül 20 percet vesz igénybe; a CI-mátrix párhuzamosan osztja fel a feladatokat, így néhány perc alatt végez.

Hibakereséskor egyetlen kategória futtatásához:

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

A kapcsolók teljes listáját lásd a [CLI dokumentációjában](https://phasis.inline0.dev/hu/docs/cli#bin-test262).

## Miért fontos ez

JavaScript finom szemantikával rendelkezik — `NaN !== NaN`, `-0 === 0`, `[1] + 1 === "11"`, a tulajdonságok felsorolásának pontos sorrendje és a Promise mikrotaszkok időzítése. Egy könyvtárnak, amely JS felhasználói kódot futtat, mindezt minden alkalommal helyesen kell kezelnie. A „helyes” mércéje a test262; ha ez 100%-ban sikeres, akkor egy JS program, amely V8 alatt fut, bájtról bájtra azonos kimenetet ad Phasis alatt (a csak böngészőben elérhető API-kat nem számítva).
