- 适用于 JDK 24 的 GraalVM(最新)
- 适用于 JDK 25 的 GraalVM(早期访问)
- 适用于 JDK 21 的 GraalVM
- 适用于 JDK 17 的 GraalVM
- 存档
- 开发构建
- Truffle 语言实现框架
- Truffle 分支插桩
- 动态对象模型
- 静态对象模型
- 解释器代码的主机优化
- Truffle 函数内联方法
- 分析 Truffle 解释器
- Truffle 互操作 2.0
- 语言实现
- 使用 Truffle 实现新语言
- Truffle 语言和工具迁移到 Java 模块
- Truffle 原生函数接口
- 优化 Truffle 解释器
- 选项
- 栈上替换
- Truffle 字符串指南
- 特化直方图
- 测试 DSL 特化
- 基于多语言 API 的 TCK
- Truffle 编译队列方法
- Truffle 库指南
- Truffle AOT 概述
- Truffle AOT 编译
- 辅助引擎缓存
- Truffle 语言安全点教程
- 单态化
- 拆分算法
- 单态化用例
- 向运行时报告多态特化
基于 Polyglot API 的测试兼容性工具包
测试兼容性工具包 (TCK) 是一系列测试,用于验证 TruffleLanguage 的互操作性和检测能力。TCK 基于 org.graalvm.polyglot
API。
添加语言 #
要测试您的语言,请实现 LanguageProvider。LanguageProvider
s 使用 java.util.ServiceLoader
加载,因此您需要将您的实现注册到 META-INF/services/org.graalvm.polyglot.tck.LanguageProvider
文件中。LanguageProvider
应该提供语言数据类型、语言表达式(运算符)和语言控制流语句,这些都表示为返回数据类型或执行运算符(语句)的函数。为了允许组合返回的函数,必须使用 Snippet.Builder 为它们分配参数和返回类型。LanguageProvider
还应提供简单但具有代表性的脚本,TCK 可以使用这些脚本来测试检测。
使用 mx
运行 TCK 测试 #
这些测试使用 mx unittest
执行。运行测试时,将使用主套件和依赖套件中的所有 LanguageProvider
。truffle
套件提供了 java-host
LanguageProvider
,它创建 Java 数据类型和 代理 (Proxies) 以测试 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 测试,只需将 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
您还可以禁用除一个测试之外的所有测试的输出和错误输出
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
具有测试依赖项。配置 maven-surefire-plugin
以识别 org.graalvm.truffle:truffle-tck-tests
工件中的测试。这可以通过在以下代码片段中实现
<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