test2junit icon indicating copy to clipboard operation
test2junit copied to clipboard

test2junit 1.3.2 breaks when reflection warnings printed during test execution

Open err opened this issue 7 years ago • 2 comments

clj-assorted-util does not provide an implementation of the 3-arity method of java.io.StringWriter. Any tests which cause warnings to be printed by the clojure compiler at runtime might cause test2junit to fail.

  • see sample project for minimal reproducible error case
  • consider https://github.com/ruedigergad/clj-assorted-utils/pull/1 which intends to fix this issue.

example error output

As produced by sample project:

Writing output to: test2junit

Testing: t2j-err.core-test
Running tests in: t2j-err.core-test
  Running test: #'t2j-err.core-test/a-test-creates-reflection-warning
    ERROR
      Message: clojure.lang.ArityException: Wrong number of args (4) passed to: core/apply-junit-output-hook/fn--253/fn--254, compiling:((...)/form-init4255135209920479730.clj:6:21)
      Cause: #error {
 :cause Wrong number of args (4) passed to: core/apply-junit-output-hook/fn--253/fn--254
 :via
 [{:type clojure.lang.ArityException
   :message Wrong number of args (4) passed to: core/apply-junit-output-hook/fn--253/fn--254
   :at [clojure.lang.AFn throwArity AFn.java 429]}]
 :trace
 [[clojure.lang.AFn throwArity AFn.java 429]
  [clojure.lang.AFn invoke AFn.java 44]
  [test2junit.core.proxy$java.io.StringWriter$ff19274a write nil -1]
  [java.io.PrintWriter write PrintWriter.java 456]
  [java.io.PrintWriter write PrintWriter.java 473]
  [java.io.PrintWriter append PrintWriter.java 1004]
  [java.io.PrintWriter append PrintWriter.java 56]
  [java.util.Formatter$FixedString print Formatter.java 2595]
  [java.util.Formatter format Formatter.java 2508]
  [java.io.PrintWriter format PrintWriter.java 905]
  [clojure.lang.Compiler$InstanceFieldExpr <init> Compiler.java 1157]
  [clojure.lang.Compiler$HostExpr$Parser parse Compiler.java 998]
  [clojure.lang.Compiler analyzeSeq Compiler.java 6868]
  [clojure.lang.Compiler analyze Compiler.java 6669]
  [clojure.lang.Compiler analyze Compiler.java 6625]
  [clojure.lang.Compiler$BodyExpr$Parser parse Compiler.java 6001]
  [clojure.lang.Compiler$FnMethod parse Compiler.java 5380]
  [clojure.lang.Compiler$FnExpr parse Compiler.java 3972]
  [clojure.lang.Compiler analyzeSeq Compiler.java 6866]
  [clojure.lang.Compiler analyze Compiler.java 6669]
  [clojure.lang.Compiler eval Compiler.java 6924]
  [clojure.lang.Compiler eval Compiler.java 6890]
  [clojure.core$eval invokeStatic core.clj 3105]
  [clojure.core$eval invoke core.clj 3101]
  [t2j_err.core_test$fn__486 invokeStatic core_test.clj 6]
  [t2j_err.core_test$fn__486 invoke core_test.clj 4]

err avatar Jun 03 '17 00:06 err

Hey,

thanks a lot for spotting the issue and for the excellent investigation and documentation!

I already replied to the pull request regarding clj-assorted-utils separately. I merged your changes to clj-assorted-utils and uploaded a new version. Based on the new clj-assorted-utils version, I also uploaded a new test2junit version (1.3.3).

Also thanks a lot for the minimal working example for re-producing the error. Is it fine for you if I include your test case https://github.com/err/t2j-err/blob/master/test/t2j_err/core_test.clj in the test2junit unit tests?

Also, please let me know if the new test2junit version fixes the issue for you.

Thanks a lot again and cheers,

Ruediger

ruedigergad avatar Jun 15 '17 14:06 ruedigergad

Is it fine for you if I include your test case [...] in the test2junit unit tests?

Absolutely! The new test2junit version (1.3.3) does fix this issue. Thank you!


I have noticed one thing. Possibly unrelated.

For the following test:

(deftest intentionally-failing-test
   (testing "all things"
     (prn "Bwahaha!")
     (is false)
     (prn "A test just failed.")))

I see this in my test report:


Standard Output

34661199710497104973334
3465321161011151163210611711511632102971051081011004634
    

Which I believe is just the ASCII character codes:


user> (map #(apply str (map int %))
              [(pr-str "Bwahaha")
               (pr-str "A test just failed.")])
;; => ("346611997104971049734"
       "3465321161011151163210611711511632102971051081011004634")

I have not yet had time to investigate further. I am not familiar with JUnit; maybe there's some configuration I need to adjust. If anyone has suggestions as to where to begin my search, I'm happy to follow through on this.

err avatar Jun 23 '17 19:06 err