diff --git a/.circleci/config.yml b/.circleci/config.yml index 11a5d6d..1759861 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -12,6 +12,7 @@ jobs: key: v1-jars- - run: lein test + - run: lein with-profile +alpha-data-xml test - cache-save: key: v1-jars-{{ checksum "project.clj" }} diff --git a/project.clj b/project.clj index 0fb5d9d..bd2104b 100644 --- a/project.clj +++ b/project.clj @@ -6,6 +6,8 @@ :pedantic? :abort :dependencies [[org.clojure/clojure "1.8.0"] [org.clojure/data.xml "0.0.8"]] + :profiles {:alpha-data-xml + {:dependencies [[org.clojure/data.xml "0.2.0-alpha5"]]}} :aliases {"test" ["run" "-m" "circleci.test/dir" :project/test-paths] "tests" ["run" "-m" "circleci.test"] "retest" ["run" "-m" "circleci.test.retest"]}) diff --git a/src/circleci/test/report/junit.clj b/src/circleci/test/report/junit.clj index 95582ea..8e7a66f 100644 --- a/src/circleci/test/report/junit.clj +++ b/src/circleci/test/report/junit.clj @@ -2,8 +2,10 @@ "Junit reporter for circleci.test" (:require [clojure.data.xml :as xml] [clojure.java.io :as io] - [circleci.test.report :as report]) - (:import clojure.data.xml.Element)) + [circleci.test.report :as report])) + +(defn- element? [el] + (and (map? el) (some? (:tag el)))) (defn- stacktrace->string "given an exception, returns the result of printStackTrace as a string" @@ -38,8 +40,8 @@ (defn- suite-xml [m testcases] - {:pre [(class testcases) (every? #(instance? Element %) testcases)]} - (apply xml/element :testsuite {:name (-> m :ns (.name)) + {:pre [(class testcases) (every? element? testcases)]} + (apply xml/element :testsuite {:name (-> m :ns ns-name str) :errors (count-errors testcases) :tests (count testcases) :failures (count-failures testcases) @@ -48,7 +50,7 @@ (defn- test-name [v] - (-> v meta :name)) + (-> v meta :name str)) (defn- testcase-xml "Generate a testcase XML element. Takes the map from a (clojure.test/do-report :end-test-var), and a seq of failure/error reports " diff --git a/test/circleci/test/report/test_junit.clj b/test/circleci/test/report/test_junit.clj index 24ee160..dd0ec9e 100644 --- a/test/circleci/test/report/test_junit.clj +++ b/test/circleci/test/report/test_junit.clj @@ -3,18 +3,17 @@ circleci.test circleci.test.report [circleci.test.report.junit :as junit]) - (:import clojure.data.xml.Element - java.nio.file.Files + (:import java.nio.file.Files java.nio.file.attribute.FileAttribute)) (deftest failure-works - (is (instance? Element (#'junit/failure-xml - {:expected (= 3 (+ 1 1)), - :message nil, - :type :fail, - :actual (not (= 3 2)), - :file "test_junit.clj", - :line 8})))) + (is (#'junit/element? (#'junit/failure-xml + {:expected (= 3 (+ 1 1)), + :message nil, + :type :fail, + :actual (not (= 3 2)), + :file "test_junit.clj", + :line 8})))) (deftest testcase-works (let [ret (#'junit/testcase-xml {:type :end-test-var @@ -27,23 +26,23 @@ :actual (not (= 3 2)), :file "test_junit.clj", :line 8}))] - (is (instance? Element ret)) + (is (#'junit/element? ret)) (testing "it has a time" (is (-> ret :attrs :time float?))))) (deftest testsuite-works - (is (instance? Element - (#'junit/suite-xml {:ns (find-ns 'clojure.core)} - [(#'junit/testcase-xml {:type :end-test-var - :name #'clojure.core/map - :elapsed 0.03} - [(#'junit/failure-xml - {:expected (= 3 (+ 1 1)), - :message nil, - :type :fail, - :actual (not (= 3 2)), - :file "test_junit.clj", - :line 8})])])))) + (is (#'junit/element? + (#'junit/suite-xml {:ns (find-ns 'clojure.core)} + [(#'junit/testcase-xml {:type :end-test-var + :name #'clojure.core/map + :elapsed 0.03} + [(#'junit/failure-xml + {:expected (= 3 (+ 1 1)), + :message nil, + :type :fail, + :actual (not (= 3 2)), + :file "test_junit.clj", + :line 8})])])))) (deftest junit-doesn't-break-return-code ;; `lein test` assumes tests return a map.