From ad4c5a8394f5a473974c96a7d121ae9ccc1080d7 Mon Sep 17 00:00:00 2001 From: Joost Diepenmaat Date: Tue, 6 Mar 2018 14:49:22 +0100 Subject: [PATCH 1/2] Port to data.xml 0.2.0-alpha5 Minimal changes to support data.xml 0.2.0-alpha5 release. This is backwards incompatible with data.xml previous to 0.2.0. --- project.clj | 2 +- src/circleci/test/report/junit.clj | 10 +++--- test/circleci/test/report/test_junit.clj | 44 ++++++++++++------------ 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/project.clj b/project.clj index 0fb5d9d..9787471 100644 --- a/project.clj +++ b/project.clj @@ -5,7 +5,7 @@ :url "http://www.eclipse.org/legal/epl-v10.html"} :pedantic? :abort :dependencies [[org.clojure/clojure "1.8.0"] - [org.clojure/data.xml "0.0.8"]] + [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..dbade4c 100644 --- a/src/circleci/test/report/junit.clj +++ b/src/circleci/test/report/junit.clj @@ -1,9 +1,9 @@ (ns circleci.test.report.junit "Junit reporter for circleci.test" (:require [clojure.data.xml :as xml] + [clojure.data.xml.node :refer [element?]] [clojure.java.io :as io] - [circleci.test.report :as report]) - (:import clojure.data.xml.Element)) + [circleci.test.report :as report])) (defn- stacktrace->string "given an exception, returns the result of printStackTrace as a string" @@ -38,8 +38,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 +48,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..a36c411 100644 --- a/test/circleci/test/report/test_junit.clj +++ b/test/circleci/test/report/test_junit.clj @@ -1,20 +1,20 @@ (ns circleci.test.report.test-junit (:require [clojure.test :refer (deftest testing is)] + [clojure.data.xml.node :refer [element?]] 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 (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 +27,23 @@ :actual (not (= 3 2)), :file "test_junit.clj", :line 8}))] - (is (instance? Element ret)) + (is (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 (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. From 9c41d7ac04e5e31ef75752992a88bac6ded0470c Mon Sep 17 00:00:00 2001 From: Joost Diepenmaat Date: Tue, 6 Mar 2018 14:59:26 +0100 Subject: [PATCH 2/2] junit reporter works with stable and alpha versions of data.xml Includes configuration to test that reporter works with current stable and latest data.xml --- .circleci/config.yml | 1 + project.clj | 4 +++- src/circleci/test/report/junit.clj | 4 +++- test/circleci/test/report/test_junit.clj | 19 +++++++++---------- 4 files changed, 16 insertions(+), 12 deletions(-) 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 9787471..bd2104b 100644 --- a/project.clj +++ b/project.clj @@ -5,7 +5,9 @@ :url "http://www.eclipse.org/legal/epl-v10.html"} :pedantic? :abort :dependencies [[org.clojure/clojure "1.8.0"] - [org.clojure/data.xml "0.2.0-alpha5"]] + [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 dbade4c..8e7a66f 100644 --- a/src/circleci/test/report/junit.clj +++ b/src/circleci/test/report/junit.clj @@ -1,10 +1,12 @@ (ns circleci.test.report.junit "Junit reporter for circleci.test" (:require [clojure.data.xml :as xml] - [clojure.data.xml.node :refer [element?]] [clojure.java.io :as io] [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" [^Throwable e] diff --git a/test/circleci/test/report/test_junit.clj b/test/circleci/test/report/test_junit.clj index a36c411..dd0ec9e 100644 --- a/test/circleci/test/report/test_junit.clj +++ b/test/circleci/test/report/test_junit.clj @@ -1,6 +1,5 @@ (ns circleci.test.report.test-junit (:require [clojure.test :refer (deftest testing is)] - [clojure.data.xml.node :refer [element?]] circleci.test circleci.test.report [circleci.test.report.junit :as junit]) @@ -8,13 +7,13 @@ java.nio.file.attribute.FileAttribute)) (deftest failure-works - (is (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,12 +26,12 @@ :actual (not (= 3 2)), :file "test_junit.clj", :line 8}))] - (is (element? ret)) + (is (#'junit/element? ret)) (testing "it has a time" (is (-> ret :attrs :time float?))))) (deftest testsuite-works - (is (element? + (is (#'junit/element? (#'junit/suite-xml {:ns (find-ns 'clojure.core)} [(#'junit/testcase-xml {:type :end-test-var :name #'clojure.core/map