Skip to content

Commit 20b877f

Browse files
puredangerrichhickey
authored andcommitted
update test for explain-data
Signed-off-by: Rich Hickey <richhickey@gmail.com>
1 parent 75da046 commit 20b877f

File tree

1 file changed

+56
-42
lines changed

1 file changed

+56
-42
lines changed

test/clojure/test_clojure/spec.clj

+56-42
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,7 @@
2323
m1)
2424
(= m1 m2)))
2525

26-
(defn- ne [probs]
27-
(let [[path prob] (first probs)]
28-
[(assoc prob :path path)]))
29-
30-
#_(deftest conform-explain
26+
(deftest conform-explain
3127
(let [a (s/and #(> % 5) #(< % 10))
3228
o (s/or :s string? :k keyword?)
3329
c (s/cat :a string? :b keyword?)
@@ -37,7 +33,11 @@
3733
opt (s/? keyword?)
3834
andre (s/& (s/* keyword?) even-count?)
3935
m (s/map-of keyword? string?)
40-
coll (s/coll-of keyword? [])
36+
mkeys (s/map-of (s/and keyword? (s/conformer name)) ::s/any)
37+
mkeys2 (s/map-of (s/and keyword? (s/conformer name)) ::s/any :conform-keys true)
38+
s (s/coll-of (s/spec (s/cat :tag keyword? :val ::s/any)) :kind ())
39+
v (s/coll-of keyword? :kind [])
40+
coll (s/coll-of keyword?)
4141
lrange (s/int-in 7 42)
4242
drange (s/double-in :infinite? false :NaN? false :min 3.1 :max 3.2)
4343
irange (s/inst-in #inst "1939" #inst "1946")
@@ -46,90 +46,104 @@
4646
(let [co (result-or-ex (s/conform spec x))
4747
e (result-or-ex (::s/problems (s/explain-data spec x)))]
4848
(when (not= conformed co) (println "conform fail\n\texpect=" conformed "\n\tactual=" co))
49-
(when (not (submap? ed e)) (println "explain fail\n\texpect=" ed "\n\tactual=" e))
50-
(and (= conformed co) (submap? ed e)))
49+
(when (not (every? true? (map submap? ed e)))
50+
(println "explain failures\n\texpect=" ed "\n\tactual failures=" e "\n\tsubmap?=" (map submap? ed e)))
51+
(and (= conformed co) (every? true? (map submap? ed e))))
5152

5253
lrange 7 7 nil
5354
lrange 8 8 nil
54-
lrange 42 ::s/invalid [{:path [] :pred '(int-in-range? 7 42 %), :val 42, :via [], :in []}]
55+
lrange 42 ::s/invalid [{:pred '(int-in-range? 7 42 %), :val 42}]
5556

56-
irange #inst "1938" ::s/invalid [{:path [] :pred '(inst-in-range? #inst "1939-01-01T00:00:00.000-00:00" #inst "1946-01-01T00:00:00.000-00:00" %), :val #inst "1938", :via [], :in []}]
57+
irange #inst "1938" ::s/invalid [{:pred '(inst-in-range? #inst "1939-01-01T00:00:00.000-00:00" #inst "1946-01-01T00:00:00.000-00:00" %), :val #inst "1938"}]
5758
irange #inst "1942" #inst "1942" nil
58-
irange #inst "1946" ::s/invalid [{:path [] :pred '(inst-in-range? #inst "1939-01-01T00:00:00.000-00:00" #inst "1946-01-01T00:00:00.000-00:00" %), :val #inst "1946", :via [], :in []}]
59+
irange #inst "1946" ::s/invalid [{:pred '(inst-in-range? #inst "1939-01-01T00:00:00.000-00:00" #inst "1946-01-01T00:00:00.000-00:00" %), :val #inst "1946"}]
5960

60-
drange 3.0 ::s/invalid [{:path [] :pred '(<= 3.1 %), :val 3.0, :via [], :in []}]
61+
drange 3.0 ::s/invalid [{:pred '(<= 3.1 %), :val 3.0}]
6162
drange 3.1 3.1 nil
6263
drange 3.2 3.2 nil
63-
drange Double/POSITIVE_INFINITY ::s/invalid [ {:path [] :pred '(not (isInfinite %)), :val Double/POSITIVE_INFINITY, :via [], :in []}]
64+
drange Double/POSITIVE_INFINITY ::s/invalid [{:pred '(not (isInfinite %)), :val Double/POSITIVE_INFINITY}]
6465
;; can't use equality-based test for Double/NaN
65-
;; drange Double/NaN ::s/invalid {[] {:pred '(not (isNaN %)), :val Double/NaN, :via [], :in []}}
66+
;; drange Double/NaN ::s/invalid {[] {:pred '(not (isNaN %)), :val Double/NaN}}
6667

6768
keyword? :k :k nil
68-
keyword? nil ::s/invalid (ne {[] {:pred ::s/unknown :val nil :via []}})
69-
keyword? "abc" ::s/invalid (ne {[] {:pred ::s/unknown :val "abc" :via []}})
69+
keyword? nil ::s/invalid [{:pred ::s/unknown :val nil}]
70+
keyword? "abc" ::s/invalid [{:pred ::s/unknown :val "abc"}]
7071

7172
a 6 6 nil
72-
a 3 ::s/invalid (ne '{[] {:pred (> % 5), :val 3 :via []}})
73-
a 20 ::s/invalid (ne '{[] {:pred (< % 10), :val 20 :via []}})
73+
a 3 ::s/invalid '[{:pred (> % 5), :val 3}]
74+
a 20 ::s/invalid '[{:pred (< % 10), :val 20}]
7475
a nil "java.lang.NullPointerException" "java.lang.NullPointerException"
7576
a :k "java.lang.ClassCastException" "java.lang.ClassCastException"
7677

7778
o "a" [:s "a"] nil
7879
o :a [:k :a] nil
79-
o 'a ::s/invalid (ne '{[:s] {:pred string?, :val a :via []}, [:k] {:pred keyword?, :val a :via []}})
80+
o 'a ::s/invalid '[{:pred string?, :val a, :path [:s]} {:pred keyword?, :val a :path [:k]}]
8081

81-
c nil ::s/invalid (ne '{[:a] {:reason "Insufficient input", :pred string?, :val (), :via []}})
82-
c [] ::s/invalid (ne '{[:a] {:reason "Insufficient input", :pred string?, :val (), :via []}})
83-
c [:a] ::s/invalid (ne '{[:a] {:pred string?, :val :a, :via []}})
84-
c ["a"] ::s/invalid (ne '{[:b] {:reason "Insufficient input", :pred keyword?, :val (), :via []}})
82+
c nil ::s/invalid '[{:reason "Insufficient input", :pred string?, :val (), :path [:a]}]
83+
c [] ::s/invalid '[{:reason "Insufficient input", :pred string?, :val (), :path [:a]}]
84+
c [:a] ::s/invalid '[{:pred string?, :val :a, :path [:a], :in [0]}]
85+
c ["a"] ::s/invalid '[{:reason "Insufficient input", :pred keyword?, :val (), :path [:b]}]
8586
c ["s" :k] '{:a "s" :b :k} nil
86-
c ["s" :k 5] ::s/invalid (ne '{[] {:reason "Extra input", :pred (cat :a string? :b keyword?), :val (5), :via []}})
87+
c ["s" :k 5] ::s/invalid '[{:reason "Extra input", :pred (cat :a string? :b keyword?), :val (5)}]
8788
(s/cat) nil {} nil
88-
(s/cat) [5] ::s/invalid (ne '{[] {:reason "Extra input", :pred (cat), :val (5), :via [], :in [0]}})
89+
(s/cat) [5] ::s/invalid '[{:reason "Extra input", :pred (cat), :val (5), :in [0]}]
8990

90-
either nil ::s/invalid (ne '{[] {:reason "Insufficient input", :pred (alt :a string? :b keyword?), :val () :via []}})
91-
either [] ::s/invalid (ne '{[] {:reason "Insufficient input", :pred (alt :a string? :b keyword?), :val () :via []}})
91+
either nil ::s/invalid '[{:reason "Insufficient input", :pred (alt :a string? :b keyword?), :val () :via []}]
92+
either [] ::s/invalid '[{:reason "Insufficient input", :pred (alt :a string? :b keyword?), :val () :via []}]
9293
either [:k] [:b :k] nil
9394
either ["s"] [:a "s"] nil
94-
either [:b "s"] ::s/invalid (ne '{[] {:reason "Extra input", :pred (alt :a string? :b keyword?), :val ("s") :via []}})
95+
either [:b "s"] ::s/invalid '[{:reason "Extra input", :pred (alt :a string? :b keyword?), :val ("s") :via []}]
9596

9697
star nil [] nil
9798
star [] [] nil
9899
star [:k] [:k] nil
99100
star [:k1 :k2] [:k1 :k2] nil
100-
star [:k1 :k2 "x"] ::s/invalid (ne '{[] {:pred keyword?, :val "x" :via []}})
101-
star ["a"] ::s/invalid (ne {[] '{:pred keyword?, :val "a" :via []}})
101+
star [:k1 :k2 "x"] ::s/invalid '[{:pred keyword?, :val "x" :via []}]
102+
star ["a"] ::s/invalid '[{:pred keyword?, :val "a" :via []}]
102103

103-
plus nil ::s/invalid (ne '{[] {:reason "Insufficient input", :pred keyword?, :val () :via []}})
104-
plus [] ::s/invalid (ne '{[] {:reason "Insufficient input", :pred keyword?, :val () :via []}})
104+
plus nil ::s/invalid '[{:reason "Insufficient input", :pred keyword?, :val () :via []}]
105+
plus [] ::s/invalid '[{:reason "Insufficient input", :pred keyword?, :val () :via []}]
105106
plus [:k] [:k] nil
106107
plus [:k1 :k2] [:k1 :k2] nil
107-
plus [:k1 :k2 "x"] ::s/invalid (ne '{[] {:pred keyword?, :val "x", :via [], :in [2]}})
108-
plus ["a"] ::s/invalid (ne '{[] {:pred keyword?, :val "a" :via []}})
108+
plus [:k1 :k2 "x"] ::s/invalid '[{:pred keyword?, :val "x", :in [2]}]
109+
plus ["a"] ::s/invalid '[{:pred keyword?, :val "a" :via []}]
109110

110111
opt nil nil nil
111112
opt [] nil nil
112-
opt :k ::s/invalid (ne '{[] {:pred (? keyword?), :val :k, :via []}})
113+
opt :k ::s/invalid '[{:pred (? keyword?), :val :k}]
113114
opt [:k] :k nil
114-
opt [:k1 :k2] ::s/invalid (ne '{[] {:reason "Extra input", :pred (? keyword?), :val (:k2), :via []}})
115-
opt [:k1 :k2 "x"] ::s/invalid (ne '{[] {:reason "Extra input", :pred (? keyword?), :val (:k2 "x"), :via []}})
116-
opt ["a"] ::s/invalid (ne '{[] {:pred keyword?, :val "a", :via []}})
115+
opt [:k1 :k2] ::s/invalid '[{:reason "Extra input", :pred (? keyword?), :val (:k2)}]
116+
opt [:k1 :k2 "x"] ::s/invalid '[{:reason "Extra input", :pred (? keyword?), :val (:k2 "x")}]
117+
opt ["a"] ::s/invalid '[{:pred keyword?, :val "a"}]
117118

118119
andre nil nil nil
119120
andre [] nil nil
120-
andre :k :clojure.spec/invalid (ne '{[] {:pred (& (* keyword?) even-count?), :val :k, :via []}})
121-
andre [:k] ::s/invalid (ne '{[] {:pred even-count?, :val [:k], :via []}})
121+
andre :k :clojure.spec/invalid '[{:pred (& (* keyword?) even-count?), :val :k}]
122+
andre [:k] ::s/invalid '[{:pred even-count?, :val [:k]}]
122123
andre [:j :k] [:j :k] nil
123124

124-
m nil ::s/invalid (ne '{[] {:pred map?, :val nil, :via []}})
125+
m nil ::s/invalid '[{:pred clojure.core/map?, :val nil}]
125126
m {} {} nil
126127
m {:a "b"} {:a "b"} nil
127128

129+
mkeys nil ::s/invalid '[{:pred clojure.core/map?, :val nil}]
130+
mkeys {} {} nil
131+
mkeys {:a 1 :b 2} {:a 1 :b 2} nil
132+
133+
mkeys2 nil ::s/invalid '[{:pred clojure.core/map?, :val nil}]
134+
mkeys2 {} {} nil
135+
mkeys2 {:a 1 :b 2} {"a" 1 "b" 2} nil
136+
137+
s '([:a 1] [:b "2"]) '({:tag :a :val 1} {:tag :b :val "2"}) nil
138+
139+
v [:a :b] [:a :b] nil
140+
v '(:a :b) ::s/invalid '[{:pred clojure.core/vector? :val (:a :b)}]
141+
128142
coll nil nil nil
129143
coll [] [] nil
130144
coll [:a] [:a] nil
131145
coll [:a :b] [:a :b] nil
132-
;;coll [:a "b"] ::s/invalid '{[] {:pred (coll-checker keyword?), :val [:a b], :via []}}
146+
;;coll [:a "b"] ::s/invalid '[{:pred (coll-checker keyword?), :val [:a b]}]
133147
)))
134148

135149
(comment

0 commit comments

Comments
 (0)