Přejít k obsahu

Pokrytí testovací sady test262

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 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 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:

Shell
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:

Shell
./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.

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).