1
0
mirror of https://github.com/janet-lang/janet synced 2024-12-11 09:10:27 +00:00
janet/test/helper.janet

57 lines
1.7 KiB
Plaintext
Raw Normal View History

2018-03-26 01:25:33 +00:00
# Helper code for running tests
(var num-tests-passed 0)
(var num-tests-run 0)
2023-06-01 22:04:07 +00:00
(var suite-name 0)
(var start-time 0)
2018-03-26 01:25:33 +00:00
2021-11-06 16:01:21 +00:00
(def is-verbose (os/getenv "VERBOSE"))
2020-01-16 04:38:06 +00:00
(defn assert
"Override's the default assert with some nice error handling."
2020-04-03 20:23:29 +00:00
[x &opt e]
(default e "assert error")
(++ num-tests-run)
(when x (++ num-tests-passed))
2020-09-27 17:18:12 +00:00
(def str (string e))
(def frame (last (debug/stack (fiber/current))))
(def line-info (string/format "%s:%d"
(frame :source) (frame :source-line)))
(if x
(when is-verbose (eprintf "\e[32m✔\e[0m %s: %s: %v" line-info (describe e) x))
(do (eprintf "\e[31m✘\e[0m %s: %s: %v" line-info (describe e) x) (eflush)))
x)
2018-03-26 01:25:33 +00:00
(defmacro assert-error
[msg & forms]
(def errsym (keyword (gensym)))
~(assert (= ,errsym (try (do ,;forms) ([_] ,errsym))) ,msg))
(defn check-compile-error
[form]
(def result (compile form))
(assert (table? result) (string/format "expected compilation error for %j, but compiled without error" form)))
(defmacro assert-no-error
[msg & forms]
2023-10-08 22:34:50 +00:00
(def e (gensym))
(def f (gensym))
(if is-verbose
~(try (do ,;forms (,assert true ,msg)) ([,e ,f] (,assert false ,msg) (,debug/stacktrace ,f ,e "\e[31m✘\e[0m ")))
~(try (do ,;forms (,assert true ,msg)) ([_] (,assert false ,msg)))))
2023-06-01 22:04:07 +00:00
(defn start-suite [&opt x]
(default x (dyn :current-file))
(set suite-name
(cond
(number? x) (string x)
(string x)))
(set start-time (os/clock))
2023-06-01 22:04:07 +00:00
(eprint "Starting suite " suite-name "..."))
2018-03-26 01:25:33 +00:00
(defn end-suite []
(def delta (- (os/clock) start-time))
2023-06-01 22:04:07 +00:00
(eprinf "Finished suite %s in %.3f seconds - " suite-name delta)
2021-11-06 16:01:21 +00:00
(eprint num-tests-passed " of " num-tests-run " tests passed.")
(if (not= num-tests-passed num-tests-run) (os/exit 1)))