From f3313b3b51c795411a75ec93714110ad1808a8ae Mon Sep 17 00:00:00 2001 From: Andrey Listopadov Date: Mon, 15 Feb 2021 21:15:59 +0300 Subject: fix(macros): correct fn* method definition behavior fn* now properly defines `self` as its first argument automatically. --- tests/fn.fnl | 16 ++++++++++++---- tests/test.fnl | 9 +++++---- 2 files changed, 17 insertions(+), 8 deletions(-) (limited to 'tests') diff --git a/tests/fn.fnl b/tests/fn.fnl index 40dda8b..5697aab 100644 --- a/tests/fn.fnl +++ b/tests/fn.fnl @@ -61,16 +61,24 @@ (testing "fn* methods" (local ns {:a 1 :b 2}) - (fn* ns:foo [self] + (fn* ns:foo [] (+ self.a self.b)) (assert-eq (ns:foo) 3) (assert-not (pcall #(ns:foo 1))) (assert-not (pcall #(ns:foo 1 2))) (fn* ns:bar - ([self x] (+ self.a x)) - ([self x y] (+ self.b x y))) + ([x] (+ self.a x)) + ([x y] (+ self.b x y))) (assert-eq (ns:bar -1) 0) (assert-eq (ns:bar 10 20) 32) (assert-not (pcall #(ns:bar))) - (assert-not (pcall #(ns:bar 1 2 3))))) + (assert-not (pcall #(ns:bar 1 2 3)))) + + (testing "fn* anonymous calls" + (assert-eq ((fn* [])) (values)) + (assert-eq ((fn* [] nil)) nil) + (assert-eq ((fn* [x] x) 5) 5) + (assert-eq ((fn* [a b c d e] [e d c b a]) 1 2 3 4 5) [5 4 3 2 1]) + (assert-eq ((fn* ([x] x) ([x y] [y x])) 10) 10) + (assert-eq ((fn* ([x] x) ([x y] [y x])) 10 20) [20 10]))) diff --git a/tests/test.fnl b/tests/test.fnl index 05da7be..43247d9 100644 --- a/tests/test.fnl +++ b/tests/test.fnl @@ -60,7 +60,7 @@ Deep compare values: right# ,expr2 eq# ,(eq-fn) fennel# (require :fennel)] - (assert (eq# left# right#) + (assert (pick-values 1 (pcall #(do eq# left# right#))) (or ,msg (.. "assertion failed for expression: (= " ,(view expr1 {:one-line? true}) " " ,(view expr2 {:one-line? true}) ") Left: " (fennel#.view left# {:one-line? true}) " @@ -75,7 +75,7 @@ Deep compare values: right# ,expr2 eq# ,(eq-fn) fennel# (require :fennel)] - (assert (not (eq# left# right#)) + (assert (pick-values 1 (pcall #(not (eq# left# right#)))) (or ,msg (.. "assertion failed for expression: (not= " ,(view expr1 {:one-line? true}) " " ,(view expr2 {:one-line? true}) ") Left: " (fennel#.view left# {:one-line? true}) " @@ -90,14 +90,15 @@ Deep compare values: ;; (assert-is (= 1 2 3)) ;; => runtime error: assertion failed for (= 1 2 3) ```" - `(assert ,expr + `(assert (pick-values 1 (pcall #(do ,expr))) (.. "assertion failed: " (or ,msg ,(view expr {:one-line? true}))))) + (fn test.assert-not [expr msg] "Assert `expr` for not truth. Generates more verbose message if `msg` is not set. Works the same as [`assert-is`](#assert-is)." - `(assert (not ,expr) + `(assert (pick-values 1 (pcall #(not ,expr))) (.. "assertion failed: " (or ,msg ,(view expr {:one-line? true}))))) -- cgit v1.2.3