CLI
Phasis zawiera trzy główne programy wykonywalne w bin/:
bin/phasis— uruchamia pliki JavaScript, oblicza kod źródłowy przekazany w wierszu poleceń i zrzuca AST.bin/test262— uruchamia oficjalny zestaw zgodności ECMAScript dla Phasis.bin/wpt— uruchamia testy Web Platform Tests dla Phasis (URL, kodowanie, fetch, nagłówki, Blob, AbortSignal, strumienie, …).
Po composer require phasis/phasis, bin/phasis i bin/test262 są dowiązaniami do vendor/bin/. Działa tam tylko bin/phasis: bin/test262 wymaga podmodułu git test262 i klas testowych, których pakiet Composer nie zawiera, a bin/wpt w ogóle nie jest dołączony. Oba uruchamiaj z klonu repozytorium Phasis.
bin/phasis
phasis <file.js> | phasis -e '<source>' | phasis --ast <file.js>
To cały interfejs: brak REPL, wejścia ze stdin i flagi modułu.
Uruchamianie pliku
./vendor/bin/phasis script.js
Wykonuje script.js jako klasyczny skrypt. Po zakończeniu wszystkie treści wypisane przez skrypt za pomocą console.log (oraz console.error, console.warn, …) są jednocześnie drukowane na stdout. Jeśli skrypt zgłosi wyjątek, komunikat błędu trafia na stderr, a kod wyjścia wynosi 1.
Plik jest zawsze analizowany jako klasyczny skrypt, więc plik z import / export lub najwyższopoziomowym await powoduje błąd SyntaxError. Aby uruchomić moduł ES, użyj Engine::evalAsModule() z PHP (zobacz dokumentację API) albo najpierw zbundluj kod.
Obliczanie kodu źródłowego
./vendor/bin/phasis -e 'console.log(Math.PI * 2)'
# 6.283185307179586
Drugi argument jest obliczany jako kompletny skrypt. Drukowane jest tylko wyjście console; wartość ostatniego wyrażenia nie jest wyświetlana, więc phasis -e '1 + 2' nic nie drukuje.
Zrzut AST
./vendor/bin/phasis --ast script.js
./vendor/bin/phasis -e 'a + b' --ast
Drukuje drzewo parsowania w formacie JSON (z wcięciem dwóch spacji). Przydatne do debugowania problemów parsera lub tworzenia narzędzi opartych na Phasis. Aby uzyskać dostęp programistyczny, użyj parser API.
bin/test262
bin/test262 uruchamia oficjalny test262 zestaw zgodności dla Phasis. Przydaje się jako zestaw testów regresji przy wnoszeniu zmian. Pełny zrzut zestawu w COMPAT.md jest tworzony przez powiązane bin/compat-report, które ręcznie uruchamiana macierz CI wykonuje w shardach.
Uruchamianie pojedynczej kategorii
./bin/test262 --category built-ins/Array
Uruchamianie pełnego zestawu
./bin/test262 --jobs 4
Konfiguracja
Runner odczytuje config/support.php z katalogu głównego projektu. Lista test262_skipped_features jest pusta: żadna funkcja test262 nie jest pomijana, w tym tail-call-optimization. Plik zawiera też listę kategorii oraz testów, które muszą być uruchamiane w izolacji.
Sam zestaw jest podmodułem git test262; po sklonowaniu uruchom git submodule update --init test262. Bez niego runner kończy działanie komunikatem "Nie znaleziono zestawu test262".
Inne przydatne flagi
| Flaga | Działanie |
|---|---|
--failures |
wypisuje jeden wiersz dla każdego niezaliczonego testu |
--limit N |
kończy po pierwszych N testach |
--jobs N |
uruchamia równolegle N testów |
--files-from file |
uruchamia tylko testy wymienione w file |
--json |
emituje podsumowanie czytelne dla maszyny na stdout |
--no-progress |
ukrywa wiersz postępu |
Najnowszy zrzut znajdziesz w sekcji Zgodność.
bin/wpt
bin/wpt uruchamia fixtures Web Platform Tests zaimportowane do tests/Wpt/fixtures/. Zestaw obejmuje URL, kodowanie, atob/btoa, structuredClone, performance, Headers, Blob/File, AbortController/Signal, EventTarget, FormData, WHATWG Streams, pełny interfejs crypto/SubtleCrypto, fetch/Request/Response, XMLHttpRequest/XMLHttpRequestUpload oraz WebSocket. Tabela wskaźników zaliczenia dla poszczególnych obszarów znajduje się w sekcji Interfejsy Web.
Uruchamianie wszystkich zaimportowanych fixtures
./bin/wpt
Uruchamianie jednej kategorii
./bin/wpt --category headers
./bin/wpt --category streams
./bin/wpt --category blob
Dane wyjściowe dla podtestów
./bin/wpt --category abort --verbose
Drukuje każdy podtest (PASS / FAIL) w ramach każdego fixture, a przy niepowodzeniu również komunikaty asercji.
Dane wyjściowe JSON
./bin/wpt --json
Podsumowanie zaliczenia lub niezaliczenia w formacie czytelnym maszynowo dla potoków CI lub analizy skryptowej.
Uwagi
- Testy fixture’ów korzystające z fetch automatycznie uruchamiają dołączony serwer testowy WPT pod adresem
tests/Wpt/fetch-server.phpna127.0.0.1:8765, a następnie go wyłączają. - Warstwa pośrednicząca harnessu w
tests/Wpt/testharness-shim.jsimplementuje tylko te elementy API WPT API, z których korzystają zaimportowane fixture’y (około 400 linii w porównaniu z pełnym plikiem liczącym około 3 tys. liniitestharness.js). - Fixture’y źródłowe znajdują się w
tests/Wpt/upstream/(to ignorowany przez Git rzadki checkout web-platform-tests/wpt). Aby zaimportować kolejne, skopiuj pliki.any.jszupstream/<area>/dofixtures/<category>/, a runner wykryje je automatycznie.
Kody wyjścia
bin/phasis kończy działanie z jednym z dwóch kodów:
| Kod | Znaczenie |
|---|---|
0 |
powodzenie — skrypt wykonał się do końca (również po --ast) |
1 |
każdy inny przypadek: nieobsłużony wyjątek JS, błąd składni, brakujący plik lub nieprawidłowe argumenty |
Błędy skryptu wypisują komunikat na standardowe wyjście błędów (stderr). Nieprawidłowe argumenty i brakujące pliki powodują wypisanie wiersza użycia na stderr.
Limity zasobów
bin/phasis działa z domyślnymi ustawieniami silnika i nie udostępnia flag limitów: stos wywołań JS ma limit 4 096 ramek, transpilowane domknięcia są chronione limitem 8 192 ramek, a domyślne maxLoopIterations wynosi 100 000 i dotyczy tylko kodu wykonywanego przez interpreter przechodzący po drzewie (zobacz API: setLimit). Nie ma limitu czasu; jeśli skrypt może się nie zakończyć, uruchom polecenie przez timeout.