summaryrefslogtreecommitdiff
path: root/test/fn.fnl
blob: b9876ca70b5f50ef3d921bc187f74b3abd0efc51 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
(import-macros {: assert-eq : assert-ne : assert* : testing : deftest} :test.test)
(import-macros {: meta} :macros.core)
(local {: eq} (require :core)) ;; required for testing

(import-macros {: fn* : fn&} :macros.fn)

(deftest fn*
  (testing fn*-meta
    (fn* f
      "docstring"
      [x] x)
    (assert-eq (meta f) {:fnl/docstring "docstring"
                         :fnl/arglist ["x"]})

    (fn* f
      "docstring"
      ([x] x))
    (assert-eq (meta f) {:fnl/docstring "docstring"
                         :fnl/arglist ["x"]})

    (fn* f
      "docstring"
      ([x] x)
      ([x y] (+ x y)))
    (assert-eq (meta f) {:fnl/docstring "docstring"
                         :fnl/arglist ["\n  [x]"
                                       "\n  [x y]"]})

    (fn* f
      "docstring"
      ([x] x)
      ([x y] (+ x y))
      ([x y & z] (+ x y)))
    (assert-eq (meta f) {:fnl/docstring "docstring"
                         :fnl/arglist ["\n  [x]"
                                       "\n  [x y]"
                                       "\n  [x y & z]"]})))

(deftest fn&
  (testing fn&-meta
    (fn& f "docstring" [x] x)
    (assert-eq (meta f) {:fnl/docstring "docstring"
                         ;; :fnl/arglist ["x"] ;; TODO: why this works only in REPL?
                         })

    (fn& f "docstring" [...] [...])
    (assert-eq (meta f) {:fnl/docstring "docstring"
                         ;; :fnl/arglist ["..."] ;; TODO: same as above
                         })))