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 一样?如果这样的话,我很乐意看看,如果你对 PRs 打开。

谢谢

2 个答案

+1

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

官方基础设施使用 Maven(并且 mvn test 已通过,但看起来 JDK 测试矩阵对 data.xml 并没有太多)。当前 pom.xml 指定 Clojure 版本为 1.7.0,这意味着 cljs 测试会跳过,无论 JDK 版本如何。

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

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

by
我明白了,谢谢。为了参考,我使用的contribution包将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测试的东西了解得不够,不知道是否值得去改变这些被他从cljs repl拖出来的部分,或者最好使用其他东西并重构测试到不同的框架中。

如果您有兴趣参与这项工作,我很乐意得到您的帮助。我们不使用PRs,但我已在https://clojure.atlassian.net/browse/DXML-67创建了Jira事项,您可以签署贡献者协议并请求访问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矩阵测试没有运行,亚历克斯已修复CI配置,现在这些矩阵测试正在正确运行。
嗨,我想可能没有符合贡献者协议的资格。

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

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

因此,请随意在全范围内或部分范围内查找它,无需引用我。

基本上,nashorn通过配置文件条件作为外部Maven测试依赖项引入,用于JDK版本[15,17],否则就像早期版本一样使用内置实例。

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

我还注意到,由于比较包含行尾符号的字符串,一些clamp测试在MS-Windows上失败,因此我已经修复了这个问题。

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

接下来我想问你的是,你准备将clojure(script)的哪些依赖项升级,然后评估使用graalvm运行cljs测试等可能的解决方案。

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