diff --git a/deps.edn b/deps.edn index 0323c842..17285e6f 100644 --- a/deps.edn +++ b/deps.edn @@ -3,7 +3,8 @@ :deps {org.clojure/clojure {:mvn/version "1.11.3"} org.clojure/tools.logging {:mvn/version "1.1.0"} - lambdaisland/kaocha {:mvn/version "1.66.1034"}} + lambdaisland/kaocha {:mvn/version "1.66.1034"} + nubank/matcher-combinators {:mvn/version "3.9.1"}} :aliases {:nrepl diff --git a/dev/clojure/src/dev/sandbox.cljc b/dev/clojure/src/dev/sandbox.cljc index 870a0785..cc4e878c 100644 --- a/dev/clojure/src/dev/sandbox.cljc +++ b/dev/clojure/src/dev/sandbox.cljc @@ -90,6 +90,13 @@ (t/testing "bar" (t/is (= 10 10)))) +(comment + (require '[matcher-combinators.test]) + + (t/deftest test-matching-with-explicit-matchers + (t/is (match? [{:a 1} {:b 2}] + [{:a 1 :c 2}])))) + (let [some-local-thing 10 some-other-local-thing 20] some-local-thing) diff --git a/fnl/conjure/client/clojure/nrepl/server.fnl b/fnl/conjure/client/clojure/nrepl/server.fnl index 917d49a1..b164e5f1 100644 --- a/fnl/conjure/client/clojure/nrepl/server.fnl +++ b/fnl/conjure/client/clojure/nrepl/server.fnl @@ -255,8 +255,8 @@ " (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))))" + " (print \"expected:\" (with-out-str (prn (:expected m))))" + " (print \" actual:\" (with-out-str (prn (:actual m))))" " (when (and (seq? (:actual m))" " (= #'clojure.core/not (resolve (first (:actual m))))" " (seq? (second (:actual m)))" diff --git a/lua/conjure/client/clojure/nrepl/server.lua b/lua/conjure/client/clojure/nrepl/server.lua index 911e2d7f..fbf6f139 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))", " (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_()) + 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 (prn (:expected m))))", " (print \" actual:\" (with-out-str (prn (: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()