1# Helper code for running tests 2 3(var num-tests-passed 0) 4(var num-tests-run 0) 5(var suite-num 0) 6(var start-time 0) 7 8(def is-verbose (os/getenv "VERBOSE")) 9 10(defn assert 11 "Override's the default assert with some nice error handling." 12 [x &opt e] 13 (default e "assert error") 14 (++ num-tests-run) 15 (when x (++ num-tests-passed)) 16 (def str (string e)) 17 (if x 18 (when is-verbose (eprintf "\e[32m✔\e[0m %s: %v" (describe e) x)) 19 (eprintf "\n\e[31m✘\e[0m %s: %v" (describe e) x)) 20 x) 21 22(defmacro assert-error 23 [msg & forms] 24 (def errsym (keyword (gensym))) 25 ~(assert (= ,errsym (try (do ,;forms) ([_] ,errsym))) ,msg)) 26 27(defmacro assert-no-error 28 [msg & forms] 29 (def errsym (keyword (gensym))) 30 ~(assert (not= ,errsym (try (do ,;forms) ([_] ,errsym))) ,msg)) 31 32(defn start-suite [x] 33 (set suite-num x) 34 (set start-time (os/clock)) 35 (eprint "Starting suite " x "...")) 36 37(defn end-suite [] 38 (def delta (- (os/clock) start-time)) 39 (eprinf "Finished suite %d in %.3f seconds - " suite-num delta) 40 (eprint num-tests-passed " of " num-tests-run " tests passed.") 41 (if (not= num-tests-passed num-tests-run) (os/exit 1))) 42