rlm@10
|
1 (ns clojure.test-clojure.string
|
rlm@10
|
2 (:require [clojure.string :as s])
|
rlm@10
|
3 (:use clojure.test))
|
rlm@10
|
4
|
rlm@10
|
5 (deftest t-split
|
rlm@10
|
6 (is (= ["a" "b"] (s/split "a-b" #"-")))
|
rlm@10
|
7 (is (= ["a" "b-c"] (s/split "a-b-c" #"-" 2)))
|
rlm@10
|
8 (is (vector? (s/split "abc" #"-"))))
|
rlm@10
|
9
|
rlm@10
|
10 (deftest t-reverse
|
rlm@10
|
11 (is (= "tab" (s/reverse "bat"))))
|
rlm@10
|
12
|
rlm@10
|
13 (deftest t-replace
|
rlm@10
|
14 (is (= "faabar" (s/replace "foobar" \o \a)))
|
rlm@10
|
15 (is (= "barbarbar" (s/replace "foobarfoo" "foo" "bar")))
|
rlm@10
|
16 (is (= "FOObarFOO" (s/replace "foobarfoo" #"foo" s/upper-case))))
|
rlm@10
|
17
|
rlm@10
|
18 (deftest t-replace-first
|
rlm@10
|
19 (is (= "barbarfoo" (s/replace-first "foobarfoo" "foo" "bar")))
|
rlm@10
|
20 (is (= "barbarfoo" (s/replace-first "foobarfoo" #"foo" "bar")))
|
rlm@10
|
21 (is (= "z.ology" (s/replace-first "zoology" \o \.)))
|
rlm@10
|
22 (is (= "FOObarfoo" (s/replace-first "foobarfoo" #"foo" s/upper-case))))
|
rlm@10
|
23
|
rlm@10
|
24 (deftest t-join
|
rlm@10
|
25 (are [x coll] (= x (s/join coll))
|
rlm@10
|
26 "" nil
|
rlm@10
|
27 "" []
|
rlm@10
|
28 "1" [1]
|
rlm@10
|
29 "12" [1 2])
|
rlm@10
|
30 (are [x sep coll] (= x (s/join sep coll))
|
rlm@10
|
31 "1,2,3" \, [1 2 3]
|
rlm@10
|
32 "" \, []
|
rlm@10
|
33 "1" \, [1]
|
rlm@10
|
34 "1 and-a 2 and-a 3" " and-a " [1 2 3]))
|
rlm@10
|
35
|
rlm@10
|
36 (deftest t-trim-newline
|
rlm@10
|
37 (is (= "foo" (s/trim-newline "foo\n")))
|
rlm@10
|
38 (is (= "foo" (s/trim-newline "foo\r\n")))
|
rlm@10
|
39 (is (= "foo" (s/trim-newline "foo")))
|
rlm@10
|
40 (is (= "" (s/trim-newline ""))))
|
rlm@10
|
41
|
rlm@10
|
42 (deftest t-capitalize
|
rlm@10
|
43 (is (= "Foobar" (s/capitalize "foobar")))
|
rlm@10
|
44 (is (= "Foobar" (s/capitalize "FOOBAR"))))
|
rlm@10
|
45
|
rlm@10
|
46 (deftest t-triml
|
rlm@10
|
47 (is (= "foo " (s/triml " foo ")))
|
rlm@10
|
48 (is (= "" (s/triml " "))))
|
rlm@10
|
49
|
rlm@10
|
50 (deftest t-trimr
|
rlm@10
|
51 (is (= " foo" (s/trimr " foo ")))
|
rlm@10
|
52 (is (= "" (s/trimr " "))))
|
rlm@10
|
53
|
rlm@10
|
54 (deftest t-trim
|
rlm@10
|
55 (is (= "foo" (s/trim " foo \r\n"))))
|
rlm@10
|
56
|
rlm@10
|
57 (deftest t-upper-case
|
rlm@10
|
58 (is (= "FOOBAR" (s/upper-case "Foobar"))))
|
rlm@10
|
59
|
rlm@10
|
60 (deftest t-lower-case
|
rlm@10
|
61 (is (= "foobar" (s/lower-case "FooBar"))))
|
rlm@10
|
62
|
rlm@10
|
63 (deftest nil-handling
|
rlm@10
|
64 (are [f args] (thrown? NullPointerException (apply f args))
|
rlm@10
|
65 s/reverse [nil]
|
rlm@10
|
66 s/replace [nil #"foo" "bar"]
|
rlm@10
|
67 s/replace-first [nil #"foo" "bar"]
|
rlm@10
|
68 s/capitalize [nil]
|
rlm@10
|
69 s/upper-case [nil]
|
rlm@10
|
70 s/lower-case [nil]
|
rlm@10
|
71 s/split [nil #"-"]
|
rlm@10
|
72 s/split [nil #"-" 1]
|
rlm@10
|
73 s/trim [nil]
|
rlm@10
|
74 s/triml [nil]
|
rlm@10
|
75 s/trimr [nil]
|
rlm@10
|
76 s/trim-newline [nil]))
|
rlm@10
|
77
|
rlm@10
|
78 (deftest char-sequence-handling
|
rlm@10
|
79 (are [result f args] (let [[^CharSequence s & more] args]
|
rlm@10
|
80 (= result (apply f (StringBuffer. s) more)))
|
rlm@10
|
81 "paz" s/reverse ["zap"]
|
rlm@10
|
82 "foo:bar" s/replace ["foo-bar" \- \:]
|
rlm@10
|
83 "ABC" s/replace ["abc" #"\w" s/upper-case]
|
rlm@10
|
84 "faa" s/replace ["foo" #"o" (StringBuffer. "a")]
|
rlm@10
|
85 "baz::quux" s/replace-first ["baz--quux" #"--" "::"]
|
rlm@10
|
86 "baz::quux" s/replace-first ["baz--quux" (StringBuffer. "--") (StringBuffer. "::")]
|
rlm@10
|
87 "zim-zam" s/replace-first ["zim zam" #" " (StringBuffer. "-")]
|
rlm@10
|
88 "Pow" s/capitalize ["POW"]
|
rlm@10
|
89 "BOOM" s/upper-case ["boom"]
|
rlm@10
|
90 "whimper" s/lower-case ["whimPER"]
|
rlm@10
|
91 ["foo" "bar"] s/split ["foo-bar" #"-"]
|
rlm@10
|
92 "calvino" s/trim [" calvino "]
|
rlm@10
|
93 "calvino " s/triml [" calvino "]
|
rlm@10
|
94 " calvino" s/trimr [" calvino "]
|
rlm@10
|
95 "the end" s/trim-newline ["the end\r\n\r\r\n"]
|
rlm@10
|
96 true s/blank? [" "]
|
rlm@10
|
97 ["a" "b"] s/split-lines ["a\nb"]
|
rlm@10
|
98 "fa la la" s/escape ["fo lo lo" {\o \a}]))
|
rlm@10
|
99
|
rlm@10
|
100 (deftest t-escape
|
rlm@10
|
101 (is (= "<foo&bar>"
|
rlm@10
|
102 (s/escape "<foo&bar>" {\& "&" \< "<" \> ">"})))
|
rlm@10
|
103 (is (= " \\\"foo\\\" "
|
rlm@10
|
104 (s/escape " \"foo\" " {\" "\\\""})))
|
rlm@10
|
105 (is (= "faabor"
|
rlm@10
|
106 (s/escape "foobar" {\a \o, \o \a}))))
|
rlm@10
|
107
|
rlm@10
|
108 (deftest t-blank
|
rlm@10
|
109 (is (s/blank? nil))
|
rlm@10
|
110 (is (s/blank? ""))
|
rlm@10
|
111 (is (s/blank? " "))
|
rlm@10
|
112 (is (s/blank? " \t \n \r "))
|
rlm@10
|
113 (is (not (s/blank? " foo "))))
|
rlm@10
|
114
|
rlm@10
|
115 (deftest t-split-lines
|
rlm@10
|
116 (let [result (s/split-lines "one\ntwo\r\nthree")]
|
rlm@10
|
117 (is (= ["one" "two" "three"] result))
|
rlm@10
|
118 (is (vector? result)))
|
rlm@10
|
119 (is (= (list "foo") (s/split-lines "foo"))))
|
rlm@10
|
120
|