/
test_sexp.clj
63 lines (57 loc) · 2.78 KB
/
test_sexp.clj
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
; Copyright (c) Rich Hickey. All rights reserved.
; The use and distribution terms for this software are covered by the
; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
; which can be found in the file epl-v10.html at the root of this distribution.
; By using this software in any fashion, you are agreeing to be bound by
; the terms of this license.
; You must not remove this notice, or any other, from this software.
(ns ^{:doc "Tests for reading [:tag {:attr 'value} body*] as XML."
:author "Alan Malloy"}
clojure.data.xml.test-sexp
(:use clojure.test
clojure.data.xml
[clojure.data.xml.test-utils :only (test-stream lazy-parse*)]))
(deftest as-element
(let [xml-input "<tag attr=\"value\"><body /></tag>"
sexp-input [:tag {:attr "value"} :body]]
(is (= (lazy-parse* xml-input)
(sexp-as-element sexp-input)))))
(deftest as-fragment
(let [input (list [:tag1 "stuff"]
[:tag2 "other"])]
(is (= (sexps-as-fragment input)
(map sexp-as-element input)))
(is (thrown? Exception (sexp-as-element input)))))
(deftest with-cdata
(let [xml-input (element :tag {:attr "value"}
(element :body {} (cdata "not parsed <stuff")))
sexp-input [:tag {:attr "value"} [:body {} [:-cdata "not parsed <stuff"]]]]
(is (= xml-input
(sexp-as-element sexp-input)))))
(deftest with-multiple-cdata
(testing "separate cdata"
(let [xml-input (element :tag {:attr "value"}
(element :body {}
(cdata "not parsed <stuff")
(cdata "more not parsed <stuff")))
sexp-input [:tag {:attr "value"} [:body {}
(list [:-cdata "not parsed <stuff"]
[:-cdata "more not parsed <stuff"])]]]
(is (= xml-input
(sexp-as-element sexp-input)))))
(testing "cdata with embedded ]]>"
(let [xml-input (element :tag {:attr "value"}
(element :body {}
(cdata "not parsed <stuff")
(cdata "more not parsed <stuff")))
sexp-input [:tag {:attr "value"}
[:body {}
[:-cdata "not parsed <stuff]]>more not parsed <stuff"]]]]
(is (= (emit-str xml-input)
(emit-str (sexp-as-element sexp-input)))))))
(deftest with-comment
(let [xml-input (element :tag {:attr "value"}
(element :body {} (xml-comment "comment <stuff<here<")))
sexp-input [:tag {:attr "value"} [:body {} [:-comment "comment <stuff<here<"]]]]
(is (= xml-input
(sexp-as-element sexp-input)))))