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 版本矩阵,那会很好。

我明白了,谢谢。为供我参考,contrib软件包使用https://github.com/clojure/build.poms作为其父级POM。

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

看起来目前有几个项目矩阵测试没有正确运行(我刚检查了java.jdbc),所以CI系统可能出了点问题?
+1 投票

实际上,此项目没有使用Leiningen运行项目测试 - 官方构建中运行的是Maven构建(`mvn clean test`)。

但即使这样,它们也有相同的问题(多个问题)。只测试Java 8的逻辑是错误的,因为JDK>8,并且只会尝试在Java 8上运行测试。它依赖于一个非常旧的ClojureScript版本,而新版本移除了很多测试套件所依赖的Nashorn repl部分,所以使用最新的ClojureScript也不会工作。

最理想的情况是,这里不需要我们已在core.async(分割构建,不能在发布时自动在构建盒子上运行)中所拥有的东西,而是要修复clojure.xml中的问题,使其在基于Maven的构建中继续工作。有可以使用的Nashorn的OpenJDK构建,所以Nashorn也不是真正的绊脚石。我并不够了解CLJS测试内容,不知道是否有必要解决从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配置,所以这些矩阵测试现在正在正常运行。
嗨,我觉得我可能没有满足贡献者协议的资格。

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

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

所以请随意全部或部分地使用它,无需引用我。

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

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

我还注意到,由于比较字符串和新行,一些Clojure测试在MS-Windows上失败,所以我修复了这个问题。

我已经确认,现在所有测试都在openjJDK 8,11,15和17上运行并通过,所以至少这是一个不错的起点,只进行了最少的更改,同时保留了现有的所有功能。

我下一步的想法是问你想要升级哪些clojure(script)依赖项,然后评估其他可能的解决方案,例如使用GraalVM运行cljs测试。

希望这能帮到您!
谢谢
...