ポリグロット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