Open DjebbZ opened 6 years ago
Sorry not finished, I should update all documentation.
Documentation updated, but the options-test
is failing in node.js with (of course) some useless error message from JS :
Testing com.gfredericks.test.chuck.clojure-test-test
ERROR in (options-test) (TypeError:NaN:NaN)
Uncaught exception, not in assertion.
expected: nil
actual: #object[TypeError TypeError: Cannot read property 'call' of undefined]
I verified, the error doesn't happen in the master
branch. It seems I broke something with options processing...
Can't find the problem with CLJS tests. And my knowledge of leiningen is very limited so I didn't find an easy way to launch a CLJS REPL to further investigate the problem. Hopefully I'm close to the solution. Now I gotta go back to work. If you're willing to have a look you're welcome.
testing
in the :cljs
conditional require. checking
throws when called with a bad option, code doesn't even compile with java.lang.IllegalArgumentException: Arguments to
checkingmust be either [name bindings & body] or [name num-tests-or-options bindings & body]
-- with lein test
only, lein doo node node-test
works fine. The failing test is left in the code for you to review. I suspect something wrong with the reader conditional in the test but I've re-read the code so many times I don't understand what's wrong.lein doo node node-test
is a bit unstable... I sometimes get different results whether run the command from scratch or when it re-runs after a code change. It seems reliable only when ran from scratch.your exception is thrown at macroexpansion-time (which makes sense to me), so the fact that it "doesn't even compile" seems like the correct behavior, and I would question why it does anything different in other environments.
oh I didn't notice that you were trying to have an automated test that checks the compile-time error.
I think the only reasonable way to test this is by calling eval
, and I don't think you can do that in cljs. I would just add a reader conditional for :clj
and use eval
there.
I fixed the docstring
but I don't understand what you mean by calling eval
... What ? Where ? When ? Why ? Haha
Something like (is (thrown? SomeException (eval '(checking ...))))
eval
works with syntax-quote, not simple quote because it doesn't know checking
symbol I think. With syntax-quote symbols are fully qualified so it worked.
PS: don't know how to display syntax-quote inside markdown code markers since they're back-quotes too !
You can do syntax-quote in markdown by using the multiline version: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#code
e.g., `this`
Ok, I had some trouble just with the commit "macro problems". My understanding was that since I moved the process-options
call into the form returned from the macro so that it's used at run time, the test checking for bad option was expanding [i gen/int]
into [com.gfredericks.test.chuck.clojure-test-test/i gen/int]
, which caused this error when running lein test
: Caused by: java.lang.RuntimeException: Can't use qualified name as parameter: com.gfredericks.test.chuck.clojure-test-test/i
.
The "quote binding" commit is an attempt to circumvent the problem but I'm not sure it's a good idea.
By the way at this point all tests (lein test
and lein doo node node-test
) pass.
The standard way of solving the problem you're describing is using i#
for the local, in both places.
I'm shocked that the "quote binding" commit actually works. There must be something very strange going on.
I've just tried several things to be able to use i#
:
(eval `(checking "numbers are numbers" "opts as string" [i# gen/int]
(is (int? i#))))
(eval `(checking "numbers are numbers" "opts as string" [i# gen/int]
(is ('int? i#))))
(eval `(checking "numbers are numbers" "opts as string" [i# gen/int]
(is (~'int? i#))))
Nothing works. I think I'm lost in macro-hell... haha
The first one should work. How does it fail?
Sorry I should have been more precise, apologies if you took it bad. Below the complete stacktrace from lein test
. I think problem is that it thinks int?
is from the test ns, not clojure.core.
ERROR in (options-test) (Compiler.java:6543)
bad option throws
expected: (thrown? IllegalArgumentException (eval (clojure.core/seq (clojure.core/concat (clojure.core/list (quote com.gfredericks.test.chuck.clojure-test/checking)) (clojure.core/list "numbers are numbers") (clojure.core/list "opts as string") (clojure.core/list (clojure.core/apply clojure.core/vector (clojure.core/seq (clojure.core/concat (clojure.core/list (quote i__3503__auto__)) (clojure.core/list (quote clojure.test.check.generators/int)))))) (clojure.core/list (clojure.core/seq (clojure.core/concat (clojure.core/list (quote clojure.test/is)) (clojure.core/list (clojure.core/seq (clojure.core/concat (clojure.core/list (quote com.gfredericks.test.chuck.clojure-test-test/int?)) (clojure.core/list (quote i__3503__auto__))))))))))))
actual: clojure.lang.Compiler$CompilerException: java.lang.RuntimeException: No such var: com.gfredericks.test.chuck.clojure-test-test/int?, compiling:(/tmp/form-init7863264923787511067.clj:1:6367)
at clojure.lang.Compiler.analyze (Compiler.java:6543)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$InvokeExpr.parse (Compiler.java:3737)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6725)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.access$300 (Compiler.java:38)
clojure.lang.Compiler$LetExpr$Parser.parse (Compiler.java:6129)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6723)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:5861)
clojure.lang.Compiler$TryExpr$Parser.parse (Compiler.java:2261)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6723)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:5861)
clojure.lang.Compiler$FnMethod.parse (Compiler.java:5296)
clojure.lang.Compiler$FnExpr.parse (Compiler.java:3925)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6721)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$InvokeExpr.parse (Compiler.java:3791)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6725)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:5861)
clojure.lang.Compiler$LetExpr$Parser.parse (Compiler.java:6179)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6723)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.access$300 (Compiler.java:38)
clojure.lang.Compiler$LetExpr$Parser.parse (Compiler.java:6129)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6723)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:5861)
clojure.lang.Compiler$LetExpr$Parser.parse (Compiler.java:6179)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6723)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:5861)
clojure.lang.Compiler$FnMethod.parse (Compiler.java:5296)
clojure.lang.Compiler$FnExpr.parse (Compiler.java:3925)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6721)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$InvokeExpr.parse (Compiler.java:3791)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6725)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$InvokeExpr.parse (Compiler.java:3791)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6725)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:5861)
clojure.lang.Compiler$LetExpr$Parser.parse (Compiler.java:6179)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6723)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$InvokeExpr.parse (Compiler.java:3791)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6725)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:5861)
clojure.lang.Compiler$LetExpr$Parser.parse (Compiler.java:6179)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6723)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:5861)
clojure.lang.Compiler$FnMethod.parse (Compiler.java:5296)
clojure.lang.Compiler$FnExpr.parse (Compiler.java:3925)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6721)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$InvokeExpr.parse (Compiler.java:3791)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6725)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:5861)
clojure.lang.Compiler$FnMethod.parse (Compiler.java:5296)
clojure.lang.Compiler$FnExpr.parse (Compiler.java:3925)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6721)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.eval (Compiler.java:6779)
clojure.lang.Compiler.eval (Compiler.java:6745)
clojure.core$eval.invoke (core.clj:3081)
com.gfredericks.test.chuck.clojure_test_test/fn (clojure_test_test.cljc:41)
clojure.test$test_var$fn__7670.invoke (test.clj:704)
clojure.test$test_var.invoke (test.clj:704)
clojure.test$test_vars$fn__7692$fn__7697.invoke (test.clj:722)
clojure.test$default_fixture.invoke (test.clj:674)
clojure.test$test_vars$fn__7692.invoke (test.clj:722)
clojure.test$default_fixture.invoke (test.clj:674)
clojure.test$test_vars.invoke (test.clj:718)
clojure.test$test_all_vars.invoke (test.clj:728)
clojure.test$test_ns.invoke (test.clj:747)
user$eval85$fn__136.invoke (form-init7863264923787511067.clj:1)
clojure.lang.AFn.applyToHelper (AFn.java:156)
clojure.lang.AFn.applyTo (AFn.java:144)
clojure.core$apply.invoke (core.clj:632)
leiningen.core.injected$compose_hooks$fn__19.doInvoke (form-init7863264923787511067.clj:1)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.core$apply.invoke (core.clj:630)
leiningen.core.injected$run_hooks.invoke (form-init7863264923787511067.clj:1)
leiningen.core.injected$prepare_for_hooks$fn__24$fn__25.doInvoke (form-init7863264923787511067.clj:1)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.lang.AFunction$1.doInvoke (AFunction.java:29)
clojure.lang.RestFn.invoke (RestFn.java:408)
clojure.core$map$fn__4553.invoke (core.clj:2624)
clojure.lang.LazySeq.sval (LazySeq.java:40)
clojure.lang.LazySeq.seq (LazySeq.java:49)
clojure.lang.Cons.next (Cons.java:39)
clojure.lang.RT.boundedLength (RT.java:1735)
clojure.lang.RestFn.applyTo (RestFn.java:130)
clojure.core$apply.invoke (core.clj:632)
clojure.test$run_tests.doInvoke (test.clj:762)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.core$apply.invoke (core.clj:630)
user$eval85$fn__148$fn__179.invoke (form-init7863264923787511067.clj:1)
user$eval85$fn__148$fn__149.invoke (form-init7863264923787511067.clj:1)
user$eval85$fn__148.invoke (form-init7863264923787511067.clj:1)
user$eval85.invoke (form-init7863264923787511067.clj:1)
clojure.lang.Compiler.eval (Compiler.java:6782)
clojure.lang.Compiler.eval (Compiler.java:6772)
clojure.lang.Compiler.load (Compiler.java:7227)
clojure.lang.Compiler.loadFile (Compiler.java:7165)
clojure.main$load_script.invoke (main.clj:275)
clojure.main$init_opt.invoke (main.clj:280)
clojure.main$initialize.invoke (main.clj:308)
clojure.main$null_opt.invoke (main.clj:343)
clojure.main$main.doInvoke (main.clj:421)
clojure.lang.RestFn.invoke (RestFn.java:421)
clojure.lang.Var.invoke (Var.java:383)
clojure.lang.AFn.applyToHelper (AFn.java:156)
clojure.lang.Var.applyTo (Var.java:700)
clojure.main.main (main.java:37)
Caused by: java.lang.RuntimeException: No such var: com.gfredericks.test.chuck.clojure-test-test/int?
at clojure.lang.Util.runtimeException (Util.java:221)
clojure.lang.Compiler.resolveIn (Compiler.java:6993)
clojure.lang.Compiler.resolve (Compiler.java:6963)
clojure.lang.Compiler.analyzeSymbol (Compiler.java:6924)
clojure.lang.Compiler.analyze (Compiler.java:6506)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$InvokeExpr.parse (Compiler.java:3737)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6725)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.access$300 (Compiler.java:38)
clojure.lang.Compiler$LetExpr$Parser.parse (Compiler.java:6129)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6723)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:5861)
clojure.lang.Compiler$TryExpr$Parser.parse (Compiler.java:2261)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6723)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:5861)
clojure.lang.Compiler$FnMethod.parse (Compiler.java:5296)
clojure.lang.Compiler$FnExpr.parse (Compiler.java:3925)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6721)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$InvokeExpr.parse (Compiler.java:3791)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6725)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:5861)
clojure.lang.Compiler$LetExpr$Parser.parse (Compiler.java:6179)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6723)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.access$300 (Compiler.java:38)
clojure.lang.Compiler$LetExpr$Parser.parse (Compiler.java:6129)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6723)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:5861)
clojure.lang.Compiler$LetExpr$Parser.parse (Compiler.java:6179)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6723)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:5861)
clojure.lang.Compiler$FnMethod.parse (Compiler.java:5296)
clojure.lang.Compiler$FnExpr.parse (Compiler.java:3925)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6721)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$InvokeExpr.parse (Compiler.java:3791)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6725)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$InvokeExpr.parse (Compiler.java:3791)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6725)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:5861)
clojure.lang.Compiler$LetExpr$Parser.parse (Compiler.java:6179)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6723)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$InvokeExpr.parse (Compiler.java:3791)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6725)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:5861)
clojure.lang.Compiler$LetExpr$Parser.parse (Compiler.java:6179)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6723)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:5861)
clojure.lang.Compiler$FnMethod.parse (Compiler.java:5296)
clojure.lang.Compiler$FnExpr.parse (Compiler.java:3925)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6721)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6711)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$InvokeExpr.parse (Compiler.java:3791)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6725)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.analyze (Compiler.java:6485)
clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:5861)
clojure.lang.Compiler$FnMethod.parse (Compiler.java:5296)
clojure.lang.Compiler$FnExpr.parse (Compiler.java:3925)
clojure.lang.Compiler.analyzeSeq (Compiler.java:6721)
clojure.lang.Compiler.analyze (Compiler.java:6524)
clojure.lang.Compiler.eval (Compiler.java:6779)
clojure.lang.Compiler.eval (Compiler.java:6745)
clojure.core$eval.invoke (core.clj:3081)
com.gfredericks.test.chuck.clojure_test_test/fn (clojure_test_test.cljc:41)
clojure.test$test_var$fn__7670.invoke (test.clj:704)
clojure.test$test_var.invoke (test.clj:704)
clojure.test$test_vars$fn__7692$fn__7697.invoke (test.clj:722)
clojure.test$default_fixture.invoke (test.clj:674)
clojure.test$test_vars$fn__7692.invoke (test.clj:722)
clojure.test$default_fixture.invoke (test.clj:674)
clojure.test$test_vars.invoke (test.clj:718)
clojure.test$test_all_vars.invoke (test.clj:728)
clojure.test$test_ns.invoke (test.clj:747)
user$eval85$fn__136.invoke (form-init7863264923787511067.clj:1)
clojure.lang.AFn.applyToHelper (AFn.java:156)
clojure.lang.AFn.applyTo (AFn.java:144)
clojure.core$apply.invoke (core.clj:632)
leiningen.core.injected$compose_hooks$fn__19.doInvoke (form-init7863264923787511067.clj:1)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.core$apply.invoke (core.clj:630)
leiningen.core.injected$run_hooks.invoke (form-init7863264923787511067.clj:1)
leiningen.core.injected$prepare_for_hooks$fn__24$fn__25.doInvoke (form-init7863264923787511067.clj:1)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.lang.AFunction$1.doInvoke (AFunction.java:29)
clojure.lang.RestFn.invoke (RestFn.java:408)
clojure.core$map$fn__4553.invoke (core.clj:2624)
clojure.lang.LazySeq.sval (LazySeq.java:40)
clojure.lang.LazySeq.seq (LazySeq.java:49)
clojure.lang.Cons.next (Cons.java:39)
clojure.lang.RT.boundedLength (RT.java:1735)
clojure.lang.RestFn.applyTo (RestFn.java:130)
clojure.core$apply.invoke (core.clj:632)
clojure.test$run_tests.doInvoke (test.clj:762)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.core$apply.invoke (core.clj:630)
user$eval85$fn__148$fn__179.invoke (form-init7863264923787511067.clj:1)
user$eval85$fn__148$fn__149.invoke (form-init7863264923787511067.clj:1)
user$eval85$fn__148.invoke (form-init7863264923787511067.clj:1)
user$eval85.invoke (form-init7863264923787511067.clj:1)
clojure.lang.Compiler.eval (Compiler.java:6782)
clojure.lang.Compiler.eval (Compiler.java:6772)
clojure.lang.Compiler.load (Compiler.java:7227)
clojure.lang.Compiler.loadFile (Compiler.java:7165)
clojure.main$load_script.invoke (main.clj:275)
clojure.main$init_opt.invoke (main.clj:280)
clojure.main$initialize.invoke (main.clj:308)
clojure.main$null_opt.invoke (main.clj:343)
clojure.main$main.doInvoke (main.clj:421)
clojure.lang.RestFn.invoke (RestFn.java:421)
clojure.lang.Var.invoke (Var.java:383)
clojure.lang.AFn.applyToHelper (AFn.java:156)
clojure.lang.Var.applyTo (Var.java:700)
clojure.main.main (main.java:37)
I think that can happen if int?
doesn't exist for some reason.
It looks like int?
was added in 1.9, so maybe that's not the best function to be using in these tests
integer?
has been in clojure.core since 1.0
Good catch, I changed to integer?
. But the tests kept failing with actual: clojure.lang.ExceptionInfo: Invalid defspec options: "opts as string"
. So I "cheated" and caught any Exception
instead, even if the macro throws IllegalArgumentException
normally. I've just checked clojure.test, it doesn't re-throw an error of another type. So even if all tests pass now (clj and cljs), I'm not sure it really works...
The reason it's not throwing the exception you wanted is that your (vector? (second check-decl))
test is passing, and the exception is coming from the call to tc.clojure-test/process-options
. So you either need to test a different form, or enhance your validation so that it catches that kind of problem.
Details in issue #57.