2024 Clojure 状态调查! 中分享您的想法。

欢迎!请查看 关于 页面以了解更多关于如何操作的信息。

0
测试

你好,

clojure/data.xml 测试套件在 JDK 17 上运行失败,出现以下错误

$ lein test
Exception in thread "main" Syntax error compiling at (clojure/data/xml/cljs_repls.clj:11:5).
	at clojure.lang.Compiler.analyze(Compiler.java:6808)
	...
	at clojure.main.main(main.java:37)
Caused by: java.lang.RuntimeException: No such var: repl-nh/eval-resource
	at clojure.lang.Util.runtimeException(Util.java:221)
	at clojure.lang.Compiler.resolveIn(Compiler.java:7387)
	at clojure.lang.Compiler.resolve(Compiler.java:7357)
	at clojure.lang.Compiler.analyzeSymbol(Compiler.java:7318)
	at clojure.lang.Compiler.analyze(Compiler.java:6768)
	... 67 more
Tests failed.

这是因为 Clojurescript 测试运行在 Nashorn JS 引擎之上,但自 JDK 15 开始,后者已被移除。

是否有计划直接从 Clojurescript 运行测试,例如像 core.async 那样使用 deps.edn?如果这样,我很乐意研究并开放 PR。

谢谢

2 答案

+1

Leiningen 不会被用于构建/测试任何 Contrib 库。一些维护者已经为个人方便添加了 project.clj,但这不是官方基础设施(一些维护者已经添加了 deps.edn,这也不是官方的)。

官方基础设施使用 Maven(mvn test通过,但看起来对于 data.xml 没有很好的 JDK 测试矩阵)。当前的 pom.xml 指定了 Clojure 版本 1.7.0,这意味着无论 JDK 否则都会跳过 cljs 测试。

如果将 pom.xml 更新到,比如,Clojure 1.9.0,那么在 JDK 17 上测试将会失败(正如你所观察到的)。

如果为这个 Contrib 的测试有更多的 Clojure 版本和 JDK 版本矩阵,那将很好。

by
我明白了,谢谢。为了我的参考,贡献包使用 https://github.com/clojure/build.poms 作为其父 POM。

关于如何在测试中构建版本矩阵有什么想法吗?
by
我不确定为什么它没有自动运行测试矩阵。不需要太多的设置,因为这是由 CI 系统本身处理的。build.ci 项目指定了应使用的 Clojure 和 JDK 版本以及支持的最小 Clojure 版本。

看起来目前有几个项目矩阵测试没有正常运行(我刚检查了 java.jdbc),所以在 CI 上可能有些东西出了问题?
+1
by

实际上,该项目并未使用 Leiningen 来运行项目测试——官方构建中运行的是 Maven 构建(mvn clean test)。

尽管如此,按照这种方式运行时也会出现同样的问题(多个)。仅测试 Java 8 的逻辑是错误的,因为 JDK > 8 也不能在 Java 8 上运行测试。它依赖于一个非常旧的 ClojureScript 版本,而新版本已经移除了很多测试套件所依赖的 Nashorn repl 东西,所以使用最新的 ClojureScript 也不会工作。

理想情况下,我希望在 core.async 中做的是我们有的东西(它将构建分割成不能在构建盒子上自动运行的构建部分),而不是要修复 clojure.xml 中的东西,以便在基于 Maven 的构建中继续工作。有可用的 OpenJDK Nashorn 构建,因此 Nashorn 也不是一个真正的问题。我不太懂 CLJS 测试 stuff,不知道这是否值得做,关注拖出来的 cljs repl 部分,或者是否使用其他东西并在另一个框架中更新测试。

如果您对这部分内容感兴趣并想要参与其中,我们将非常愿意得到您的帮助。我们不使用PR,但我已经为这个问题创建了一个jira,您可以在以下链接中找到它:https://clojure.atlassian.net/browse/DXML-67,您可以签署贡献者协议并请求访问jira以提供补丁。有关如何成为贡献者的更多信息,请访问:https://clojure.org/dev/dev#_becoming_a_contributor

我会看一下,谢谢!

(现在,data.xml-test-matrix 正确显示了 JDK17 的失败状态 https://build.clojure.org/view/Contrib/job/data.xml-test-matrix/lastBuild/。我猜测这是由于CI配置更新导致的。)
是的,我在 clojure-dev渠 道 中提到过一些CI矩阵测试没有运行,Alex修复了CI配置,这样那些矩阵测试现在可以正确运行了。
你好,我觉得我可能没有达到贡献协议的资格标准。

尽管如此,我已经完成了支持当前JDK 15和17上的cljs测试套件的工作,使用的是openjdk库

https://github.com/ikappaki/data.xml/compare/master..ikappaki:issue/cljs-tests

因此,请随意使用其中的任何部分或全部,无需引用我。

基本上,nashorn作为外部maven测试依赖项被引入到[15,17] JDK版本中,这是通过在配置文件条件中完成的,否则将使用与早期版本中相同的构建实例。

我还决定将ClojureScript代码库中的 cljs.repl.nashorn 文件复制过来,并更新为openjdk nashorn版本,这不仅仅是为了支持测试(即使没有它也容易修复),而是为了维护在开发中使用的 cljs repl 功能。

我还注意到,由于比较使用换行符的字符串,某些clojure测试在MS-Windows上失败了,所以我修复了这个问题。

我已确认,现在所有测试都在openjJDK 8、11、15和17上运行并通过,所以至少这看起来是一个好的起点,在保持现有功能的同时仅进行了最小的更改。

接下来,我打算询问您,关于clojure(script)的哪个依赖项需要升级,然后评估其他可能的解决方案,如graalvm,用于运行cljs测试。

希望这能有所帮助!
谢谢
...