Liigu sisu juurde

test262 katvus

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

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

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

Kõigi lippude kohta vaadake CLI viidet.

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.