/
util.clj
61 lines (56 loc) · 2.02 KB
/
util.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
(ns hiccup.test.util
(:use clojure.test
hiccup.util)
(:import java.net.URI))
(deftest test-escaped-chars
(is (= (escape-html "\"") """))
(is (= (escape-html "<") "<"))
(is (= (escape-html ">") ">"))
(is (= (escape-html "&") "&"))
(is (= (escape-html "foo") "foo")))
(deftest test-as-str
(is (= (as-str "foo") "foo"))
(is (= (as-str :foo) "foo"))
(is (= (as-str 100) "100"))
(is (= (as-str 4/3) (str (float 4/3))))
(is (= (as-str "a" :b 3) "ab3"))
(is (= (as-str (URI. "/foo")) "/foo")))
(deftest test-to-uri
(testing "with no base URL"
(is (= (to-str (to-uri "foo")) "foo"))
(is (= (to-str (to-uri "/foo/bar")) "/foo/bar"))
(is (= (to-str (to-uri "/foo#bar")) "/foo#bar")))
(testing "with base URL"
(with-base-url "/foo"
(is (= (to-str (to-uri "/bar")) "/foo/bar"))
(is (= (to-str (to-uri "http://example.com")) "http://example.com"))
(is (= (to-str (to-uri "bar")) "bar"))
(is (= (to-str (to-uri "../bar")) "../bar")))))
(deftest test-url-encode
(testing "strings"
(are [s e] (= (url-encode s) e)
"a" "a"
"a b" "a+b"
"&" "%26"))
(testing "parameter maps"
(are [m e] (= (url-encode m) e)
{"a" "b"} "a=b"
{:a "b"} "a=b"
{:a "b" :c "d"} "a=b&c=d"
{:a "&"} "a=%26"
{:é "è"} "%C3%A9=%C3%A8"))
(testing "different encodings"
(are [e s] (= (with-encoding e (url-encode {:iroha "いろは"})) s)
"UTF-8" "iroha=%E3%81%84%E3%82%8D%E3%81%AF"
"Shift_JIS" "iroha=%82%A2%82%EB%82%CD"
"EUC-JP" "iroha=%A4%A4%A4%ED%A4%CF"
"ISO-2022-JP" "iroha=%1B%24%42%24%24%24%6D%24%4F%1B%28%42")))
(deftest test-url
(testing "URL parts and parameters"
(are [u s] (= u s)
(url "foo") (URI. "foo")
(url "foo/" 1) (URI. "foo/1")
(url "/foo/" "bar") (URI. "/foo/bar")
(url {:a "b"}) (URI. "?a=b")
(url "foo" {:a "&"}) (URI. "foo?a=%26")
(url "/foo/" 1 "/bar" {:page 2}) (URI. "/foo/1/bar?page=2"))))