summaryrefslogtreecommitdiff
path: root/test/test.fnl
diff options
context:
space:
mode:
authorAndrey Orst <andreyorst@gmail.com>2020-11-05 21:37:47 +0300
committerAndrey Orst <andreyorst@gmail.com>2020-11-05 21:39:16 +0300
commit6b65999a1f565651fc48a076a7473b6e93f6357a (patch)
treed143581a580b06263522d105e0e01dfb0e4b9b9c /test/test.fnl
parent11617c42a4fb249c4f7199ca5eba3b93518ded0a (diff)
feature(testing): move tests to separate directory. Also add some tests
Diffstat (limited to 'test/test.fnl')
-rw-r--r--test/test.fnl51
1 files changed, 51 insertions, 0 deletions
diff --git a/test/test.fnl b/test/test.fnl
new file mode 100644
index 0000000..4b40832
--- /dev/null
+++ b/test/test.fnl
@@ -0,0 +1,51 @@
+(import-macros {: fn*} :macros.fn)
+;; requires `eq' from core.fnl to be available at runtime
+
+(fn* assert-eq
+ ([expr1 expr2]
+ (assert-eq expr1 expr2 nil))
+ ([expr1 expr2 msg]
+ `(let [left# ,expr1
+ right# ,expr2
+ (res# view#) (pcall require :fennelview)]
+ (assert (eq left# right#) (or ,msg (.. "equality assertion failed
+ Left: " ((if res# view# tostring) left#) "
+ Right: " ((if res# view# tostring) right#) "\n"))))))
+
+(fn* assert-ne
+ ([expr1 expr2]
+ (assert-ne expr1 expr2 nil))
+ ([expr1 expr2 msg]
+ `(let [left# ,expr1
+ right# ,expr2
+ (res# view#) (pcall require :fennelview)]
+ (assert (not (eq left# right#)) (or ,msg (.. "unequality assertion failed
+ Left: " ((if res# view# tostring) left#) "
+ Right: " ((if res# view# tostring) right#) "\n"))))))
+
+(fn* assert*
+ ([expr]
+ (assert* expr nil))
+ ([expr msg]
+ `(assert ,expr (.. "assertion failed for " (or ,msg ,(tostring expr))))))
+
+(fn* deftest [name docstring & tests]
+ "Simple way of grouping tests"
+ `(do
+ ,docstring
+ ,((or table.unpack _G.unpack) tests)))
+
+(fn* testing
+ "Define test function, print its name and run it."
+ [name & body]
+ (let [test-name (sym (.. (tostring name) "-test"))]
+ `(do (fn ,test-name []
+ ,((or table.unpack _G.unpack) body))
+ (io.stderr:write (.. "running: " ,(tostring test-name) "\n"))
+ (,test-name))))
+
+{: assert-eq
+ : assert-ne
+ : assert*
+ : deftest
+ : testing}