Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Java CI

on: [push]

jobs:
build:
strategy:
matrix:
jdk: ['8', '11', '17', '19']
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- name: Set up JDK ${{ matrix.jdk }}
uses: actions/setup-java@v2
with:
java-version: ${{ matrix.jdk }}
distribution: 'temurin'
cache: maven
- name: Build with Maven
run: mvn test
- name: Configure settings.xml
run: |
mkdir -p ~/.m2
echo "<settings><servers><server><id>clojars</id><username>${{ secrets.CLOJARS_USER }}-clojars</username><password>${{ secrets.CLOJARS_PASSWORD }}</password></server></servers></settings>" > ~/.m2/settings.xml
38 changes: 38 additions & 0 deletions deps.edn
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
;; https://clojure.org/dev/developing_patches#_run_an_individual_test
{:paths ["test"
"target/test-classes"]
:deps
{org.clojure/clojure {:local/root "."
:deps/manifest :pom} #_{:mvn/version "RELEASE"}
org.clojure/test.check {:mvn/version "1.1.1"}
org.clojure/test.generative {:mvn/version "1.0.0"}}
:aliases
{:dbg {:classpath-overrides {org.clojure/clojure "target/classes"}
:extra-deps {criterium/criterium {:mvn/version "0.4.4"}}}
:cognitest {:extra-deps {io.github.cognitect-labs/test-runner
{:git/tag "v0.5.0" :git/sha "b3fd0d2"}}
:main-opts ["-m" "cognitect.test-runner"]
:exec-fn cognitect.test-runner.api/test
:exec-args {:dirs ["test"]
:patterns [;; FIXME clojure.test-clojure.ns-libs has a test that is sensitive to loading order
;; FIXME clojure.test-clojure.java-interop doesn't seem to work on JDK 17 (untested on others)
;; regex ref: https://stackoverflow.com/a/2387072
"^((?!(clojure.test-clojure.ns-libs|clojure.test-clojure.java-interop)).)*$"
]}}
:test-example-script {:jvm-opts [;; from build.xml
"-Dclojure.test-clojure.exclude-namespaces=#{clojure.test-clojure.compilation.load-ns clojure.test-clojure.ns-libs-load-later}"
"-Dclojure.compiler.direct-linking=true"]
:main-opts ["-e" "(load-file,\"src/script/run_test.clj\")"]}
:test-generative-script {:jvm-opts [;; from build.xml
"-Dclojure.compiler.direct-linking=true"]
:main-opts ["-e" "(load-file,\"src/script/run_test_generative.clj\")"]}

:kaocha {:extra-deps {lambdaisland/kaocha {:mvn/version "1.60.977"}}
:exec-fn kaocha.runner/exec-fn
:exec-args {;:watch? true
:tests [{:id :unit
:test-paths ["test"]
:ns-patterns [".*"]}]
:reporter kaocha.report/dots
;; :plugins [:kaocha.plugin/profiling :kaocha.plugin/notifier]
}}}}
2 changes: 1 addition & 1 deletion src/jvm/clojure/lang/RestFn.java
Original file line number Diff line number Diff line change
Expand Up @@ -4078,7 +4078,7 @@ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object
Util.ret1(arg16,arg16=null), Util.ret1(arg17,arg17=null), Util.ret1(arg18,arg18=null),
Util.ret1(arg19,arg19=null), Util.ret1(arg20,arg20=null), ArraySeq.create(args));
default:
return throwArity(21);
return throwArity(20 + args.length);
}

}
Expand Down
19 changes: 19 additions & 0 deletions test/clojure/test_clojure/fn.clj
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,22 @@
(is (fails-with-cause? clojure.lang.ExceptionInfo
#"Call to clojure.core/fn did not conform to spec"
(eval '(fn))))))

; this case is unreachable via Compiler.java since only up to 20 fixed arguments
; are allowed. tests a bug in the invoke() method for RestFn with 21 arguments.
(deftest restfn-arity-exception-test
;; example 30 param function given 25 args
(is (thrown-with-msg? clojure.lang.ArityException
#"Wrong number of args \(25\) passed to:.*"
(apply (proxy [clojure.lang.RestFn] []
(getRequiredArity [] 30))
(range 25))))
;; test 21-30 args
(let [f (proxy [clojure.lang.RestFn] []
(getRequiredArity [] 30))]
(doseq [i (range 22 31)
:let [re (re-pattern (format "Wrong number of args \\(%s\\) passed to:.*" i))]]
(testing (pr-str re)
(is (thrown-with-msg? clojure.lang.ArityException
re
(apply f (range i))))))))