Open metametadata opened 5 years ago
I'm having trouble reproducing this.
E.g.:
$ for file in $(ls); do echo === $file ===; cat $file | sed 's/^/> /'; done && clojure the-test.clj | tail
=== deps.edn ===
> {:deps {com.gfredericks/test.chuck {:mvn/version "0.2.9"}
> org.clojure/test.check {:mvn/version "0.9.0"}}}
=== the-test.clj ===
> (ns unit.a.b
> (:require
> [clojure.test.check.generators :as gen]
> [com.gfredericks.test.chuck.clojure-test :as chuck]
> [clojure.test :as ct :refer :all]))
>
> (deftest foo
> (chuck/checking
> "bar"
> 10
> [x gen/int]
> (throw (ex-info "oops" {}))))
>
> (run-tests)
[clojure.main$script_opt invokeStatic "main.clj" 338]
[clojure.main$script_opt invoke "main.clj" 333]
[clojure.main$main invokeStatic "main.clj" 424]
[clojure.main$main doInvoke "main.clj" 387]
[clojure.lang.RestFn applyTo "RestFn.java" 137]
[clojure.lang.Var applyTo "Var.java" 702]
[clojure.main main "main.java" 37]]}))
Ran 1 tests containing 1 assertions.
1 failures, 0 errors.
I see, thanks. I used lein test
inside the existing project, so maybe something else in lein user profile or project.clj causes the issue. I'll reply when I find the real cause.
Looks like the problem is reproducible because of [org.clojure/test.check "0.10.0-alpha2"]
. Exception is caught as expected in 0.9.0
and latest version 0.10.0-alpha3
.
Unfortunately, the default reporting is not very helpful: it is very long and noisey (~300 lines in 0.9.0
and ~500 in 0.10.0-alpha3
, mostly stacktraces) with smallest shrunk case somewhere in the middle. So I guess I still have to redefine the reporting method.
Ah, seems like the redefined ct/report
is able to catch unexpected exception only in the "broken" [org.clojure/test.check "0.10.0-alpha2"]
. It's not convenient, because sometimes the shrunk case is the reason for the exception, but it's very difficult to find :smallest
in the output. Is it possible to customize exception reporting somehow or shall I issue a new feature request?
I'm confused by these two statements, which seem contradictory:
Exception is caught as expected in
0.9.0
and latest version0.10.0-alpha3
seems like the redefined ct/report is able to catch unexpected exception only in the "broken"
[org.clojure/test.check "0.10.0-alpha2"]
If you could post some code (and deps.edn
) that doesn't do what you want and explain what you'd like it to do, I can sort this out quicker.
Sure, sorry for confusion.
Exception is caught as expected in 0.9.0 and latest version 0.10.0-alpha3.
The library catches the unexpected exception and reports it. So it is good.
seems like the redefined ct/report is able to catch unexpected exception only in the "broken" [org.clojure/test.check "0.10.0-alpha2"]
I meant that I can't redefine what the library outputs when it reports the unexepected error. Unless the broken "0.10.0-alpha2"
is used (in such case my own custom defmethod ct/report ::chuck/shrunk
catches the unexpected exception, for some reason).
The example:
; deps.clj
{:deps {com.gfredericks/test.chuck {:mvn/version "0.2.9"}
org.clojure/test.check {:mvn/version "0.10.0-alpha3"}}}
; the-test.clj
(ns the-test
(:require
[clojure.test.check.generators :as gen]
[com.gfredericks.test.chuck.clojure-test :as chuck]
[clojure.test :as ct :refer :all]))
(deftest foo
(chuck/checking
"bar"
10
[x gen/int]
(throw (ex-info "oops" {}))))
(run-tests)
This is the output:
ᐅ clojure the-test.clj
Testing the-test
FAIL in (foo) (clojure_test.cljc:30)
bar
{:shrunk {:total-nodes-visited 0, :depth 0, :pass? false, :result #error {
:cause oops
:data {}
:via
[{:type clojure.lang.ExceptionInfo
:message oops
:data {}
:at [clojure.core$ex_info invokeStatic core.clj 4739]}]
:trace
[[clojure.core$ex_info invokeStatic core.clj 4739]
[clojure.core$ex_info invoke core.clj 4739]
[the_test$fn__3748$fn__3749$fn__3753$fn__3755 invoke the-test.clj 12]
[com.gfredericks.test.chuck.clojure_test$capture_reports_STAR_ invokeStatic clojure_test.cljc 67]
[com.gfredericks.test.chuck.clojure_test$capture_reports_STAR_ invoke clojure_test.cljc 63]
[the_test$fn__3748$fn__3749$fn__3753 invoke the-test.clj 8]
[clojure.lang.AFn applyToHelper AFn.java 154]
[clojure.lang.AFn applyTo AFn.java 144]
[clojure.core$apply invokeStatic core.clj 657]
[clojure.core$apply invoke core.clj 652]
[clojure.test.check.properties$apply_gen$fn__1113$fn__1114 invoke properties.cljc 30]
[clojure.test.check.properties$apply_gen$fn__1113 invoke properties.cljc 29]
[clojure.test.check.rose_tree$fmap invokeStatic rose_tree.cljc 77]
[clojure.test.check.rose_tree$fmap invoke rose_tree.cljc 73]
[clojure.test.check.generators$fmap$fn__463 invoke generators.cljc 102]
[clojure.test.check.generators$gen_fmap$fn__437 invoke generators.cljc 58]
[clojure.test.check.generators$call_gen invokeStatic generators.cljc 42]
[clojure.test.check.generators$call_gen invoke generators.cljc 38]
[clojure.test.check$quick_check invokeStatic check.cljc 126]
[clojure.test.check$quick_check doInvoke check.cljc 59]
[clojure.lang.RestFn invoke RestFn.java 425]
[clojure.lang.AFn applyToHelper AFn.java 156]
[clojure.lang.RestFn applyTo RestFn.java 132]
[clojure.core$apply invokeStatic core.clj 661]
[clojure.core$apply invoke core.clj 652]
[the_test$fn__3748$fn__3749 invoke the-test.clj 8]
[com.gfredericks.test.chuck.clojure_test$_testing invokeStatic clojure_test.cljc 102]
[com.gfredericks.test.chuck.clojure_test$_testing invoke clojure_test.cljc 100]
[the_test$fn__3748 invokeStatic the-test.clj 8]
[the_test$fn__3748 invoke the-test.clj 7]
[clojure.test$test_var$fn__9209 invoke test.clj 716]
[clojure.test$test_var invokeStatic test.clj 716]
[clojure.test$test_var invoke test.clj 707]
[clojure.test$test_vars$fn__9235$fn__9240 invoke test.clj 734]
[clojure.test$default_fixture invokeStatic test.clj 686]
[clojure.test$default_fixture invoke test.clj 682]
[clojure.test$test_vars$fn__9235 invoke test.clj 734]
[clojure.test$default_fixture invokeStatic test.clj 686]
[clojure.test$default_fixture invoke test.clj 682]
[clojure.test$test_vars invokeStatic test.clj 730]
[clojure.test$test_all_vars invokeStatic test.clj 736]
[clojure.test$test_ns invokeStatic test.clj 757]
[clojure.test$test_ns invoke test.clj 742]
[clojure.core$map$fn__5587 invoke core.clj 2747]
[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 1785]
[clojure.lang.RestFn applyTo RestFn.java 130]
[clojure.core$apply invokeStatic core.clj 659]
[clojure.test$run_tests invokeStatic test.clj 767]
[clojure.test$run_tests doInvoke test.clj 767]
[clojure.lang.RestFn invoke RestFn.java 408]
[clojure.test$run_tests invokeStatic test.clj 772]
[clojure.test$run_tests invoke test.clj 767]
[the_test$eval3773 invokeStatic the-test.clj 14]
[the_test$eval3773 invoke the-test.clj 14]
[clojure.lang.Compiler eval Compiler.java 7062]
[clojure.lang.Compiler load Compiler.java 7514]
[clojure.lang.Compiler loadFile Compiler.java 7452]
[clojure.main$load_script invokeStatic main.clj 278]
[clojure.main$script_opt invokeStatic main.clj 338]
[clojure.main$script_opt invoke main.clj 333]
[clojure.main$main invokeStatic main.clj 424]
[clojure.main$main doInvoke main.clj 387]
[clojure.lang.RestFn applyTo RestFn.java 137]
[clojure.lang.Var applyTo Var.java 702]
[clojure.main main main.java 37]]}, :result-data #:clojure.test.check.properties{:error #error {
:cause oops
:data {}
:via
[{:type clojure.lang.ExceptionInfo
:message oops
:data {}
:at [clojure.core$ex_info invokeStatic core.clj 4739]}]
:trace
[[clojure.core$ex_info invokeStatic core.clj 4739]
[clojure.core$ex_info invoke core.clj 4739]
[the_test$fn__3748$fn__3749$fn__3753$fn__3755 invoke the-test.clj 12]
[com.gfredericks.test.chuck.clojure_test$capture_reports_STAR_ invokeStatic clojure_test.cljc 67]
[com.gfredericks.test.chuck.clojure_test$capture_reports_STAR_ invoke clojure_test.cljc 63]
[the_test$fn__3748$fn__3749$fn__3753 invoke the-test.clj 8]
[clojure.lang.AFn applyToHelper AFn.java 154]
[clojure.lang.AFn applyTo AFn.java 144]
[clojure.core$apply invokeStatic core.clj 657]
[clojure.core$apply invoke core.clj 652]
[clojure.test.check.properties$apply_gen$fn__1113$fn__1114 invoke properties.cljc 30]
[clojure.test.check.properties$apply_gen$fn__1113 invoke properties.cljc 29]
[clojure.test.check.rose_tree$fmap invokeStatic rose_tree.cljc 77]
[clojure.test.check.rose_tree$fmap invoke rose_tree.cljc 73]
[clojure.test.check.generators$fmap$fn__463 invoke generators.cljc 102]
[clojure.test.check.generators$gen_fmap$fn__437 invoke generators.cljc 58]
[clojure.test.check.generators$call_gen invokeStatic generators.cljc 42]
[clojure.test.check.generators$call_gen invoke generators.cljc 38]
[clojure.test.check$quick_check invokeStatic check.cljc 126]
[clojure.test.check$quick_check doInvoke check.cljc 59]
[clojure.lang.RestFn invoke RestFn.java 425]
[clojure.lang.AFn applyToHelper AFn.java 156]
[clojure.lang.RestFn applyTo RestFn.java 132]
[clojure.core$apply invokeStatic core.clj 661]
[clojure.core$apply invoke core.clj 652]
[the_test$fn__3748$fn__3749 invoke the-test.clj 8]
[com.gfredericks.test.chuck.clojure_test$_testing invokeStatic clojure_test.cljc 102]
[com.gfredericks.test.chuck.clojure_test$_testing invoke clojure_test.cljc 100]
[the_test$fn__3748 invokeStatic the-test.clj 8]
[the_test$fn__3748 invoke the-test.clj 7]
[clojure.test$test_var$fn__9209 invoke test.clj 716]
[clojure.test$test_var invokeStatic test.clj 716]
[clojure.test$test_var invoke test.clj 707]
[clojure.test$test_vars$fn__9235$fn__9240 invoke test.clj 734]
[clojure.test$default_fixture invokeStatic test.clj 686]
[clojure.test$default_fixture invoke test.clj 682]
[clojure.test$test_vars$fn__9235 invoke test.clj 734]
[clojure.test$default_fixture invokeStatic test.clj 686]
[clojure.test$default_fixture invoke test.clj 682]
[clojure.test$test_vars invokeStatic test.clj 730]
[clojure.test$test_all_vars invokeStatic test.clj 736]
[clojure.test$test_ns invokeStatic test.clj 757]
[clojure.test$test_ns invoke test.clj 742]
[clojure.core$map$fn__5587 invoke core.clj 2747]
[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 1785]
[clojure.lang.RestFn applyTo RestFn.java 130]
[clojure.core$apply invokeStatic core.clj 659]
[clojure.test$run_tests invokeStatic test.clj 767]
[clojure.test$run_tests doInvoke test.clj 767]
[clojure.lang.RestFn invoke RestFn.java 408]
[clojure.test$run_tests invokeStatic test.clj 772]
[clojure.test$run_tests invoke test.clj 767]
[the_test$eval3773 invokeStatic the-test.clj 14]
[the_test$eval3773 invoke the-test.clj 14]
[clojure.lang.Compiler eval Compiler.java 7062]
[clojure.lang.Compiler load Compiler.java 7514]
[clojure.lang.Compiler loadFile Compiler.java 7452]
[clojure.main$load_script invokeStatic main.clj 278]
[clojure.main$script_opt invokeStatic main.clj 338]
[clojure.main$script_opt invoke main.clj 333]
[clojure.main$main invokeStatic main.clj 424]
[clojure.main$main doInvoke main.clj 387]
[clojure.lang.RestFn applyTo RestFn.java 137]
[clojure.lang.Var applyTo Var.java 702]
[clojure.main main main.java 37]]}}, :time-shrinking-ms 1, :smallest [{x 0}]}, :failed-after-ms 4, :num-tests 1, :seed 1536598020405, :fail [{x 0}], :result #error {
:cause oops
:data {}
:via
[{:type clojure.lang.ExceptionInfo
:message oops
:data {}
:at [clojure.core$ex_info invokeStatic core.clj 4739]}]
:trace
[[clojure.core$ex_info invokeStatic core.clj 4739]
[clojure.core$ex_info invoke core.clj 4739]
[the_test$fn__3748$fn__3749$fn__3753$fn__3755 invoke the-test.clj 12]
[com.gfredericks.test.chuck.clojure_test$capture_reports_STAR_ invokeStatic clojure_test.cljc 67]
[com.gfredericks.test.chuck.clojure_test$capture_reports_STAR_ invoke clojure_test.cljc 63]
[the_test$fn__3748$fn__3749$fn__3753 invoke the-test.clj 8]
[clojure.lang.AFn applyToHelper AFn.java 154]
[clojure.lang.AFn applyTo AFn.java 144]
[clojure.core$apply invokeStatic core.clj 657]
[clojure.core$apply invoke core.clj 652]
[clojure.test.check.properties$apply_gen$fn__1113$fn__1114 invoke properties.cljc 30]
[clojure.test.check.properties$apply_gen$fn__1113 invoke properties.cljc 29]
[clojure.test.check.rose_tree$fmap invokeStatic rose_tree.cljc 77]
[clojure.test.check.rose_tree$fmap invoke rose_tree.cljc 73]
[clojure.test.check.generators$fmap$fn__463 invoke generators.cljc 102]
[clojure.test.check.generators$gen_fmap$fn__437 invoke generators.cljc 58]
[clojure.test.check.generators$call_gen invokeStatic generators.cljc 42]
[clojure.test.check.generators$call_gen invoke generators.cljc 38]
[clojure.test.check$quick_check invokeStatic check.cljc 126]
[clojure.test.check$quick_check doInvoke check.cljc 59]
[clojure.lang.RestFn invoke RestFn.java 425]
[clojure.lang.AFn applyToHelper AFn.java 156]
[clojure.lang.RestFn applyTo RestFn.java 132]
[clojure.core$apply invokeStatic core.clj 661]
[clojure.core$apply invoke core.clj 652]
[the_test$fn__3748$fn__3749 invoke the-test.clj 8]
[com.gfredericks.test.chuck.clojure_test$_testing invokeStatic clojure_test.cljc 102]
[com.gfredericks.test.chuck.clojure_test$_testing invoke clojure_test.cljc 100]
[the_test$fn__3748 invokeStatic the-test.clj 8]
[the_test$fn__3748 invoke the-test.clj 7]
[clojure.test$test_var$fn__9209 invoke test.clj 716]
[clojure.test$test_var invokeStatic test.clj 716]
[clojure.test$test_var invoke test.clj 707]
[clojure.test$test_vars$fn__9235$fn__9240 invoke test.clj 734]
[clojure.test$default_fixture invokeStatic test.clj 686]
[clojure.test$default_fixture invoke test.clj 682]
[clojure.test$test_vars$fn__9235 invoke test.clj 734]
[clojure.test$default_fixture invokeStatic test.clj 686]
[clojure.test$default_fixture invoke test.clj 682]
[clojure.test$test_vars invokeStatic test.clj 730]
[clojure.test$test_all_vars invokeStatic test.clj 736]
[clojure.test$test_ns invokeStatic test.clj 757]
[clojure.test$test_ns invoke test.clj 742]
[clojure.core$map$fn__5587 invoke core.clj 2747]
[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 1785]
[clojure.lang.RestFn applyTo RestFn.java 130]
[clojure.core$apply invokeStatic core.clj 659]
[clojure.test$run_tests invokeStatic test.clj 767]
[clojure.test$run_tests doInvoke test.clj 767]
[clojure.lang.RestFn invoke RestFn.java 408]
[clojure.test$run_tests invokeStatic test.clj 772]
[clojure.test$run_tests invoke test.clj 767]
[the_test$eval3773 invokeStatic the-test.clj 14]
[the_test$eval3773 invoke the-test.clj 14]
[clojure.lang.Compiler eval Compiler.java 7062]
[clojure.lang.Compiler load Compiler.java 7514]
[clojure.lang.Compiler loadFile Compiler.java 7452]
[clojure.main$load_script invokeStatic main.clj 278]
[clojure.main$script_opt invokeStatic main.clj 338]
[clojure.main$script_opt invoke main.clj 333]
[clojure.main$main invokeStatic main.clj 424]
[clojure.main$main doInvoke main.clj 387]
[clojure.lang.RestFn applyTo RestFn.java 137]
[clojure.lang.Var applyTo Var.java 702]
[clojure.main main main.java 37]]}, :result-data #:clojure.test.check.properties{:error #error {
:cause oops
:data {}
:via
[{:type clojure.lang.ExceptionInfo
:message oops
:data {}
:at [clojure.core$ex_info invokeStatic core.clj 4739]}]
:trace
[[clojure.core$ex_info invokeStatic core.clj 4739]
[clojure.core$ex_info invoke core.clj 4739]
[the_test$fn__3748$fn__3749$fn__3753$fn__3755 invoke the-test.clj 12]
[com.gfredericks.test.chuck.clojure_test$capture_reports_STAR_ invokeStatic clojure_test.cljc 67]
[com.gfredericks.test.chuck.clojure_test$capture_reports_STAR_ invoke clojure_test.cljc 63]
[the_test$fn__3748$fn__3749$fn__3753 invoke the-test.clj 8]
[clojure.lang.AFn applyToHelper AFn.java 154]
[clojure.lang.AFn applyTo AFn.java 144]
[clojure.core$apply invokeStatic core.clj 657]
[clojure.core$apply invoke core.clj 652]
[clojure.test.check.properties$apply_gen$fn__1113$fn__1114 invoke properties.cljc 30]
[clojure.test.check.properties$apply_gen$fn__1113 invoke properties.cljc 29]
[clojure.test.check.rose_tree$fmap invokeStatic rose_tree.cljc 77]
[clojure.test.check.rose_tree$fmap invoke rose_tree.cljc 73]
[clojure.test.check.generators$fmap$fn__463 invoke generators.cljc 102]
[clojure.test.check.generators$gen_fmap$fn__437 invoke generators.cljc 58]
[clojure.test.check.generators$call_gen invokeStatic generators.cljc 42]
[clojure.test.check.generators$call_gen invoke generators.cljc 38]
[clojure.test.check$quick_check invokeStatic check.cljc 126]
[clojure.test.check$quick_check doInvoke check.cljc 59]
[clojure.lang.RestFn invoke RestFn.java 425]
[clojure.lang.AFn applyToHelper AFn.java 156]
[clojure.lang.RestFn applyTo RestFn.java 132]
[clojure.core$apply invokeStatic core.clj 661]
[clojure.core$apply invoke core.clj 652]
[the_test$fn__3748$fn__3749 invoke the-test.clj 8]
[com.gfredericks.test.chuck.clojure_test$_testing invokeStatic clojure_test.cljc 102]
[com.gfredericks.test.chuck.clojure_test$_testing invoke clojure_test.cljc 100]
[the_test$fn__3748 invokeStatic the-test.clj 8]
[the_test$fn__3748 invoke the-test.clj 7]
[clojure.test$test_var$fn__9209 invoke test.clj 716]
[clojure.test$test_var invokeStatic test.clj 716]
[clojure.test$test_var invoke test.clj 707]
[clojure.test$test_vars$fn__9235$fn__9240 invoke test.clj 734]
[clojure.test$default_fixture invokeStatic test.clj 686]
[clojure.test$default_fixture invoke test.clj 682]
[clojure.test$test_vars$fn__9235 invoke test.clj 734]
[clojure.test$default_fixture invokeStatic test.clj 686]
[clojure.test$default_fixture invoke test.clj 682]
[clojure.test$test_vars invokeStatic test.clj 730]
[clojure.test$test_all_vars invokeStatic test.clj 736]
[clojure.test$test_ns invokeStatic test.clj 757]
[clojure.test$test_ns invoke test.clj 742]
[clojure.core$map$fn__5587 invoke core.clj 2747]
[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 1785]
[clojure.lang.RestFn applyTo RestFn.java 130]
[clojure.core$apply invokeStatic core.clj 659]
[clojure.test$run_tests invokeStatic test.clj 767]
[clojure.test$run_tests doInvoke test.clj 767]
[clojure.lang.RestFn invoke RestFn.java 408]
[clojure.test$run_tests invokeStatic test.clj 772]
[clojure.test$run_tests invoke test.clj 767]
[the_test$eval3773 invokeStatic the-test.clj 14]
[the_test$eval3773 invoke the-test.clj 14]
[clojure.lang.Compiler eval Compiler.java 7062]
[clojure.lang.Compiler load Compiler.java 7514]
[clojure.lang.Compiler loadFile Compiler.java 7452]
[clojure.main$load_script invokeStatic main.clj 278]
[clojure.main$script_opt invokeStatic main.clj 338]
[clojure.main$script_opt invoke main.clj 333]
[clojure.main$main invokeStatic main.clj 424]
[clojure.main$main doInvoke main.clj 387]
[clojure.lang.RestFn applyTo RestFn.java 137]
[clojure.lang.Var applyTo Var.java 702]
[clojure.main main main.java 37]]}}, :failing-size 0, :pass? false}
expected: (not-exception? (:result result))
actual: (not (not-exception? #error {
:cause "oops"
:data {}
:via
[{:type clojure.lang.ExceptionInfo
:message "oops"
:data {}
:at [clojure.core$ex_info invokeStatic "core.clj" 4739]}]
:trace
[[clojure.core$ex_info invokeStatic "core.clj" 4739]
[clojure.core$ex_info invoke "core.clj" 4739]
[the_test$fn__3748$fn__3749$fn__3753$fn__3755 invoke "the-test.clj" 12]
[com.gfredericks.test.chuck.clojure_test$capture_reports_STAR_ invokeStatic "clojure_test.cljc" 67]
[com.gfredericks.test.chuck.clojure_test$capture_reports_STAR_ invoke "clojure_test.cljc" 63]
[the_test$fn__3748$fn__3749$fn__3753 invoke "the-test.clj" 8]
[clojure.lang.AFn applyToHelper "AFn.java" 154]
[clojure.lang.AFn applyTo "AFn.java" 144]
[clojure.core$apply invokeStatic "core.clj" 657]
[clojure.core$apply invoke "core.clj" 652]
[clojure.test.check.properties$apply_gen$fn__1113$fn__1114 invoke "properties.cljc" 30]
[clojure.test.check.properties$apply_gen$fn__1113 invoke "properties.cljc" 29]
[clojure.test.check.rose_tree$fmap invokeStatic "rose_tree.cljc" 77]
[clojure.test.check.rose_tree$fmap invoke "rose_tree.cljc" 73]
[clojure.test.check.generators$fmap$fn__463 invoke "generators.cljc" 102]
[clojure.test.check.generators$gen_fmap$fn__437 invoke "generators.cljc" 58]
[clojure.test.check.generators$call_gen invokeStatic "generators.cljc" 42]
[clojure.test.check.generators$call_gen invoke "generators.cljc" 38]
[clojure.test.check$quick_check invokeStatic "check.cljc" 126]
[clojure.test.check$quick_check doInvoke "check.cljc" 59]
[clojure.lang.RestFn invoke "RestFn.java" 425]
[clojure.lang.AFn applyToHelper "AFn.java" 156]
[clojure.lang.RestFn applyTo "RestFn.java" 132]
[clojure.core$apply invokeStatic "core.clj" 661]
[clojure.core$apply invoke "core.clj" 652]
[the_test$fn__3748$fn__3749 invoke "the-test.clj" 8]
[com.gfredericks.test.chuck.clojure_test$_testing invokeStatic "clojure_test.cljc" 102]
[com.gfredericks.test.chuck.clojure_test$_testing invoke "clojure_test.cljc" 100]
[the_test$fn__3748 invokeStatic "the-test.clj" 8]
[the_test$fn__3748 invoke "the-test.clj" 7]
[clojure.test$test_var$fn__9209 invoke "test.clj" 716]
[clojure.test$test_var invokeStatic "test.clj" 716]
[clojure.test$test_var invoke "test.clj" 707]
[clojure.test$test_vars$fn__9235$fn__9240 invoke "test.clj" 734]
[clojure.test$default_fixture invokeStatic "test.clj" 686]
[clojure.test$default_fixture invoke "test.clj" 682]
[clojure.test$test_vars$fn__9235 invoke "test.clj" 734]
[clojure.test$default_fixture invokeStatic "test.clj" 686]
[clojure.test$default_fixture invoke "test.clj" 682]
[clojure.test$test_vars invokeStatic "test.clj" 730]
[clojure.test$test_all_vars invokeStatic "test.clj" 736]
[clojure.test$test_ns invokeStatic "test.clj" 757]
[clojure.test$test_ns invoke "test.clj" 742]
[clojure.core$map$fn__5587 invoke "core.clj" 2747]
[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" 1785]
[clojure.lang.RestFn applyTo "RestFn.java" 130]
[clojure.core$apply invokeStatic "core.clj" 659]
[clojure.test$run_tests invokeStatic "test.clj" 767]
[clojure.test$run_tests doInvoke "test.clj" 767]
[clojure.lang.RestFn invoke "RestFn.java" 408]
[clojure.test$run_tests invokeStatic "test.clj" 772]
[clojure.test$run_tests invoke "test.clj" 767]
[the_test$eval3773 invokeStatic "the-test.clj" 14]
[the_test$eval3773 invoke "the-test.clj" 14]
[clojure.lang.Compiler eval "Compiler.java" 7062]
[clojure.lang.Compiler load "Compiler.java" 7514]
[clojure.lang.Compiler loadFile "Compiler.java" 7452]
[clojure.main$load_script invokeStatic "main.clj" 278]
[clojure.main$script_opt invokeStatic "main.clj" 338]
[clojure.main$script_opt invoke "main.clj" 333]
[clojure.main$main invokeStatic "main.clj" 424]
[clojure.main$main doInvoke "main.clj" 387]
[clojure.lang.RestFn applyTo "RestFn.java" 137]
[clojure.lang.Var applyTo "Var.java" 702]
[clojure.main main "main.java" 37]]}))
Ran 1 tests containing 1 assertions.
1 failures, 0 errors.
I find this report to be very difficult to interpret, because it's long (~380 lines in 0.10.0-alpha3
, ~230 in 0.9.0
) and buries :smallest
somewhere in the middle. The solution could be to allow customization of this report (e.g. also via defmethod
).
I think this hinges on this function, which does something different depending on whether the tests threw an exception or not. The else
branch of the if
delegates to a special ct/report
type of ::shrunk
, while the then
branch just relies on the default reporting of is
. I think the then
branch could be refactored to use a second special ct/report
type (::error
?) that includes the generated data in a similar way that the ::shrunk
impl does.
I think this would give you what you need, does that sound right?
Yes, sounds good!
Is this something you can help with with a pull request?
Sure, will do in spare time.
Example:
Expected:
Actual:
My current workaround is to redefine the reporting method so that it always "fails" the test via
(is false)
:Output:
Workaround output for the expected failure: