marick / Midje

Midje provides a migration path from clojure.test to a more flexible, readable, abstract, and gracious style of testing
MIT License
1.68k stars 128 forks source link

Fact first parameter cannot be a symbol for a string #5

Closed Serabe closed 13 years ago

Serabe commented 14 years ago

I needed to create a variable string for describing a fact, like (doseq [v (range 5)](fact %28string "It should be the identity for value " v) (some-fn 5) => v))

But it throws an exception. Complete stacktrace:

Problem with #<core$PLUS clojure.core$PLUS@450f8ee4> (s (pixel-round-to-quantum v) => v) Exception in thread "main" java.lang.Exception: exception via error-kit (pixel_test.clj:58) at clojure.lang.Compiler.analyzeSeq(Compiler.java:5376) at clojure.lang.Compiler.analyze(Compiler.java:5190) at clojure.lang.Compiler.analyze(Compiler.java:5151) at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:4670) at clojure.lang.Compiler.analyzeSeq(Compiler.java:5369) at clojure.lang.Compiler.analyze(Compiler.java:5190) at clojure.lang.Compiler.analyze(Compiler.java:5151) at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:4670) at clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java:4941) at clojure.lang.Compiler.analyzeSeq(Compiler.java:5369) at clojure.lang.Compiler.analyze(Compiler.java:5190) at clojure.lang.Compiler.analyzeSeq(Compiler.java:5357) at clojure.lang.Compiler.analyze(Compiler.java:5190) at clojure.lang.Compiler.analyze(Compiler.java:5151) at clojure.lang.Compiler$IfExpr$Parser.parse(Compiler.java:2315) at clojure.lang.Compiler.analyzeSeq(Compiler.java:5369) at clojure.lang.Compiler.analyze(Compiler.java:5190) at clojure.lang.Compiler.analyze(Compiler.java:5151) at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:4670) at clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java:4941) at clojure.lang.Compiler.analyzeSeq(Compiler.java:5369) at clojure.lang.Compiler.analyze(Compiler.java:5190) at clojure.lang.Compiler.analyzeSeq(Compiler.java:5357) at clojure.lang.Compiler.analyze(Compiler.java:5190) at clojure.lang.Compiler.analyzeSeq(Compiler.java:5357) at clojure.lang.Compiler.analyze(Compiler.java:5190) at clojure.lang.Compiler.analyze(Compiler.java:5151) at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:4670) at clojure.lang.Compiler$FnMethod.parse(Compiler.java:4328) at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3173) at clojure.lang.Compiler.analyzeSeq(Compiler.java:5367) at clojure.lang.Compiler.analyze(Compiler.java:5190) at clojure.lang.Compiler.analyzeSeq(Compiler.java:5357) at clojure.lang.Compiler.analyze(Compiler.java:5190) at clojure.lang.Compiler.analyze(Compiler.java:5151) at clojure.lang.Compiler$MapExpr.parse(Compiler.java:2498) at clojure.lang.Compiler.analyze(Compiler.java:5194) at clojure.lang.Compiler.analyze(Compiler.java:5151) at clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:437) at clojure.lang.Compiler.analyzeSeq(Compiler.java:5369) at clojure.lang.Compiler.analyze(Compiler.java:5190) at clojure.lang.Compiler.analyze(Compiler.java:5151) at clojure.lang.Compiler.eval(Compiler.java:5428) at clojure.lang.Compiler.load(Compiler.java:5857) at clojure.lang.RT.loadResourceScript(RT.java:340) at clojure.lang.RT.loadResourceScript(RT.java:331) at clojure.lang.RT.load(RT.java:409) at clojure.lang.RT.load(RT.java:381) at clojure.core$load$fn4511.invoke(core.clj:4905) at clojure.core$load.doInvoke(core.clj:4904) at clojure.lang.RestFn.invoke(RestFn.java:409) at clojure.core$load_one.invoke(core.clj:4729) at clojure.core$load_lib.doInvoke(core.clj:4766) at clojure.lang.RestFn.applyTo(RestFn.java:143) at clojure.core$apply.invoke(core.clj:542) at clojure.core$load_libs.doInvoke(core.clj:4800) at clojure.lang.RestFn.applyTo(RestFn.java:138) at clojure.core$apply.invoke(core.clj:542) at clojure.core$require.doInvoke(core.clj:4869) at clojure.lang.RestFn.invoke(RestFn.java:409) at user$eval3.invoke(NO_SOURCE_FILE:1) at clojure.lang.Compiler.eval(Compiler.java:5424) at clojure.lang.Compiler.eval(Compiler.java:5415) at clojure.lang.Compiler.eval(Compiler.java:5391) at clojure.core$eval.invoke(core.clj:2382) at clojure.main$eval_opt.invoke(main.clj:235) at clojure.main$initialize.invoke(main.clj:254) at clojure.main$null_opt.invoke(main.clj:279) at clojure.main$main.doInvoke(main.clj:354) at clojure.lang.RestFn.invoke(RestFn.java:422) at clojure.lang.Var.invoke(Var.java:369) at clojure.lang.AFn.applyToHelper(AFn.java:165) at clojure.lang.Var.applyTo(Var.java:482) at clojure.main.main(main.java:37) Caused by: java.lang.Exception: exception via error-kit at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at clojure.lang.Reflector.invokeConstructor(Reflector.java:160) at clojure.contrib.error_kit$error$fn131.invoke(error_kit.clj:51) at clojure.contrib.error_kit$raiseSTAR.invoke(error_kit.clj:93) at midje.sweet$frozen_runs.invoke(sweet.clj:50) at midje.sweet$frozen_runs.invoke(sweet.clj:34) at midje.sweet$fact.doInvoke(sweet.clj:81) at clojure.lang.RestFn.invoke(RestFn.java:522) at clojure.lang.Var.invoke(Var.java:385) at clojure.lang.AFn.applyToHelper(AFn.java:187) at clojure.lang.Var.applyTo(Var.java:482) at clojure.lang.Compiler.macroexpand1(Compiler.java:5286) at clojure.lang.Compiler.analyzeSeq(Compiler.java:5355) ... 73 more

marick commented 14 years ago

This will be fixed in 0.5, which I can probably have out this week.

(Note: a documentation string -- whether literal or constructed -- doesn't actually do anything, but it won't cause an error.)

Serabe commented 14 years ago

Thank you so much.

About doc string note: I read somewhere in midje's documentation that it is possible that a specific runner get implemented in the future. I was hoping that in it, something like rspec's spec output would be implemented, so I rather keep them there.

Thank you so much for the fix.

marick commented 13 years ago

If I understand what you want, this has probably been working for a while:

(doseq [v (range 5)]
        (fact (str "It should be the identity for value " v) (some-fn 5) => v))

produces:

FAIL at (NO_SOURCE_FILE:1) Expected: 0 Actual: 33

FAIL at (NO_SOURCE_FILE:1) Expected: 1 Actual: 33

FAIL at (NO_SOURCE_FILE:1) Expected: 2 Actual: 33

FAIL at (NO_SOURCE_FILE:1) Expected: 3 Actual: 33

FAIL at (NO_SOURCE_FILE:1) Expected: 4 Actual: 33