diff --git a/.gitignore b/.gitignore index 8dd4909..c018b66 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,5 @@ pom.xml pom.xml.asc # malli + clj-kondo: ignore malli-types .clj-kondo/metosin/malli-types-clj +.calva/ +.DS_STORE diff --git a/src/mb/hawk/assert_exprs/approximately_equal.clj b/src/mb/hawk/assert_exprs/approximately_equal.clj index e45c3cd..4ee13b4 100644 --- a/src/mb/hawk/assert_exprs/approximately_equal.clj +++ b/src/mb/hawk/assert_exprs/approximately_equal.clj @@ -107,11 +107,12 @@ (methodical/defmethod =?-diff [clojure.lang.IPersistentMap clojure.lang.IPersistentMap] [expected-map actual-map] - (not-empty (into {} (for [[k expected] expected-map - :let [actual (get actual-map k (symbol "nil #_\"key is not present.\"")) - diff (=?-diff expected actual)] - :when diff] - [k diff])))) + (not-empty (into {} (for [[expected-key expected-val] expected-map + :let [diff (if (contains? actual-map expected-key) + (=?-diff expected-val (get actual-map expected-key)) + (symbol "nil #_\"key is not present.\""))] + :when diff] + [expected-key diff])))) (deftype Exactly [expected]) diff --git a/test/mb/hawk/assert_exprs/approximately_equal_test.clj b/test/mb/hawk/assert_exprs/approximately_equal_test.clj index 3a1e62c..63b3579 100644 --- a/test/mb/hawk/assert_exprs/approximately_equal_test.clj +++ b/test/mb/hawk/assert_exprs/approximately_equal_test.clj @@ -35,6 +35,16 @@ (is (=? {:a 100} {:a 100, :b 200}))))) +(deftest ^:parallel missing-key-test + (testing "A key in expected and missing in actual should always fail" + (are [expected-val] (= {:k (symbol "nil #_\"key is not present.\"")} + (=?/=?-diff {:k expected-val} {})) + some? any? nil? 1) + (is (= {:a {:k (symbol "nil #_\"key is not present.\"")}} + (=?/=?-diff {:a {:k some?}} {:a {}}))) + (is (=? {:k some?} {:k 1})) + (is (nil? (=?/=?-diff {:k nil?} {:k nil}))))) + (deftest ^:parallel sequences-test (is (=? [] []))