summaryrefslogtreecommitdiff
path: root/tests/fn.fnl
diff options
context:
space:
mode:
Diffstat (limited to 'tests/fn.fnl')
-rw-r--r--tests/fn.fnl139
1 files changed, 64 insertions, 75 deletions
diff --git a/tests/fn.fnl b/tests/fn.fnl
index 2cbe94b..83c45f5 100644
--- a/tests/fn.fnl
+++ b/tests/fn.fnl
@@ -1,84 +1,73 @@
(require-macros :fennel-test)
(require-macros :init-macros)
+(local (meta? fennel) (pcall require :fennel))
-(deftest test-fn*
- (testing "fn* meta"
- (fn* f
- "single arity"
- [x] x)
- (assert-eq (meta f)
- {:fnl/docstring "single arity"
- :fnl/arglist ["[x]"]})
- (fn* f
- "single empty arity"
- [])
- (assert-eq (meta f)
- {:fnl/docstring "single empty arity"
- :fnl/arglist ["[]"]})
- (fn* f
- "multiarity with single entry"
- ([x] x))
- (assert-eq (meta f)
- {:fnl/docstring "multiarity with single entry"
- :fnl/arglist ["[x]"]})
- (fn* f
- "multiarity"
- ([x] x)
- ([x y] (+ x y)))
- (assert-eq (meta f)
- {:fnl/docstring "multiarity"
- :fnl/arglist ["([x])"
- "([x y])"]})
- (fn* f
- "multiarity with one empty arity"
- ([])
- ([x y] (+ x y)))
- (assert-eq (meta f)
- {:fnl/docstring "multiarity with one empty arity"
- :fnl/arglist ["([])"
- "([x y])"]})
- (fn* f
- "multiarity with two or more arity"
- ([x] x)
- ([x y] (+ x y))
- ([x y & z] (+ x y)))
- (assert-eq (meta f)
- {:fnl/docstring "multiarity with two or more arity"
- :fnl/arglist ["([x])"
- "([x y])"
- "([x y & z])"]}))
-
- (testing "fn* doc destructuring"
- (fn* f [[a b c]])
- (assert-eq (meta f)
- {:fnl/arglist ["[[a b c]]"]})
- (fn* f ([[a b c]]))
- (assert-eq (meta f)
- {:fnl/arglist ["[[a b c]]"]})
- (fn* f ([[a b c]]) ([{: a}]) ([[{:a [a b c]}]]))
- (assert-eq (meta f)
- {:fnl/arglist ["([[a b c]])"
- "([{:a a}])"
- "([[{:a [a b c]}]])"]}))
+(fn meta [x]
+ {:fnl/docstring (fennel.metadata:get x :fnl/docstring)
+ :fnl/arglist (fennel.metadata:get x :fnl/arglist)})
- (testing "fn* methods"
- (local ns {:a 1 :b 2})
-
- (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)))
+(deftest test-fn*
+ (when meta?
+ (testing "fn* meta"
+ (defn f
+ "single arity"
+ [x] x)
+ (assert-eq {:fnl/docstring "single arity"
+ :fnl/arglist ["[x]"]}
+ (meta f))
+ (defn f
+ "single empty arity"
+ [])
+ (assert-eq {:fnl/docstring "single empty arity"
+ :fnl/arglist ["[]"]}
+ (meta f))
+ (defn f
+ "multiarity with single entry"
+ ([x] x))
+ (assert-eq {:fnl/docstring "multiarity with single entry"
+ :fnl/arglist ["([x])"]}
+ (meta f))
+ (defn f
+ "multiarity"
+ ([x] x)
+ ([x y] (+ x y)))
+ (assert-eq {:fnl/docstring "multiarity"
+ :fnl/arglist ["([x])"
+ "([x y])"]}
+ (meta f))
+ (defn f
+ "multiarity with one empty arity"
+ ([])
+ ([x y] (+ x y)))
+ (assert-eq {:fnl/docstring "multiarity with one empty arity"
+ :fnl/arglist ["([])"
+ "([x y])"]}
+ (meta f))
+ (defn f
+ "multiarity with two or more arity"
+ ([x] x)
+ ([x y] (+ x y))
+ ([x y & z] (+ x y)))
+ (assert-eq {:fnl/docstring "multiarity with two or more arity"
+ :fnl/arglist ["([x])"
+ "([x y])"
+ "([x y & z])"]}
+ (meta f))))
- (fn* ns:bar
- ([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))))
+ (testing "defn doc destructuring"
+ (defn f [[a b c]])
+ (assert-eq {:fnl/arglist ["[[a b c]]"]}
+ (meta f))
+ (defn f ([[a b c]]))
+ (assert-eq {:fnl/arglist ["([[a b c]])"]}
+ (meta f))
+ (defn f ([[a b c]]) ([{: a} b]) ([[{:a [a b c]}] d e]))
+ (assert-eq {:fnl/arglist ["([[a b c]])"
+ "([{:a a} b])"
+ "([[{:a [a b c]}] d e])"]}
+ (meta f)))
- (testing "fn* anonymous calls"
+ (testing "defn anonymous calls"
(assert-eq ((fn* [])) (values))
(assert-eq ((fn* [] nil)) nil)
(assert-eq ((fn* [x] x) 5) 5)