
# Pokrytí testovací sady test262

[test262](https://github.com/tc39/test262) je oficiální testovací sada shody spravovaná TC39 a standardní způsob porovnávání modulů JavaScript.

Phasis prochází **celou sadou s úspěšností 100 %** ve všech kategoriích — sémantika jazyka, standardní knihovna, `Intl`, zastaralé webové funkce `annexB`, adresář rozpracovaných testů `staging` a samotestování testovacího rámce. Žádné obcházení příznaků funkcí, žádné položky na seznamu výjimek pro nedostatky hostitele ani vyloučení jednotlivých oddílů.

Verze sady je pevně stanovena: git submodul `test262` určuje revizi, vůči níž se měří Phasis, a nové upstreamové testy se započítají až po aktualizaci submodulu. Úplný snímek sady v [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md) znovu generuje workflow `compat-matrix.yml`, které se spouští ručně, nikoli při každém pushnutí; `COMPAT.md` zaznamenává čas pořízení snímku a odpovídající commit.

Pro srovnání: [test262.fyi](https://test262.fyi) sleduje stejnou sadu vůči každému produkčnímu enginu JS:

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

Každý z těchto enginů má ještě drobné nedostatky (nově zařazené návrhy, rozpracované okrajové případy). Phasis tuto mezeru odstraňuje, protože je od základu navržen s důrazem na shodu se specifikací.

## Spuštění lokálně

Spouštěč potřebuje submodul `test262` a testovací třídy repozitáře, které nejsou součástí balíčku Composer, proto jej spusťte z klonu:

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

Úplné spuštění trvá na novějším Macu přibližně 20 minut; CI rozdělí testy mezi paralelní úlohy a dokončí je za méně než 10 minut.

Při ladění můžete spustit jen jednu kategorii:

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

Úplnou sadu příznaků najdete v [referenční příručce CLI](https://phasis.inline0.dev/cs/docs/cli#bin-test262).

## Proč je to důležité

JavaScript má jemné sémantické nuance — `NaN !== NaN`, `-0 === 0`, `[1] + 1 === "11"`, přesné pořadí výčtu vlastností i načasování mikrotasků Promise. Knihovna, která spouští uživatelský kód JS, musí pokaždé správně zvládnout vše z toho. test262 představuje měřítko správnosti; při úspěšnosti 100 % program JS spuštěný na V8 vytváří bajtově totožný výstup na Phasis (s výjimkou rozhraní dostupných pouze v prohlížeči).
