diff --git a/test/test_summary.clj b/test/test_summary.clj index 157e5e1b8..2f0d9242f 100644 --- a/test/test_summary.clj +++ b/test/test_summary.clj @@ -1,5 +1,6 @@ (ns test-summary - (:require [clojure.test :as t])) + (:require [clojure.string :as str] + [clojure.test :as t])) (def ^:private failures (atom [])) @@ -7,6 +8,18 @@ (defonce ^:private original-report-error (get-method t/report :error)) (defonce ^:private original-report-summary (get-method t/report :summary)) +(defn- ns->path [ns] + (-> (str ns) + (str/replace "." "/") + (str/replace "-" "_") + (str ".clj"))) + +(defn- escape-message [s] + (-> s + (str/replace "%" "%25") + (str/replace "\n" "%0A") + (str/replace "\r" "%0D"))) + (defmethod t/report :fail [m] (swap! failures conj (assoc m :test-var (first t/*testing-vars*) @@ -23,16 +36,15 @@ (original-report-summary m) (when (seq @failures) (println "\n\n========== FAILURE SUMMARY ==========\n") - (doseq [{:keys [type test-var message expected actual file line]} @failures] - (println (str (name type) ": " - (when test-var - (str (-> test-var meta :ns) "/" (-> test-var meta :name))))) - (when (and file line) - (println (str " at " file ":" line))) - (when message - (println (str " " message))) - (println (str " expected: " (pr-str expected))) - (println (str " actual: " (pr-str actual))) - (println)) - (println "======================================\n")) + (doseq [{:keys [type test-var message expected actual line]} @failures] + (let [test-name (when test-var + (str (-> test-var meta :ns) "/" (-> test-var meta :name))) + file-path (when test-var + (str "test/" (ns->path (-> test-var meta :ns)))) + error-message (str (name type) ": " test-name + "\n expected: " (pr-str expected) + "\n actual: " (pr-str actual) + (when message (str "\n message: " message)))] + (println (str "::error file=" file-path ",line=" line "::" (escape-message error-message))))) + (println "\n======================================\n")) (reset! failures []))