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 不用于构建/测试任何贡献库。一些维护者已将 project.clj 添加为他们自己的便捷性,但这不是官方基础设施(一些维护者已添加 deps.edn,这也不是官方的)。

官方基础设施使用 Maven(且 mvn test 通过,但似乎 data.xml 没有建立多少 JDK 测试矩阵)。当前的 pom.xml 指定 Clojure 版本 1.7.0,这意味着 cljs 测试无论 JDK 都将被跳过。

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

如果这个贡献项目有更多 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,但我为这个创建了https://clojure.atlassian.net/browse/DXML-67的项目,你可以签署贡献者协议并要求访问jira以提供补丁。https://clojure.org/dev/dev#_becoming_a_contributor

by
我会看看,谢谢!

(现在数据.xml-test-matrix 正确显示了 JDK17 故障,详情请见 https://build.clojure.org/view/Contrib/job/data.xml-test-matrix/lastBuild/。我认为这是由于 CI 配置更新导致的。)。
by
是的,我在 clojure-dev 频道提到有些 CI 矩阵测试没有运行,亚历克斯修复了 CI 配置,现在那些矩阵测试正在正常运行。
by
嗨,我想我可能没有达到贡献协议的资格标准。

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

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

因此,请随意全部或部分地使用它,不需要引用我。

基本上,nashorn 通过 profile 条件作为 JDK 版本 [15,17] 的外部 maven 测试依赖项引入,否则像早先版本一样使用实例构建。

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

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

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

下一步我想知道您想升级哪些 clojure(script) 依赖项,然后评估其他可能的解决方案,如用于运行 cljs 测试的 graalvm。

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