|
13 | 13 | [clojure.test :as test :refer [deftest is]] |
14 | 14 | [clojure.spec.alpha :as s])) |
15 | 15 |
|
| 16 | +(deftest test-case |
| 17 | + (let [node (no-warn (analyze ns-env '(case x 1 :foo 2 :bar)))] |
| 18 | + (is (s/valid? ::a/node node)))) |
| 19 | + |
| 20 | +;; case-node |
| 21 | +;; case-test |
| 22 | +;; case-then |
| 23 | + |
16 | 24 | (deftest test-const |
17 | 25 | (is (s/valid? ::a/node (analyze ns-env 1))) |
18 | 26 | (is (s/valid? ::a/node (analyze ns-env 1.2))) |
|
31 | 39 | (is (= :set (:op node))) |
32 | 40 | (is (s/valid? ::a/node node)))) |
33 | 41 |
|
34 | | -(deftest test-if |
35 | | - (let [node (analyze ns-env '(if true true))] |
36 | | - (is (= :if (:op node))) |
37 | | - (is (s/valid? ::a/node node))) |
38 | | - (is (s/valid? ::a/node (analyze ns-env '(if true true false))))) |
39 | | - |
40 | | -(deftest test-do |
41 | | - (let [node (analyze ns-env '(do))] |
42 | | - (is (= :do (:op node))) |
43 | | - (is (s/valid? ::a/node node))) |
44 | | - (is (s/valid? ::a/node (analyze ns-env '(do 1)))) |
45 | | - (is (s/valid? ::a/node (analyze ns-env '(do 1 2 3))))) |
46 | | - |
47 | | -(deftest test-let |
48 | | - (let [node (analyze ns-env '(let []))] |
49 | | - (is (= :let (:op node))) |
50 | | - (is (s/valid? ::a/node node))) |
51 | | - (is (s/valid? ::a/node (analyze ns-env '(let [x 1])))) |
52 | | - (is (s/valid? ::a/node (analyze ns-env '(let [x 1] x))))) |
53 | | - |
54 | | -(deftest test-throw |
55 | | - (let [node (no-warn (analyze ns-env '(throw (js/Error. "foo"))))] |
56 | | - (is (= :throw (:op node))) |
57 | | - (is (s/valid? ::a/node node)))) |
58 | | - |
59 | 42 | (deftest test-def |
60 | 43 | (let [node (no-warn (analyze ns-env '(def x)))] |
61 | 44 | (is (= :def (:op node))) |
|
64 | 47 | (is (s/valid? ::a/node (analyze ns-env '(def x (fn []))))) |
65 | 48 | (is (s/valid? ::a/node (analyze ns-env '(def x (fn [y] y)))))) |
66 | 49 |
|
67 | | -(deftest test-fn |
68 | | - (let [node (no-warn (analyze ns-env '(fn [])))] |
69 | | - (is (= :fn (:op node))) |
70 | | - (is (s/valid? ::a/node node))) |
71 | | - (is (s/valid? ::a/node (analyze ns-env '(fn [] 1)))) |
72 | | - (is (s/valid? ::a/node (analyze ns-env '(fn [x])))) |
73 | | - (is (s/valid? ::a/node (analyze ns-env '(fn [x] 1))))) |
74 | | - |
75 | 50 | (deftest test-defn |
76 | 51 | (is (s/valid? ::a/node (analyze ns-env '(defn x [])))) |
77 | 52 | (is (s/valid? ::a/node (analyze ns-env '(defn x [] 1)))) |
78 | 53 | (is (s/valid? ::a/node (analyze ns-env '(defn x [y] y))))) |
79 | 54 |
|
80 | | -(deftest test-new |
81 | | - (let [node (no-warn (analyze ns-env '(new String)))] |
82 | | - (is (= :new (:op node))) |
83 | | - (is (s/valid? ::a/node node))) |
84 | | - (is (s/valid? ::a/node (analyze ns-env '(new js/String)))) |
85 | | - (is (s/valid? ::a/node (no-warn (analyze ns-env '(String.))))) |
86 | | - (is (s/valid? ::a/node (analyze ns-env '(js/String.))))) |
| 55 | +(deftest test-defrecord |
| 56 | + (let [node (no-warn (analyze ns-env '(defrecord A []))) |
| 57 | + body (:body node)] |
| 58 | + (is (= :defrecord (-> body :statements first :ret :op))) |
| 59 | + (is (s/valid? ::a/node node)))) |
87 | 60 |
|
88 | 61 | (deftest test-deftype |
89 | 62 | (let [node (no-warn (analyze ns-env '(deftype A [])))] |
90 | 63 | (is (= :deftype (-> node :statements first :op))) |
91 | 64 | (is (s/valid? ::a/node node)))) |
92 | 65 |
|
93 | | -(deftest test-defrecord |
94 | | - (let [node (no-warn (analyze ns-env '(defrecord A []))) |
95 | | - body (:body node)] |
96 | | - (is (= :defrecord (-> body :statements first :ret :op))) |
97 | | - (is (s/valid? ::a/node node)))) |
| 66 | +(deftest test-do |
| 67 | + (let [node (analyze ns-env '(do))] |
| 68 | + (is (= :do (:op node))) |
| 69 | + (is (s/valid? ::a/node node))) |
| 70 | + (is (s/valid? ::a/node (analyze ns-env '(do 1)))) |
| 71 | + (is (s/valid? ::a/node (analyze ns-env '(do 1 2 3))))) |
| 72 | + |
| 73 | +(deftest test-fn |
| 74 | + (let [node (no-warn (analyze ns-env '(fn [])))] |
| 75 | + (is (= :fn (:op node))) |
| 76 | + (is (s/valid? ::a/node node))) |
| 77 | + (is (s/valid? ::a/node (analyze ns-env '(fn [] 1)))) |
| 78 | + (is (s/valid? ::a/node (analyze ns-env '(fn [x])))) |
| 79 | + (is (s/valid? ::a/node (analyze ns-env '(fn [x] 1))))) |
| 80 | + |
| 81 | +;; fn-method |
98 | 82 |
|
99 | 83 | (deftest test-host-call |
100 | 84 | (let [node (analyze ns-env '(.substring "foo" 0 1))] |
|
112 | 96 | (is (= :host-field (:op node))) |
113 | 97 | (is (s/valid? ::a/node node)))) |
114 | 98 |
|
| 99 | +(deftest test-if |
| 100 | + (let [node (analyze ns-env '(if true true))] |
| 101 | + (is (= :if (:op node))) |
| 102 | + (is (s/valid? ::a/node node))) |
| 103 | + (is (s/valid? ::a/node (analyze ns-env '(if true true false))))) |
| 104 | + |
115 | 105 | (deftest test-invoke |
116 | 106 | (let [node (no-warn (analyze ns-env '(count "foo")))] |
117 | 107 | (is (= :invoke (:op node))) |
118 | 108 | (is (s/valid? ::a/node node)))) |
119 | 109 |
|
| 110 | +;; js-array |
| 111 | + |
| 112 | +;; js-object |
| 113 | +;(deftest test-js-object |
| 114 | +; ) |
| 115 | + |
| 116 | +;; js-var |
| 117 | + |
| 118 | +(deftest test-let |
| 119 | + (let [node (analyze ns-env '(let []))] |
| 120 | + (is (= :let (:op node))) |
| 121 | + (is (s/valid? ::a/node node))) |
| 122 | + (is (s/valid? ::a/node (analyze ns-env '(let [x 1])))) |
| 123 | + (is (s/valid? ::a/node (analyze ns-env '(let [x 1] x))))) |
| 124 | + |
| 125 | +;; letfn |
| 126 | + |
| 127 | +;; list |
| 128 | + |
| 129 | +;; local |
| 130 | + |
120 | 131 | (deftest test-loop |
121 | 132 | (let [node (analyze ns-env '(loop []))] |
122 | 133 | (is (= :loop (:op node))) |
|
133 | 144 | x))))] |
134 | 145 | (is (s/valid? ::a/node node)))) |
135 | 146 |
|
| 147 | +;; map |
| 148 | + |
| 149 | +(deftest test-new |
| 150 | + (let [node (no-warn (analyze ns-env '(new String)))] |
| 151 | + (is (= :new (:op node))) |
| 152 | + (is (s/valid? ::a/node node))) |
| 153 | + (is (s/valid? ::a/node (analyze ns-env '(new js/String)))) |
| 154 | + (is (s/valid? ::a/node (no-warn (analyze ns-env '(String.))))) |
| 155 | + (is (s/valid? ::a/node (analyze ns-env '(js/String.))))) |
| 156 | + |
| 157 | +;; no-op |
| 158 | + |
| 159 | +;; ns |
| 160 | + |
| 161 | +;; ns* |
| 162 | + |
| 163 | +;; quote |
| 164 | + |
136 | 165 | (deftest test-recur |
137 | 166 | (let [node (no-warn (analyze ns-env '(fn [x] (recur (inc x)))))] |
138 | 167 | (is (s/valid? ::a/node node)))) |
139 | 168 |
|
140 | | -(deftest test-case |
141 | | - (let [node (no-warn (analyze ns-env '(case x 1 :foo 2 :bar)))] |
| 169 | +;; set |
| 170 | + |
| 171 | +;; set! |
| 172 | + |
| 173 | +;; the-var |
| 174 | + |
| 175 | +(deftest test-throw |
| 176 | + (let [node (no-warn (analyze ns-env '(throw (js/Error. "foo"))))] |
| 177 | + (is (= :throw (:op node))) |
142 | 178 | (is (s/valid? ::a/node node)))) |
143 | 179 |
|
144 | | -;; letfn |
| 180 | +;; try |
145 | 181 |
|
146 | | -;; local |
| 182 | +;; var |
147 | 183 |
|
148 | | -; TODO: #js |
149 | | -;(deftest test-js-object |
150 | | -; ) |
| 184 | +;; vector |
| 185 | + |
| 186 | +;; with-meta |
151 | 187 |
|
152 | 188 | (comment |
153 | 189 |
|
|
0 commit comments