Skip to content

Commit 923e1d9

Browse files
author
dnolen
committed
move self host tests out from normal tests so normal tests run again
1 parent 139da19 commit 923e1d9

File tree

5 files changed

+171
-1
lines changed

5 files changed

+171
-1
lines changed

script/test-self-host

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
rm -rf builds/out-self
55
mkdir -p builds/out-self
66

7-
bin/cljsc src/test/cljs/self_host "{:optimizations :simple :static-fns true :output-dir \"builds/out-self\" :optimize-constants true :verbose true :compiler-stats true :target :nodejs}" > builds/out-self/core-self-test.js
7+
bin/cljsc src/test/self/self_host "{:optimizations :simple :static-fns true :output-dir \"builds/out-self\" :optimize-constants true :verbose true :compiler-stats true :target :nodejs}" > builds/out-self/core-self-test.js
88

99
echo "Testing with Node"
1010
node builds/out-self/core-self-test.js
File renamed without changes.
File renamed without changes.
File renamed without changes.

src/test/self/self_host/test.cljs

Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
(ns self-host.test
2+
(:require [cljs.test :as test
3+
:refer-macros [run-tests deftest testing is async]]
4+
[cljs.js :as cljs]
5+
[cljs.nodejs :as nodejs]))
6+
7+
(set! (.-user js/cljs) #js {})
8+
9+
(nodejs/enable-util-print!)
10+
11+
(defn latch [m f]
12+
(let [r (atom 0)]
13+
(add-watch r :latch
14+
(fn [_ _ o n]
15+
(when (== n m) (f))))
16+
r))
17+
18+
(defn inc! [r]
19+
(swap! r inc))
20+
21+
(def vm (js/require "vm"))
22+
(def fs (js/require "fs"))
23+
(def st (cljs/empty-state))
24+
25+
(defn node-eval [{:keys [name source]}]
26+
(if-not js/COMPILED
27+
(.runInThisContext vm source (str (munge name) ".js"))
28+
(js/eval source)))
29+
30+
(def libs
31+
{'bootstrap-test.core :cljs
32+
'bootstrap-test.macros :clj
33+
'bootstrap-test.helper :clj})
34+
35+
(defn node-load [{:keys [name macros]} cb]
36+
(if (contains? libs name)
37+
(let [path (str "src/test/self/" (cljs/ns->relpath name)
38+
"." (cljs.core/name (get libs name)))]
39+
(.readFile fs path "utf-8"
40+
(fn [err src]
41+
(cb (if-not err
42+
{:lang :clj :source src}
43+
(.error js/console err))))))
44+
(cb nil)))
45+
46+
(defn elide-env [env ast opts]
47+
(dissoc ast :env))
48+
49+
;; NOTE: can't set passes because callbacks happen _inside_ binding
50+
;; do so will effect other tests
51+
52+
(deftest test-analyze-str
53+
(async done
54+
(let [l (latch 1 done)]
55+
(cljs/analyze-str st "(+ 1 1)" nil
56+
{:context :expr}
57+
(fn [{:keys [error value]}]
58+
(is (nil? error))
59+
(is (= :js (:op value)))
60+
(inc! l))))))
61+
62+
(deftest test-compile-str
63+
(async done
64+
(let [l (latch 3 done)]
65+
(cljs/compile-str st "(+ 1 1)"
66+
(fn [{:keys [error value]}]
67+
(is (nil? error))
68+
(is (= value "(1 + 1);\n"))
69+
(inc! l)))
70+
(cljs/compile-str st "(fn [])" nil
71+
{:context :expr}
72+
(fn [{:keys [error value]}]
73+
(is (nil? error))
74+
(is (= value "(function (){\nreturn null;\n})"))
75+
(inc! l)))
76+
(cljs/compile-str st "(if cljs.core.first 1 2)" nil
77+
{:context :expr}
78+
(fn [{:keys [error value]}]
79+
(is (nil? error))
80+
(is (= value "(cljs.core.truth_(cljs.core.first)?1:2)"))
81+
(inc! l))))))
82+
83+
(deftest test-eval-str
84+
(async done
85+
(let [l (latch 5 done)]
86+
(cljs/eval-str st "(+ 1 1)" nil
87+
{:eval node-eval}
88+
(fn [{:keys [error value]}]
89+
(is (nil? error))
90+
(is (== value 2))
91+
(inc! l)))
92+
(cljs/eval-str st "(def x 1)" nil
93+
{:eval node-eval
94+
:context :expr
95+
:def-emits-var true}
96+
(fn [{:keys [error value]}]
97+
(is (nil? error))
98+
(is (var? value))
99+
(inc! l)))
100+
(cljs/eval-str st "(fn [])" nil
101+
{:eval node-eval
102+
:context :expr
103+
:def-emits-var true}
104+
(fn [{:keys [error value]}]
105+
(is (nil? error))
106+
(is (fn? value))
107+
(inc! l)))
108+
(cljs/eval-str st "((fn [a b] (+ a b)) 1 2)" nil
109+
{:eval node-eval
110+
:context :expr
111+
:def-emits-var true}
112+
(fn [{:keys [error value]}]
113+
(is (nil? error))
114+
(is (== 3))
115+
(inc! l)))
116+
#_(cljs/eval-str st "(ns foo.bar)" nil
117+
{:eval node-eval
118+
:context :expr
119+
:def-emits-var true}
120+
(fn [{:keys [error value]}]
121+
(is (nil? error))
122+
(is (not (nil? js/foo.bar)))
123+
(inc! l)))
124+
(cljs/eval-str st "(defn foo [a b] (+ a b))" nil
125+
{:eval node-eval
126+
:context :expr
127+
:def-emits-var true}
128+
(fn [{:keys [error value]}]
129+
(is (nil? error))
130+
(is (== (js/cljs.user.foo 1 2) 3))
131+
(inc! l))))))
132+
133+
#_(deftest test-eval-str-with-require
134+
(async done
135+
(let [l (latch 3 done)]
136+
(cljs/eval-str st
137+
"(ns foo.bar (:require [bootstrap-test.core]))\n(bootstrap-test.core/foo 3 4)"
138+
nil
139+
{:eval node-eval
140+
:load node-load}
141+
(fn [{:keys [value error]}]
142+
(is (nil? error))
143+
(is (== 7 value))
144+
(inc! l)))
145+
(cljs/eval-str st
146+
"(ns foo.bar (:require-macros [bootstrap-test.macros :refer [foo]]))\n(foo 4 4)"
147+
nil
148+
{:eval node-eval
149+
:load node-load}
150+
(fn [{:keys [error value]}]
151+
(is (nil? error))
152+
(is (== 16 value))
153+
(inc! l)))
154+
(cljs/eval-str st
155+
"(ns foo.bar)\n(first [1 2 3])"
156+
nil
157+
{:eval node-eval
158+
:load node-load}
159+
(fn [{:keys [error value]}]
160+
(is (nil? error))
161+
(is (== 1 value))
162+
(inc! l))))))
163+
164+
(defn -main [& args]
165+
(run-tests))
166+
167+
(set! *main-cli-fn* -main)
168+
169+
(comment
170+
)

0 commit comments

Comments
 (0)