ポリグロット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-host LanguageProviderが用意されており、Javaデータ型およびプロキシを作成してJavaの相互運用性をテストします。
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 numberおよびbig numberを使用してSimpleLanguage +演算子のテストを実行するには、次を使用します:
mx tck 'ExpressionTest#testExpression[sl::+(sl::number, sl::number)]'
GraalVMでTCKテストを実行するには、GraalVMを指すようにmx --java-homeを設定するのみで十分です:
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
mxを使用しないTCKテストの実行
Python TCKランナーを使用して、GraalVM上でTruffle TCKを実行できます。このスクリプトでは、TCKアーティファクトをダウンロードするためにMavenが必要です。
GraalVMでTCKテストを実行するには、次を使用します:
python tck.py -g <path_to_graalvm>
独自の言語およびTCKプロバイダを含めるには、次を使用します:
python tck.py -g <path_to_graalvm> -cp <path_to_tck_provider_jars> -lp <path_to_language_jars>
テストを特定の言語に制限するには、最初の名前なしオプションとして言語IDを使用します。次の例では、JavaScript言語に対してのみテストを実行します:
python tck.py -g <path_to_graalvm> js
デバッガでテストを実行するには、-dまたは--dbg <port>オプションを使用します:
python tck.py -d -g <path_to_graalvm>
TCKテストは、テスト名でフィルタできます。JavaScript TCKプロバイダのScriptTestのみを実行するには、次を使用します:
python tck.py -g <path_to_graalvm> js default ScriptTest
TCKテストは、すべてのコール・ターゲットが実行される前にコンパイルされるcompileモードで実行できます。JavaScriptテストをcompileモードで実行するには、次を使用します:
python tck.py -g <path_to_graalvm> js compile