Skip to content

Commit dadae68

Browse files
committed
mvn test now runs basic cljs testsuite
1 parent 539e3e0 commit dadae68

10 files changed

Lines changed: 152 additions & 112 deletions

File tree

pom.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,14 @@
4545
</dependencies>
4646

4747
<build>
48+
<testResources>
49+
<testResource>
50+
<directory>${project.basedir}/src/test/resources</directory>
51+
</testResource>
52+
<testResource>
53+
<directory>${project.basedir}/src/test/clojurescript</directory>
54+
</testResource>
55+
</testResources>
4856
<plugins>
4957
<plugin>
5058
<groupId>net.bendlas</groupId>
@@ -81,6 +89,7 @@
8189
</build>
8290

8391
<properties>
92+
<!--clojure.version>1.5.0</clojure.version-->
8493
<clojure.version>1.9.0-alpha14</clojure.version>
8594
</properties>
8695

project.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
(defproject org.clojure/data.xml "0-UE-DEVELOPMENT"
22
:source-paths ["src/main/clojure"]
3-
:test-paths ["src/test/clojure"]
3+
:test-paths ["src/test/clojure" "src/test/clojurescript"]
44
:resource-paths ["src/test/resources" "target/gen-resources"]
55
:dependencies [[org.clojure/clojure "1.8.0"]
66
[org.clojure/clojurescript "1.9.293"]

src/main/clojure/clojure/data/xml/js/dom.cljs

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@
9191
(string? el) (text-node el)
9292
(instance? Element el) el
9393
;; stupid xmldom, (some? (.-item el))
94-
(instance? NodeList el) el
94+
#_(instance? NodeList el)
95+
(some? (.-item el)) el
9596
(instance? Text el) el
9697
(satisfies? ILookup el) (element* (:tag el)
9798
(:attrs el)
@@ -110,24 +111,27 @@
110111
(identical? xmlns-uri (.-namespaceURI a)))
111112
(def remove-xmlns-attrs-xf (remove xmlns-attr?))
112113
(def remove-xmlns-attrs (partial into {} remove-xmlns-attrs-xf))
113-
(def filter-xmlns-attrs (partial into {} (filter xmlns-attr?)))
114+
(def filter-xmlns-attrs-xf (filter xmlns-attr?))
115+
(def filter-xmlns-attrs (partial into {} filter-xmlns-attrs-xf))
114116

115-
(defn dom-element-attrs [el]
116-
(transduce
117-
remove-xmlns-attrs-xf
118-
(completing
119-
(fn [ta attr-node]
120-
(assoc! ta
121-
(dom-element-tag attr-node)
122-
(.-value attr-node)))
123-
persistent!)
124-
(transient {})
125-
(array-seq el)))
117+
(defn dom-element-attrs
118+
([el] (dom-element-attrs remove-xmlns-attrs-xf el))
119+
([xf el]
120+
(transduce
121+
xf
122+
(completing
123+
(fn [ta attr-node]
124+
(assoc! ta
125+
(dom-element-tag attr-node)
126+
(.-value attr-node)))
127+
persistent!)
128+
(transient {})
129+
(array-seq el))))
126130

127131
(declare element-data)
128132

129133
(defn- node-list-vec [nl]
130-
(mapv element-data (array-seq nl)))
134+
(into [] (map element-data) (array-seq nl)))
131135

132136
(defn- as-node [n]
133137
(if (instance? Text n)
@@ -144,11 +148,9 @@
144148
(node/element* (dom-element-tag el)
145149
(dom-element-attrs (.-attributes el))
146150
(node-list-vec (.-childNodes el))
147-
(do
148-
(prn "META" {:clojure.data.xml/nss (filter-xmlns-attrs
149-
(.-attributes el))})
150-
{:clojure.data.xml/nss (filter-xmlns-attrs
151-
(.-attributes el))}))
151+
{:clojure.data.xml/nss (dom-element-attrs
152+
filter-xmlns-attrs-xf
153+
(.-attributes el))})
152154
;;(instance? NamedNodeMap el)
153155
(.-getNamedItemNS el)
154156
(dom-element-attrs el)
@@ -174,11 +176,11 @@
174176
:content (.-childNodes el)
175177
(throw "XML tag has no key" {:key k :el el})))
176178
([el k nf]
177-
(println "Element" k "=>" (case k
178-
:tag (dom-element-tag el)
179-
:attrs (.-attributes el)
180-
:content (.-childNodes el)
181-
nf))
179+
#_(println "Element" k "=>" (case k
180+
:tag (dom-element-tag el)
181+
:attrs (.-attributes el)
182+
:content (.-childNodes el)
183+
nf))
182184
(case k
183185
:tag (dom-element-tag el)
184186
:attrs (remove-xmlns-attrs (.-attributes el))
@@ -208,9 +210,9 @@
208210
(.-value i)
209211
nil))
210212
([attrs attr not-found]
211-
(println "Attrs" attr "=>" (if-let [i (.getNamedItemNS attrs (qname-uri attr) (qname-local attr))]
212-
(.-value i)
213-
not-found))
213+
#_(println "Attrs" attr "=>" (if-let [i (.getNamedItemNS attrs (qname-uri attr) (qname-local attr))]
214+
(.-value i)
215+
not-found))
214216
(if-let [i (.getNamedItemNS attrs (qname-uri attr) (qname-local attr))]
215217
(.-value i)
216218
not-found)))
@@ -229,11 +231,11 @@
229231
init nm))
230232
IEquiv
231233
(-equiv [nm0 nm1]
232-
(println "NamedNodeMap.-equiv" (identical? nm0 nm1) (count nm0) (count nm1))
234+
#_(println "NamedNodeMap.-equiv" (identical? nm0 nm1) (count nm0) (count nm1))
233235
(or (identical? nm0 nm1)
234236
(and (identical? (count nm0) (count nm1))
235237
(reduce-kv (fn [_ qn v]
236-
(println "=" v 'qn qn '(get nm1 qn "") (get nm1 qn ""))
238+
#_(println "=" v 'qn qn '(get nm1 qn "") (get nm1 qn ""))
237239
(or (identical? v (get nm1 qn ""))
238240
(reduced false)))
239241
true nm0)))))
@@ -254,7 +256,7 @@
254256
nf)))
255257
IEquiv
256258
(-equiv [nl0 nl1]
257-
(println "NodeList.-equiv")
259+
#_(println "NodeList.-equiv")
258260
(or (identical? nl0 nl1)
259261
(and (identical? (count nl0) (count nl1))
260262
(reduce (fn [_ n]
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
(ns clojure.data.xml.cljs-testsuite
2+
(:require
3+
[clojure.test :refer :all]
4+
[cljs.repl :as repl]
5+
[cljs.repl.nashorn :as repl-nh]
6+
[cljs.closure :as closure]
7+
[cljs.build.api :as bapi]
8+
[clojure.string :as str]
9+
[clojure.java.io :as io])
10+
(:import
11+
java.nio.file.Files
12+
java.nio.file.attribute.FileAttribute))
13+
14+
(defn tempdir []
15+
(str (Files/createTempDirectory
16+
"cljs-nashorn-" (into-array FileAttribute []))))
17+
18+
(defn compile-testsuite! [dir]
19+
(let [out (io/file dir "tests.js")]
20+
(println "Building in" dir)
21+
(bapi/build (bapi/inputs "src/main/clojure" "src/test/clojure" "src/test/clojurescript")
22+
{:output-to (str out)
23+
:output-dir dir
24+
:main 'clojure.data.xml.test-cljs
25+
:optimizations :advanced
26+
:pseudo-names true
27+
:preamble ["dxml-nashorn.generated.js"]})
28+
(spit (io/file dir "tests.reopt.js")
29+
(closure/optimize {:optimizations :simple
30+
:pretty-print true
31+
:closure-warnings
32+
{:non-standard-jsdoc :off}}
33+
(slurp out)))))
34+
35+
(defn run-testsuite! [dir]
36+
(System/setProperty "nashorn.persistent.code.cache" "target/nashorn_code_cache")
37+
(let [engine (repl-nh/create-engine)]
38+
(println "INFO" "Running nashorn-repl with" (System/getProperty "nashorn.persistent.code.cache"))
39+
(compile-testsuite! dir)
40+
(.eval engine (io/reader (io/file dir "tests.reopt.js")))
41+
(let [{:as res :keys [fail error]} (read-string (.eval engine "clojure.data.xml.test_cljs._main_nashorn()"))]
42+
(is (and (zero? fail) (zero? error))
43+
(pr-str res)))))
44+
45+
(comment
46+
47+
(def td (tempdir))
48+
(def engine (:engine (repl-nh/repl-env)))
49+
(run-testsuite! td)
50+
(.eval engine (io/reader (io/file td "tests.reopt.js")))
51+
(.eval engine "clojure.data.xml.test_cljs._main()")
52+
53+
)

src/test/clojure/clojure/data/xml/test_cljs.clj

Lines changed: 9 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -9,68 +9,14 @@
99
(ns ^{:doc "Clojurescript tests for data.xml"}
1010
clojure.data.xml.test-cljs
1111
(:require
12-
[clojure.test :refer :all]
13-
[cljs.repl :as repl]
14-
[cljs.repl.nashorn :as repl-nh]
15-
[cljs.closure :as closure]
16-
[cljs.build.api :as bapi]
17-
[clojure.string :as str]
18-
[clojure.java.io :as io])
19-
(:import
20-
java.nio.file.Files
21-
java.nio.file.attribute.FileAttribute))
22-
23-
(defn nashorn-env []
24-
(let [{:as env :keys [engine]} (repl-nh/repl-env)]
25-
(repl-nh/eval-resource engine "dxml-nashorn.generated.js" true)
26-
env))
27-
28-
(defn tempdir []
29-
(str (Files/createTempDirectory
30-
"cljs-nashorn-" (into-array FileAttribute []))))
31-
32-
(defn compile-testsuite! [dir]
33-
(let [out (io/file dir "tests.js")]
34-
(println "Building in" dir)
35-
(bapi/build (bapi/inputs "src/main/clojure" "src/test/clojure")
36-
{:output-to (str out)
37-
:output-dir dir
38-
:main 'clojure.data.xml.test-cljs
39-
:optimizations :simple
40-
;; :pseudo-names true
41-
:preamble ["dxml-nashorn.generated.js"]})
42-
(spit (io/file dir "tests.reopt.js")
43-
(closure/optimize {:optimizations :simple
44-
:pretty-print true}
45-
(slurp out)))))
46-
47-
(defn run-testsuite! [dir]
48-
(let [{:keys [engine]} (repl-nh/repl-env)]
49-
(compile-testsuite! dir)
50-
(.eval engine (io/reader (io/file dir "tests.reopt.js")))
51-
(.eval engine "clojure.data.xml.test_cljs._main()")))
12+
[clojure.test :refer :all]))
5213

5314
(deftest clojurescript-test-suite
54-
(is (= false (run-testsuite! (tempdir)))))
55-
56-
(comment
57-
58-
(def td (tempdir))
59-
(def engine (:engine (repl-nh/repl-env)))
60-
(run-testsuite! td)
61-
(.eval engine (io/reader (io/file td "tests.reopt.js")))
62-
(.eval engine "clojure.data.xml.test_cljs._main()")
63-
64-
)
65-
66-
#_(deftest clojurescript-test-suite
67-
(is (= :success
68-
(read-string
69-
(repl/evaluate-form
70-
(doto (repl-nh/repl-env :debug true)
71-
(repl/-setup {:output-dir (tempdir)}))
72-
(ana/empty-env)
73-
"TESTSUITE LAUNCHER"
74-
(list 'do
75-
(list 'require ''clojure.data.xml.test-cljs)
76-
(list 'clojure.data.xml.test-cljs/run-tests)))))))
15+
(try
16+
(require 'clojure.data.xml.cljs-testsuite)
17+
(eval '(clojure.data.xml.cljs-testsuite/run-testsuite! "target/cljs-test-nashorn"))
18+
(catch Exception e
19+
(println "WARN: clojurescript test suite not available with Clojure"
20+
*clojure-version* (System/getProperty "java.runtime.name")
21+
(System/getProperty "java.vm.version") (System/getProperty "java.runtime.version")
22+
\newline e))))

src/test/clojure/clojure/data/xml/test_cljs.cljs

Lines changed: 0 additions & 16 deletions
This file was deleted.

src/test/clojure/clojure/data/xml/cljs_repls.clj renamed to src/test/clojurescript/clojure/data/xml/cljs_repls.clj

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66
[cljs.closure :as closure]
77
[figwheel-sidecar.repl-api :refer [start-figwheel! stop-figwheel! cljs-repl]]))
88

9+
(defn nashorn-env []
10+
(let [{:as env :keys [engine]} (repl-nh/repl-env)]
11+
(repl-nh/eval-resource engine "dxml-nashorn.generated.js" true)
12+
env))
13+
914
(def handle-redirect (constantly {:status 307 :headers {"Location" "/cljs-tests/index.html"}}))
1015

1116
(defn repl-figwheel! []
@@ -15,7 +20,7 @@
1520
:ring-handler `handle-redirect}
1621
:all-builds
1722
[{:id "tests"
18-
:source-paths ["src/main/clojure" "src/test/clojure"]
23+
:source-paths ["src/main/clojure" "src/test/clojure" "src/test/clojurescript"]
1924
:figwheel {:on-jsload "clojure.data.xml.test-cljs/-main"}
2025
:compiler {:main 'clojure.data.xml.test-cljs
2126
:preloads '[devtools.preload]
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
(ns clojure.data.xml.test-cljs
2+
(:require [cljs.test :as test]
3+
[clojure.data.xml :as xml]
4+
clojure.data.xml.test-cljs-basic
5+
clojure.data.xml.test-cljs-extended))
6+
7+
(def ^:dynamic *results*)
8+
9+
(defmethod test/report [::test/default :end-run-tests]
10+
[m]
11+
(assert (nil? *results*))
12+
(set! *results* m))
13+
14+
(defn ^:export -main-nashorn []
15+
(set! *print-newline* false)
16+
(set! *print-fn* js/print)
17+
(set! *print-err-fn* js/print)
18+
(binding [*results* nil]
19+
(println "Running Basic Tests")
20+
(test/run-tests 'clojure.data.xml.test-cljs-basic)
21+
(pr-str *results*)))
22+
23+
(defn ^:export -main []
24+
(binding [*results* nil]
25+
(println "Running Basic Tests")
26+
(test/run-tests 'clojure.data.xml.test-cljs-basic)
27+
(println "Extending DOM Objects and running again + extended tests")
28+
(xml/extend-dom-as-data!)
29+
(test/testing "with extended native dom"
30+
(test/run-tests 'clojure.data.xml.test-cljs-basic 'clojure.data.xml.test-cljs-extended))
31+
*results*))

src/test/clojure/clojure/data/xml/test_cljs_basic.cljs renamed to src/test/clojurescript/clojure/data/xml/test_cljs_basic.cljs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,17 @@
22
(:require
33
[cljs.test :as test :refer [deftest is are]]
44
[clojure.data.xml :as xml :refer [parse-str emit-str element element-data element-node]]
5-
[clojure.data.xml.node :as node]))
5+
[clojure.data.xml.node :as node]
6+
[clojure.data.xml.js.dom :as dom]))
7+
8+
(comment
9+
10+
(= (xml/element :foo)
11+
(xml/parse-str "<foo/>"))
12+
13+
(xml/element-data (xml/element-node (xml/element :foo)))
14+
15+
)
616

717
(deftest roundtrips
818
(are [dxml xml] (do (is (= dxml (xml/parse-str xml)))

src/test/clojure/clojure/data/xml/test_cljs_extended.cljs renamed to src/test/clojurescript/clojure/data/xml/test_cljs_extended.cljs

File renamed without changes.

0 commit comments

Comments
 (0)