gfredericks / test.chuck

A utility library for test.check
Eclipse Public License 1.0
215 stars 26 forks source link

Make `checking`'s options optional #58

Open DjebbZ opened 6 years ago

DjebbZ commented 6 years ago

Details in issue #57.

DjebbZ commented 6 years ago

Sorry not finished, I should update all documentation.

DjebbZ commented 6 years ago

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...

DjebbZ commented 6 years ago

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.

DjebbZ commented 6 years ago
  1. I fixed the node tests, I was missing testing in the :cljs conditional require.
  2. I also incorporated your second review.
  3. I've even tried to test that checking throws when called with a bad option, code doesn't even compile with java.lang.IllegalArgumentException: Arguments tocheckingmust 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.
  4. 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.
gfredericks commented 6 years ago

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.

gfredericks commented 6 years ago

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.

DjebbZ commented 6 years ago

I fixed the docstring but I don't understand what you mean by calling eval... What ? Where ? When ? Why ? Haha

gfredericks commented 6 years ago

Something like (is (thrown? SomeException (eval '(checking ...))))

DjebbZ commented 6 years ago

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 !

gfredericks commented 6 years ago

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`
DjebbZ commented 6 years ago

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.

gfredericks commented 6 years ago

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.

DjebbZ commented 6 years ago

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

gfredericks commented 6 years ago

The first one should work. How does it fail?

DjebbZ commented 6 years ago

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)
gfredericks commented 6 years ago

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

gfredericks commented 6 years ago

integer? has been in clojure.core since 1.0

DjebbZ commented 6 years ago

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...

gfredericks commented 6 years ago

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.