- 用于 JDK 23 的 GraalVM(最新)
- 用于 JDK 24 的 GraalVM(抢先体验版)
- 用于 JDK 21 的 GraalVM
- 用于 JDK 17 的 GraalVM
- 存档
- 开发版本
- Truffle 语言实现框架
- Truffle 分支仪表
- 动态对象模型
- 静态对象模型
- 解释器代码的主机优化
- Truffle 对函数内联的处理方法
- 分析 Truffle 解释器
- Truffle Interop 2.0
- 语言实现
- 使用 Truffle 实现新的语言
- 将 Truffle 语言和仪表迁移到 Java 模块
- Truffle 原生函数接口
- 优化 Truffle 解释器
- 选项
- 栈上替换
- Truffle 字符串指南
- 专门化直方图
- 测试 DSL 专门化
- 基于 Polyglot API 的 TCK
- Truffle 对编译队列的处理方法
- Truffle 库指南
- Truffle AOT 概述
- Truffle AOT 编译
- 辅助引擎缓存
- Truffle 语言安全点教程
- 单态化
- 拆分算法
- 单态化用例
- 向运行时报告多态专门化
基于 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-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 +
运算符与 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
您还可以禁用所有测试(除一个之外)的输出和错误输出
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
工件中的测试。这可以通过在项目 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