diff options
| author | Andrey Orst <andreyorst@gmail.com> | 2021-01-26 09:30:07 +0300 |
|---|---|---|
| committer | Andrey Orst <andreyorst@gmail.com> | 2021-01-26 09:30:07 +0300 |
| commit | 35a47b437a9487fdde1f419340d7880be9008720 (patch) | |
| tree | 396babd947612988a7e32ca60be97a0014550905 /tests/fn.fnl | |
| parent | d58a0d80488648ee6daa9ca7df1a79cd657cf8bc (diff) | |
fix: allow defining methods with fn*
Diffstat (limited to 'tests/fn.fnl')
| -rw-r--r-- | tests/fn.fnl | 69 |
1 files changed, 49 insertions, 20 deletions
diff --git a/tests/fn.fnl b/tests/fn.fnl index 63a5802..40dda8b 100644 --- a/tests/fn.fnl +++ b/tests/fn.fnl @@ -6,42 +6,71 @@ (fn* f "docstring" [x] x) - (assert-eq (meta f) (when-meta {:fnl/docstring "docstring" - :fnl/arglist ["([x])"]})) + (assert-eq (meta f) + (when-meta {:fnl/docstring "docstring" + :fnl/arglist ["([x])"]})) (fn* f "docstring" []) - (assert-eq (meta f) (when-meta {:fnl/docstring "docstring" - :fnl/arglist ["([])"]})) - + (assert-eq (meta f) + (when-meta {:fnl/docstring "docstring" + :fnl/arglist ["([])"]})) (fn* f "docstring" ([x] x)) - (assert-eq (meta f) (when-meta {:fnl/docstring "docstring" - :fnl/arglist ["([x])"]})) - + (assert-eq (meta f) + (when-meta {:fnl/docstring "docstring" + :fnl/arglist ["([x])"]})) (fn* f "docstring" ([x] x) ([x y] (+ x y))) - (assert-eq (meta f) (when-meta {:fnl/docstring "docstring" - :fnl/arglist ["([x])" - "([x y])"]})) - + (assert-eq (meta f) + (when-meta {:fnl/docstring "docstring" + :fnl/arglist ["([x])" + "([x y])"]})) (fn* f "docstring" ([]) ([x y] (+ x y))) - (assert-eq (meta f) (when-meta {:fnl/docstring "docstring" - :fnl/arglist ["([])" - "([x y])"]})) - + (assert-eq (meta f) + (when-meta {:fnl/docstring "docstring" + :fnl/arglist ["([])" + "([x y])"]})) (fn* f "docstring" ([x] x) ([x y] (+ x y)) ([x y & z] (+ x y))) - (assert-eq (meta f) (when-meta {:fnl/docstring "docstring" - :fnl/arglist ["([x])" - "([x y])" - "([x y & z])"]})))) + (assert-eq (meta f) + (when-meta {:fnl/docstring "docstring" + :fnl/arglist ["([x])" + "([x y])" + "([x y & z])"]}))) + + (testing "fn* doc destructuring" + (fn* f [[a b c]]) + (assert-eq (meta f) + (when-meta {:fnl/arglist ["([[a b c]])"]})) + (fn* f ([[a b c]]) ([{: a}]) ([[{:a [a b c]}]])) + (assert-eq (meta f) + (when-meta {:fnl/arglist ["([[a b c]])" + "([{:a a}])" + "([[{:a [a b c]}]])"]}))) + + (testing "fn* methods" + (local ns {:a 1 :b 2}) + + (fn* ns:foo [self] + (+ 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))) + (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))))) |