marick/Midje

Cannot compare sets

Closed this issue · 2 comments

When two sets contains different elements, midje is unable to compare them.

I have been able to narrow down my problem to the following minimal cases:

(fact
 #{"aa"} => #{"bb"})
(fact
 {:a 1 :b #{"aa"}} => {:a 2 :b #{"aa"}})

which cause an exception:

1. Unhandled java.lang.ClassCastException
   class midje.util.ordered_set.OrderedSet cannot be cast to class
   midje.util.ordered_set.OrderedSet (midje.util.ordered_set.OrderedSet is in
   unnamed module of loader clojure.lang.DynamicClassLoader @507760dc;
   midje.util.ordered_set.OrderedSet is in unnamed module of loader
   clojure.lang.DynamicClassLoader @3dfceefd)

           ordered_set.clj:  129  midje.util.ordered-set/transient-ordered-set
           ordered_set.clj:  128  midje.util.ordered-set/transient-ordered-set
           ordered_set.clj:   90  midje.util.ordered-set.OrderedSet/asTransient
                  core.clj: 3347  clojure.core/transient
                  core.clj: 6895  clojure.core/into
                  core.clj: 6887  clojure.core/into
                  util.clj:   78  midje.emission.plugins.util/nested-sort
                  util.clj:   60  midje.emission.plugins.util/nested-sort
 default_failure_lines.clj:  143  midje.emission.plugins.default-failure-lines/summarize
 default_failure_lines.clj:  141  midje.emission.plugins.default-failure-lines/summarize
               default.clj:   13  midje.emission.plugins.default/fail
               default.clj:   12  midje.emission.plugins.default/fail
                  AFn.java:  154  clojure.lang.AFn/applyToHelper
                  AFn.java:  144  clojure.lang.AFn/applyTo
                  Var.java:  705  clojure.lang.Var/applyTo
                  core.clj:  665  clojure.core/apply
                  core.clj:  660  clojure.core/apply
                   api.clj:   30  midje.emission.api/bounce-to-plugin
                   api.clj:   26  midje.emission.api/bounce-to-plugin
               RestFn.java:  423  clojure.lang.RestFn/invoke
                   api.clj:   49  midje.emission.api/fail
                   api.clj:   46  midje.emission.api/fail
            checkables.clj:   54  midje.checking.checkables/check-for-match
            checkables.clj:   31  midje.checking.checkables/check-for-match
            checkables.clj:   83  midje.checking.checkables/check-result
            checkables.clj:   81  midje.checking.checkables/check-result
            checkables.clj:  129  midje.checking.checkables/check-one/fn
thread_safe_var_nesting.clj:   32  midje.util.thread-safe-var-nesting/with-altered-roots*
thread_safe_var_nesting.clj:   30  midje.util.thread-safe-var-nesting/with-altered-roots*
            checkables.clj:  122  midje.checking.checkables/check-one
            checkables.clj:  116  midje.checking.checkables/check-one
2f4a71a9358344ac4cef041a5db18976aa2c7711-init.clj:   15  mr-peanutbutter.services.application-storage-test/eval63658/fn/fn
thread_safe_var_nesting.clj:   32  midje.util.thread-safe-var-nesting/with-altered-roots*
thread_safe_var_nesting.clj:   30  midje.util.thread-safe-var-nesting/with-altered-roots*
2f4a71a9358344ac4cef041a5db18976aa2c7711-init.clj:   15  mr-peanutbutter.services.application-storage-test/eval63658/fn
                  AFn.java:  152  clojure.lang.AFn/applyToHelper
                  AFn.java:  144  clojure.lang.AFn/applyTo
            AFunction.java:   31  clojure.lang.AFunction$1/doInvoke
               RestFn.java:  397  clojure.lang.RestFn/invoke
                 facts.clj:   32  midje.checking.facts/check-one/fn
                 facts.clj:   31  midje.checking.facts/check-one
                 facts.clj:    9  midje.checking.facts/check-one
                 facts.clj:   36  midje.checking.facts/creation-time-check
                 facts.clj:   34  midje.checking.facts/creation-time-check
2f4a71a9358344ac4cef041a5db18976aa2c7711-init.clj:   15  mr-peanutbutter.services.application-storage-test/eval63658
2f4a71a9358344ac4cef041a5db18976aa2c7711-init.clj:   15  mr-peanutbutter.services.application-storage-test/eval63658
             Compiler.java: 7176  clojure.lang.Compiler/eval
             Compiler.java: 7131  clojure.lang.Compiler/eval
                  core.clj: 3214  clojure.core/eval
                  core.clj: 3210  clojure.core/eval
                  main.clj:  414  clojure.main/repl/read-eval-print/fn
                  main.clj:  414  clojure.main/repl/read-eval-print
                  main.clj:  435  clojure.main/repl/fn
                  main.clj:  435  clojure.main/repl
                  main.clj:  345  clojure.main/repl
               RestFn.java:  137  clojure.lang.RestFn/applyTo
                  core.clj:  665  clojure.core/apply
                  core.clj:  660  clojure.core/apply
                regrow.clj:   20  refactor-nrepl.ns.slam.hound.regrow/wrap-clojure-repl/fn
               RestFn.java: 1523  clojure.lang.RestFn/invoke
    interruptible_eval.clj:   79  nrepl.middleware.interruptible-eval/evaluate
    interruptible_eval.clj:   55  nrepl.middleware.interruptible-eval/evaluate
    interruptible_eval.clj:  142  nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
                  AFn.java:   22  clojure.lang.AFn/run
               session.clj:  171  nrepl.middleware.session/session-exec/main-loop/fn
               session.clj:  170  nrepl.middleware.session/session-exec/main-loop
                  AFn.java:   22  clojure.lang.AFn/run
               Thread.java:  834  java.lang.Thread/run

Hey @viebel, I spun up your example in a blank project using Midje 1.9.9 and wasn't able to reproduce it. What version of the lib are you using?

lein clean and my problem is solved