From 7e19d80130b78c8199a63e925f15d20ebbef437b Mon Sep 17 00:00:00 2001
From: Daniel Barlow <dan@telent.net>
Date: Sat, 20 Apr 2024 14:04:32 +0100
Subject: [PATCH] anoia: add assert macro module

contains expect and expect=
---
 pkgs/anoia/Makefile    |  9 +++++++++
 pkgs/anoia/assert.fnl  | 21 +++++++++++++++++++++
 pkgs/anoia/default.nix |  7 ++-----
 pkgs/anoia/test.fnl    |  9 +++++----
 4 files changed, 37 insertions(+), 9 deletions(-)
 create mode 100644 pkgs/anoia/Makefile
 create mode 100644 pkgs/anoia/assert.fnl

diff --git a/pkgs/anoia/Makefile b/pkgs/anoia/Makefile
new file mode 100644
index 0000000..800808e
--- /dev/null
+++ b/pkgs/anoia/Makefile
@@ -0,0 +1,9 @@
+
+default: fs.lua init.lua nl.lua svc.lua
+
+test:
+	ln -s . anoia
+	fennel test.fnl
+
+%.lua: %.fnl
+	fennel --compile $< > $@
diff --git a/pkgs/anoia/assert.fnl b/pkgs/anoia/assert.fnl
new file mode 100644
index 0000000..f3dae6d
--- /dev/null
+++ b/pkgs/anoia/assert.fnl
@@ -0,0 +1,21 @@
+;; these are macros; this module should be imported
+;; using import-macros
+
+;; e.g. (import-macros { : expect= } :anoia.assert)
+
+
+(fn expect [assertion]
+  (let [msg (.. "expectation failed: " (view assertion))]
+    `(when (not ,assertion)
+       (assert false ,msg))))
+
+(fn expect= [actual expected]
+  `(let [view# (. (require :fennel) :view)
+         ve# (view# ,expected)
+         va# (view# ,actual)]
+     (when (not (= ve# va#))
+       (assert false
+               (.. "\nexpected " ve# "\ngot " va#)
+               ))))
+
+{ : expect : expect= }
diff --git a/pkgs/anoia/default.nix b/pkgs/anoia/default.nix
index a3a49a2..a0c3f88 100644
--- a/pkgs/anoia/default.nix
+++ b/pkgs/anoia/default.nix
@@ -10,11 +10,8 @@ in stdenv.mkDerivation {
   src = ./.;
   nativeBuildInputs = [ fennel ];
   buildInputs = with lua.pkgs; [ luafilesystem ];
-  buildPhase = ''
-    for f in *.fnl ; do
-      fennel --compile $f > `basename $f .fnl`.lua
-    done
-  '';
+  doCheck = true;
+  checkPhase = "make test";
   installPhase = ''
     mkdir -p "$out/share/lua/${lua.luaversion}/${pname}"
     cp *.lua "$out/share/lua/${lua.luaversion}/${pname}"
diff --git a/pkgs/anoia/test.fnl b/pkgs/anoia/test.fnl
index b940758..a1878ff 100644
--- a/pkgs/anoia/test.fnl
+++ b/pkgs/anoia/test.fnl
@@ -1,9 +1,10 @@
 (local { : hash : base64url } (require :anoia))
+(import-macros { : expect= } :anoia.assert)
 
-(assert (= (hash "") 5381))
+(expect= (hash "") 5381)
 
 ;; these examples from https://theartincode.stanis.me/008-djb2/
-(assert (= (hash "Hello") 210676686969))
-(assert (= (hash "Hello!") 6952330670010))
+(expect= (hash "Hello") 210676686969)
+(expect= (hash "Hello!") 6952330670010)
 
-(assert (= (base64url "hello world") "aGVsbG8gd29ybGQ"))
+(expect= (base64url "hello world") "aGVsbG8gd29ybGQ")