Polyglot APIベースのテスト互換性キット

テスト互換性キット(TCK)は、TruffleLanguageの相互運用性と計測を検証するテストの集合です。TCKは`org.graalvm.polyglot` APIに基づいています。

言語の追加 #

言語をテストするには、LanguageProviderを実装してください。`LanguageProvider`は`java.util.ServiceLoader`を使用してロードされるため、`META-INF/services/org.graalvm.polyglot.tck.LanguageProvider`ファイルに実装を登録する必要があります。`LanguageProvider`は、言語のデータ型、言語の式(演算子)、および言語の制御フローステートメントを、データ型を返すか演算子(ステートメント)を実行する関数として提供する必要があります。返された関数の合成を可能にするために、Snippet.Builderを使用してパラメータと戻り値の型を割り当てる必要があります。また、`LanguageProvider`は、TCKが計測のテストに使用できる、シンプルながらも代表的なスクリプトを提供する必要があります。

`mx` を使用した TCK テストの実行 #

テストは `mx unitest` を使用して実行されます。テストを実行すると、プライマリスイートと依存スイートのすべての `LanguageProvider` が使用されます。`truffle` スイートは、Java のデータ型と Java の相互運用性をテストするための プロキシ を作成する `java-host` `LanguageProvider` を提供します。

TCKテストのみを実行するには、以下を使用します。

mx unittest com.oracle.truffle.tck.tests

または、単に以下を使用します。

mx tck

TCKテストを特定の言語のテストに制限するには、`tck.language`プロパティを使用します。次の例では、利用可能なすべての言語のデータ型を使用して JavaScript をテストします。

mx tck -Dtck.language=js

データ型を特定の言語に制限するには、`tck.values`プロパティを使用します。次の例では、Java の型を使用して JavaScript をテストします。

mx tck -Dtck.values=java-host -Dtck.language=js

単一のテストを実行するには、完全なテスト名を指定します。たとえば、SimpleLanguage の `+` 演算子を SimpleLanguage の `number` と `big number` でテストするには、以下を使用します。

mx tck 'ExpressionTest#testExpression[sl::+(sl::number, sl::number)]'

GraalVM で TCK テストを実行するには、mx `--java-home` を GraalVM を指すように設定するだけです。

mx --java-home=<path_to_graalvm> tck

出力とエラー出力を無効にするには、`tck.verbose` プロパティを使用します。

mx tck -Dtck.verbose=false

特定のテストの出力とエラー出力のみを無効にするには、`tck.{TestSimpleName}.verbose`プロパティを使用します。

mx tck -Dtck.ErrorTypeTest.verbose=false

1つのテストを除くすべてのテストの出力とエラー出力を無効にすることもできます。

mx tck -Dtck.verbose=false -Dtck.ErrorTypeTest.verbose=true

Apache Maven を使用した TCK テストの実行 #

Apache Maven を使用して Truffle TCK テストを実行できます。まず、言語 TCK プロバイダーを含む Maven モジュール(プロジェクト)を作成します。このモジュールが、テスト対象の言語と TCK テスト `org.graalvm.truffle:truffle-tck-tests` にテスト依存関係を持っていることを確認してください。`org.graalvm.truffle:truffle-tck-tests` アーティファクト内のテストを識別するように `maven-surefire-plugin` を設定します。これは、プロジェクトの pom.xml のセクション内で次のスニペットを使用することで実現できます。

<build>
    <plugins>
        [...]
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.1.2</version>
            <configuration>
                <dependenciesToScan>
                    <dependency>org.graalvm.truffle:truffle-tck-tests</dependency>
                </dependenciesToScan>
            </configuration>
        </plugin>
        [...]
    </plugins>
</build>

TCK 実行に他の言語を含めるには、それらの TCK プロバイダーをテストの依存関係として追加します。たとえば、`org.graalvm.js:js-truffle-tck` を追加すると、テストプロセスに JavaScript が含まれます。SimpleLanguage TCK プロバイダーの pom.xml をテンプレートとして使用して開始できます。ランタイムの最適化をテストするには、`mvn package` を実行する前に、`JAVA_HOME` 環境変数を GraalVM の場所に設定します。

TCK テストのカスタマイズ #

TCK テストを特定の言語のテストに制限するには、`tck.language` プロパティを使用します。次の例では、利用可能なすべての言語のデータ型を使用して JavaScript をテストします。

<build>
    <plugins>
        [...]
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.1.2</version>
            <configuration>
                <argLine>
                    -Dtck.language=js
                </argLine>
                [...]
            </configuration>
        </plugin>
        [...]
    </plugins>
</build>

データ型を特定の言語に制限するには、`tck.values` プロパティを使用します。次の例では、Java の型を使用して JavaScript をテストします。

<build>
    <plugins>
        [...]
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.1.2</version>
            <configuration>
                <argLine>
                    -Dtck.values=java-host
                    -Dtck.language=js
                </argLine>
                [...]
            </configuration>
        </plugin>
        [...]
    </plugins>
</build>

特定の TCK テストを実行するには、`-Dtest` オプションと共にテストパラメータを使用できます。例:`mvn test -Dtest=ScriptTest`

お問い合わせ