From 51e4023fe2fc6cf9a47ea777c165d234b3635521 Mon Sep 17 00:00:00 2001 From: Oliver Caldwell Date: Fri, 19 Apr 2024 13:20:08 +0100 Subject: [PATCH] Modify the Clojure test pretty printer to show the full output AND the diff --- fnl/conjure/client/clojure/nrepl/server.fnl | 27 ++++++++++----------- lua/conjure/client/clojure/nrepl/server.lua | 2 +- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/fnl/conjure/client/clojure/nrepl/server.fnl b/fnl/conjure/client/clojure/nrepl/server.fnl index 48ef83a0..917d49a1 100644 --- a/fnl/conjure/client/clojure/nrepl/server.fnl +++ b/fnl/conjure/client/clojure/nrepl/server.fnl @@ -255,21 +255,20 @@ " (println \"\nFAIL in\" (clojure.test/testing-vars-str m))" " (when (seq clojure.test/*testing-contexts*) (println (clojure.test/testing-contexts-str)))" " (when-let [message (:message m)] (println message))" - " (if (and (seq? (:actual m))" - " (= #'clojure.core/not (resolve (first (:actual m))))" - " (seq? (second (:actual m)))" - " (= #'clojure.core/= (resolve (first (second (:actual m)))))" - " (= 3 (count (second (:actual m)))))" + " (print \"expected:\" (with-out-str (pp/pprint (:expected m))))" + " (print \" actual:\" (with-out-str (pp/pprint (:actual m))))" + " (when (and (seq? (:actual m))" + " (= #'clojure.core/not (resolve (first (:actual m))))" + " (seq? (second (:actual m)))" + " (= #'clojure.core/= (resolve (first (second (:actual m)))))" + " (= 3 (count (second (:actual m)))))" " (let [[missing extra _] (clojure.data/diff (second (second (:actual m))) (last (second (:actual m))))" - " missing-str (with-out-str (pp/pprint missing))" - " missing-lines (clojure.string/split-lines missing-str)" - " extra-str (with-out-str (pp/pprint extra))" - " extra-lines (clojure.string/split-lines extra-str)]" - " (when (some? missing) (doseq [m missing-lines] (println \"-\" m)))" - " (when (some? extra) (doseq [e extra-lines] (println \"+\" e))))" - " (do" - " (print \"expected:\" (with-out-str (pp/pprint (:expected m))))" - " (print \" actual:\" (with-out-str (pp/pprint (:actual m))))))))" + " missing-str (with-out-str (pp/pprint missing))" + " missing-lines (clojure.string/split-lines missing-str)" + " extra-str (with-out-str (pp/pprint extra))" + " extra-lines (clojure.string/split-lines extra-str)]" + " (when (some? missing) (doseq [m missing-lines] (println \"- \" m)))" + " (when (some? extra) (doseq [e extra-lines] (println \"+ \" e)))))))" "(in-ns initial-ns)"])} (when cb diff --git a/lua/conjure/client/clojure/nrepl/server.lua b/lua/conjure/client/clojure/nrepl/server.lua index 4aeca4c2..911e2d7f 100644 --- a/lua/conjure/client/clojure/nrepl/server.lua +++ b/lua/conjure/client/clojure/nrepl/server.lua @@ -254,7 +254,7 @@ local function eval_preamble(cb) return nil end end - return send({op = "eval", code = str.join("\n", {"(create-ns 'conjure.internal)", "(intern 'conjure.internal 'initial-ns (symbol (str *ns*)))", "(ns conjure.internal", " (:require [clojure.pprint :as pp] [clojure.test] [clojure.data] [clojure.string]))", "(defn pprint [val w opts]", " (apply pp/write val", " (mapcat identity (assoc opts :stream w))))", "(defn bounded-conj [queue x limit]", " (->> x (conj queue) (take limit)))", ("(def tap-queue-size " .. queue_size .. ")"), "(defonce tap-queue! (atom (list)))", "(defonce enqueue-tap!", " (fn [x] (swap! tap-queue! bounded-conj x tap-queue-size)))", "(when (resolve 'add-tap)", " (remove-tap enqueue-tap!)", " (add-tap enqueue-tap!))", "(defn dump-tap-queue! []", " (reverse (first (reset-vals! tap-queue! (list)))))", "(defmethod clojure.test/report :fail [m]", " (clojure.test/with-test-out", " (clojure.test/inc-report-counter :fail)", " (println \"\nFAIL in\" (clojure.test/testing-vars-str m))", " (when (seq clojure.test/*testing-contexts*) (println (clojure.test/testing-contexts-str)))", " (when-let [message (:message m)] (println message))", " (if (and (seq? (:actual m))", " (= #'clojure.core/not (resolve (first (:actual m))))", " (seq? (second (:actual m)))", " (= #'clojure.core/= (resolve (first (second (:actual m)))))", " (= 3 (count (second (:actual m)))))", " (let [[missing extra _] (clojure.data/diff (second (second (:actual m))) (last (second (:actual m))))", " missing-str (with-out-str (pp/pprint missing))", " missing-lines (clojure.string/split-lines missing-str)", " extra-str (with-out-str (pp/pprint extra))", " extra-lines (clojure.string/split-lines extra-str)]", " (when (some? missing) (doseq [m missing-lines] (println \"-\" m)))", " (when (some? extra) (doseq [e extra-lines] (println \"+\" e))))", " (do", " (print \"expected:\" (with-out-str (pp/pprint (:expected m))))", " (print \" actual:\" (with-out-str (pp/pprint (:actual m))))))))", "(in-ns initial-ns)"})}, _39_()) + return send({op = "eval", code = str.join("\n", {"(create-ns 'conjure.internal)", "(intern 'conjure.internal 'initial-ns (symbol (str *ns*)))", "(ns conjure.internal", " (:require [clojure.pprint :as pp] [clojure.test] [clojure.data] [clojure.string]))", "(defn pprint [val w opts]", " (apply pp/write val", " (mapcat identity (assoc opts :stream w))))", "(defn bounded-conj [queue x limit]", " (->> x (conj queue) (take limit)))", ("(def tap-queue-size " .. queue_size .. ")"), "(defonce tap-queue! (atom (list)))", "(defonce enqueue-tap!", " (fn [x] (swap! tap-queue! bounded-conj x tap-queue-size)))", "(when (resolve 'add-tap)", " (remove-tap enqueue-tap!)", " (add-tap enqueue-tap!))", "(defn dump-tap-queue! []", " (reverse (first (reset-vals! tap-queue! (list)))))", "(defmethod clojure.test/report :fail [m]", " (clojure.test/with-test-out", " (clojure.test/inc-report-counter :fail)", " (println \"\nFAIL in\" (clojure.test/testing-vars-str m))", " (when (seq clojure.test/*testing-contexts*) (println (clojure.test/testing-contexts-str)))", " (when-let [message (:message m)] (println message))", " (print \"expected:\" (with-out-str (pp/pprint (:expected m))))", " (print \" actual:\" (with-out-str (pp/pprint (:actual m))))", " (when (and (seq? (:actual m))", " (= #'clojure.core/not (resolve (first (:actual m))))", " (seq? (second (:actual m)))", " (= #'clojure.core/= (resolve (first (second (:actual m)))))", " (= 3 (count (second (:actual m)))))", " (let [[missing extra _] (clojure.data/diff (second (second (:actual m))) (last (second (:actual m))))", " missing-str (with-out-str (pp/pprint missing))", " missing-lines (clojure.string/split-lines missing-str)", " extra-str (with-out-str (pp/pprint extra))", " extra-lines (clojure.string/split-lines extra-str)]", " (when (some? missing) (doseq [m missing-lines] (println \"- \" m)))", " (when (some? extra) (doseq [e extra-lines] (println \"+ \" e)))))))", "(in-ns initial-ns)"})}, _39_()) end _2amodule_locals_2a["eval-preamble"] = eval_preamble local function capture_describe()