CLI
Phasisには、bin/に3つの主要な実行ファイルがあります。
bin/phasis— JavaScriptファイルを実行し、コマンドラインで渡されたソースを評価し、ASTを出力します。bin/test262— Phasisに対して公式ECMAScript適合性テストを実行します。bin/wpt— Phasisに対してWeb Platform Testsのフィクスチャを実行します(URL、エンコーディング、fetch、ヘッダー、Blob、AbortSignal、ストリームなど)。
composer require phasis/phasisの後、bin/phasisとbin/test262はvendor/bin/からリンクされています。そこから動作するのはbin/phasisだけです。bin/test262にはtest262のgitサブモジュールとテストクラスが必要ですが、Composerパッケージには含まれていません。また、bin/wptはそもそも同梱されていません。どちらもPhasisリポジトリのクローンから実行してください。
bin/phasis
phasis <file.js> | phasis -e '<source>' | phasis --ast <file.js>
この3つの形式がインターフェースのすべてです。REPL、標準入力、モジュールフラグはありません。
ファイルを実行する
./vendor/bin/phasis script.js
script.jsをクラシックスクリプトとして実行します。実行が完了すると、スクリプトがconsole.log(およびconsole.error、console.warnなど)で書き込んだ内容が、一度に標準出力へ出力されます。スクリプトが例外をスローすると、エラーメッセージは標準エラー出力に送られ、終了ステータスは1になります。
ファイルは常にクラシックスクリプトとして解析されるため、import / exportやトップレベルawaitを含むファイルはSyntaxErrorになります。ESモジュールを実行するには、PHPからEngine::evalAsModule()を使う(APIリファレンスを参照)か、先にコードをバンドルしてください。
ソースを評価する
./vendor/bin/phasis -e 'console.log(Math.PI * 2)'
# 6.283185307179586
引数はスクリプト全体として評価されます。出力されるのはconsoleの出力だけで、最後の式の値は出力されません。そのため、phasis -e '1 + 2'は何も出力しません。
ASTを出力する
./vendor/bin/phasis --ast script.js
./vendor/bin/phasis -e 'a + b' --ast
解析ツリーをJSON形式で出力します(2スペースでインデント)。パーサーの問題をデバッグするときや、Phasis上にツールを構築するときに役立ちます。プログラムからアクセスするには、パーサーAPIを使ってください。
bin/test262
bin/test262は、Phasisに対して公式test262スイートを実行します。変更を加える際の回帰テストに便利です。COMPAT.mdにある全スイートのスナップショットは、関連するbin/compat-reportが生成します。手動で開始するCIマトリックスでは、これを複数のシャードに分けて実行します。
カテゴリを1つ実行する
./bin/test262 --category built-ins/Array
スイート全体を実行する
./bin/test262 --jobs 4
設定
ランナーはプロジェクトのルートからconfig/support.phpを読み込みます。test262_skipped_featuresのリストは空なので、tail-call-optimizationを含め、test262の機能は何もスキップされません。このファイルには、カテゴリと単独で実行する必要があるテストも記載されています。
スイート本体はtest262のgitサブモジュールです。クローン後にgit submodule update --init test262を実行してください。これがない場合、ランナーは「test262 suite not found」と表示して終了します。
その他の便利なフラグ
| フラグ | 用途 |
|---|---|
--failures |
失敗したテストごとに1行を出力する |
--limit N |
最初のN件のテストを実行した時点で停止する |
--jobs N |
N件のテストを並列実行する |
--files-from file |
fileに記載されたテストだけを実行する |
--json |
機械処理可能なサマリーを標準出力に出力する |
--no-progress |
進捗行の出力を抑制する |
最新のスナップショットは互換性のセクションを参照してください。
bin/wpt
bin/wptは、tests/Wpt/fixtures/に取り込まれたWeb Platform Testsのフィクスチャを実行します。テスト対象はURL、エンコーディング、atob/btoa、structuredClone、performance、Headers、Blob/File、AbortController/Signal、EventTarget、FormData、WHATWG Streams、crypto / SubtleCryptoの全機能、fetch / Request / Response、XMLHttpRequest / XMLHttpRequestUpload、WebSocketです。領域ごとの合格率はWeb APIsを参照してください。
取り込んだすべてのフィクスチャを実行する
./bin/wpt
カテゴリを1つ実行する
./bin/wpt --category headers
./bin/wpt --category streams
./bin/wpt --category blob
サブテストごとの出力
./bin/wpt --category abort --verbose
各フィクスチャ内のすべてのサブテスト(PASS / FAIL)を、失敗時のアサーションメッセージとともに出力します。
JSON出力
./bin/wpt --json
CIパイプラインやスクリプトによる分析向けに、機械処理可能な合否サマリーを出力します。
注意事項
- Fetchを使うフィクスチャでは、
127.0.0.1:8765上のtests/Wpt/fetch-server.phpでバンドル済みWPTテストサーバーが自動起動し、実行後に停止します。 tests/Wpt/testharness-shim.jsにあるハーネスのシムは、取り込んだフィクスチャが使うWPTのAPI機能だけを実装します(全体では約3K行のtestharness.jsに対し、約400行)。- ソースフィクスチャは
tests/Wpt/upstream/にあります(web-platform-tests/wptのgitignore対象のスパースチェックアウト)。追加で取り込むには、upstream/<area>/から.any.jsファイルをfixtures/<category>/にコピーしてください。ランナーが自動的に検出します。
終了コード
bin/phasisは2種類の終了コードを返します。
| コード | 意味 |
|---|---|
0 |
成功 — スクリプトが最後まで実行された(--astの後も含む) |
1 |
その他すべて:未捕捉のJS例外、構文エラー、ファイルの欠落、無効な引数 |
スクリプトのエラーはメッセージが標準エラー出力に出力されます。無効な引数やファイルの欠落がある場合は、使用方法を示す行が標準エラー出力に出力されます。
リソース上限
bin/phasisはエンジンのデフォルト設定で動作し、上限を指定するフラグはありません。JSコールスタックの上限は4,096フレーム、トランスパイル済みクロージャーのガードは8,192フレームです。また、デフォルトのmaxLoopIterationsは100,000で、ツリーウォーキングインタープリターが実行するコードにのみ適用されます(API: setLimitを参照)。時間制限はありません。終了しない可能性のあるスクリプトには、コマンドをtimeoutで囲んでください。