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开始,后者已从JDK中删除。

是否有计划直接从ClojureScript运行测试,也许像core.async使用deps.edn那样?如果这样,我很乐意看看并准备好提出PR。

谢谢

2 个答案

+1

Leiningen没有用于构建/测试任何贡献库。一些维护者已添加project.clj以方便自己,但这不是官方的基础设施(一些维护者添加了deps.edn,这也不是官方的)。

官方的基础设施使用Maven(且mvn test通过,但看起来没有针对data.xml的JDK测试矩阵)pom.xml当前指定Clojure版本1.7.0,这意味着ClojureScript测试会根据JDK被跳过。

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

如果能在这个贡献库的测试中看到更多Clojure版本和JDK版本的矩阵将是一个很好的改进。

明白了,谢谢。为了我的参考,贡献包使用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版本,并且较新版本的ClojureScript已经从测试套件中删除了Nashorn repl依赖的大多数内容,因此使用最新的ClojureScript也不会起作用。

我理想中想在这里实现的东西不是我们core.async中的内容(该内容将构建分拆为在发布时不能在构建盒子上自动运行的组件),而是修复我们clojure.xml中存在的问题,以继续maven-based的构建。有OpenJDK版本的Nashorn可以用于,因此Nashorn并不是一个真正的障碍。我并不足够了解CLJS测试,不知道这样做并解决从cljs repl拉取的部分是否值得,或者最好使用其他东西并将其改造到不同的框架中。

如果您有兴趣参与这项工作,我将非常乐意得到您的帮助。我们虽然不使用PRs(Pull Requests),但我已经在这个问题上创建了一个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上使用openjdk库支持当前cljs测试套件的工作。

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 测试。

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