structural-typing.assist.testutil
Useful shorthand for tests of new code, like custom predicates.
both-names
(both-names pred)
Generate the readable names of both the original and lifted predicates. Provoke a test failure if they’re not the same. Otherwise, return the value for further checking.
(both-names (member [1 2 3])) => "(member [1 2 3])"
check-all-for-explanations
(check-all-for-explanations & args)
Same as check-for-explanations but uses all-built-like
.
check-for-explanations
(check-for-explanations & args)
Run built-like against the arguments. The result is supposed to be error messages and a nil
return value. If not, provoke an error. If so, return the explanations.
(check-for-explanations :Figure {:points 3}) => (just (err:missing :color))
err:shouldbe
(err:shouldbe path should-be is)
(err:shouldbe path should-be is omit-quotes)
Produces the same error messsage produced when a predicate not altered by explain-with fails.
explain-lifted
(explain-lifted pred exval)
lift-and-run the predicate against the expred, then generate a list of explanations. Note that it’s safe to use this on an already-lifted predicate.
exval
(exval leaf-value path whole-value)
(exval leaf-value path)
(exval leaf-value)
Generate an “extended value”. Omitted values are replaced with useful defaults.
(exval 5 :x) => (exval 5 :x {:x 5})
(exval 5) => (exval 5 :x {:x 5})
oopsie-for
(oopsie-for leaf-value & {:as kvs})
Create a function that takes an oopsie and checks it. Examples:
... => (oopsie-for 5) ; :leaf-value must be 5, other keys irrelevant
... => (oopsie-for 5 :whole-value {:x 5}) ; two keys relevant, others not.