Treci la conținut

Acoperire test262

test262 este suita oficială de teste de conformitate, întreținută de TC39 și metoda canonică de comparare a motoarelor JavaScript.

Phasis trece suita completă la 100 % în toate categoriile — semantica limbajului, biblioteca standard, Intl, funcționalitățile web vechi annexB, directorul staging cu teste în incubare și autotestele harness-ului. Fără ocoliri prin fanioane de funcționalități, intrări pe lista de blocare din cauza limitărilor gazdei sau excluderi per fragment.

Suita este fixată la o versiune: submodulul test262 git fixează revizia cu care este măsurat Phasis, iar testele noi din amonte sunt luate în calcul numai după actualizarea submodulului. Instantaneul suitei complete din COMPAT.md este regenerat de fluxul de lucru compat-matrix.yml, pornit manual, nu la fiecare push; COMPAT.md înregistrează data capturării instantaneului și commitul folosit.

Pentru comparație, test262.fyi urmărește aceeași suită pentru fiecare motor JS de producție:

Motor Conformitate
V8 (Chrome / Node) 99.8 %
SpiderMonkey (Firefox) 99.6 %
JavaScriptCore (Safari) 99.4 %
QuickJS ~97 %
Hermes (React Native) ~95 %
Phasis 100 %

Fiecare dintre aceste motoare păstrează o mică diferență reziduală (propuneri integrate recent, cazuri-limită rare încă în dezvoltare). Phasis elimină diferența deoarece este o implementare cu scop unic, axată pe conformitate.

Rulare locală

Rularea necesită submodulul test262 și clasele de test ale depozitului, care nu sunt incluse în pachetul Composer, așa că rulați-o dintr-o clonă:

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

O rulare completă durează aproximativ 20 de minute pe un Mac recent; fragmentele matricei CI rulează în paralel și se încheie în mai puțin de zece minute.

Pentru a rula o singură categorie în timpul depanării:

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

Consultați referința CLI pentru lista completă de fanioane.

De ce contează

JavaScript are o semantică subtilă — NaN !== NaN, -0 === 0, [1] + 1 === "11", ordinea exactă a enumerării proprietăților și momentul executării microtask-urilor Promise. O bibliotecă ce rulează codul utilizatorului JS trebuie să le gestioneze corect pe toate, de fiecare dată. test262 stabilește standardul pentru „corect”; la 100 %, un program JS care rulează pe V8 produce rezultate identice la nivel de octet pe Phasis (cu excepția API-urilor disponibile doar în browser).