|
15 | 15 | [b \"1.2.3\"]]
|
16 | 16 | :repositories { \"private\" \"http://private.com/repo\" })")
|
17 | 17 |
|
18 |
| -(def root (z/edn (p/parse-string data-string))) |
| 18 | +(def root (z/of-string data-string)) |
19 | 19 |
|
20 | 20 | ;; ## Tests
|
21 | 21 | ;;
|
|
75 | 75 | (-> loc z/right z/node) => [:token 'defproject]))
|
76 | 76 |
|
77 | 77 | (fact "about zipper modification"
|
78 |
| - (let [root (z/edn (p/parse-string "[1\n 2\n 3]"))] |
| 78 | + (let [root (z/of-string "[1\n 2\n 3]")] |
79 | 79 | (z/node root)
|
80 | 80 | => [:vector
|
81 | 81 | [:token 1]
|
|
105 | 105 | [:newline "\n"] [:whitespace " "] [:token 2]
|
106 | 106 | [:newline "\n"] [:whitespace " "] [:token 8]]]))
|
107 | 107 |
|
| 108 | +(fact "about node removal (including trailing/preceding whitespace if necessary)" |
| 109 | + (let [root (z/of-string "[1 [2 3] 4]")] |
| 110 | + (z/sexpr root) => [1 [2 3] 4] |
| 111 | + (let [r0 (-> root z/down z/remove*)] |
| 112 | + (z/sexpr r0) => [[2 3] 4] |
| 113 | + (z/->root-string r0) => "[ [2 3] 4]") |
| 114 | + (let [r0 (-> root z/down z/remove)] |
| 115 | + (z/sexpr r0) => [[2 3] 4] |
| 116 | + (z/->root-string r0) => "[[2 3] 4]") |
| 117 | + (let [r0 (-> root z/down z/right z/right z/remove*)] |
| 118 | + (z/->root-string r0) => "[1 [2 3] ]") |
| 119 | + (future-fact "about removal of preceding spaces" |
| 120 | + (let [r0 (-> root z/down z/right z/right z/remove)] |
| 121 | + (z/sexpr r0) => 3 |
| 122 | + (z/->root-string r0) => "[1 [2 3]]")))) |
| 123 | + |
108 | 124 | (fact "about zipper splice"
|
109 |
| - (let [root (z/edn (p/parse-string "[1 [2 3] 4]"))] |
| 125 | + (let [root (z/of-string "[1 [2 3] 4]")] |
110 | 126 | (z/sexpr root) => [1 [2 3] 4]
|
111 | 127 | (-> root z/down z/right z/splice z/up z/sexpr) => [1 2 3 4]))
|
112 | 128 |
|
|
122 | 138 | => [:repositories :dependencies "A project." :description "0.1.0-SNAPSHOT" 'my-project 'defproject])
|
123 | 139 |
|
124 | 140 | (fact "about zipper seq operations"
|
125 |
| - (let [root (z/edn (p/parse-string "[1 2 3]"))] |
| 141 | + (let [root (z/of-string "[1 2 3]")] |
126 | 142 | root => z/seq?
|
127 | 143 | root => z/vector?
|
128 | 144 | (z/sexpr root) => [1 2 3]
|
|
132 | 148 | (-> root (z/assoc 2 5) z/sexpr) => [1 2 5]
|
133 | 149 | (-> root (z/assoc 5 8) z/sexpr) => (throws IndexOutOfBoundsException)
|
134 | 150 | (->> root (z/map #(z/edit % inc)) z/sexpr) => [2 3 4])
|
135 |
| - (let [root (z/edn (p/parse-string "(1 2 3)"))] |
| 151 | + (let [root (z/of-string "(1 2 3)")] |
136 | 152 | root => z/seq?
|
137 | 153 | root => z/list?
|
138 | 154 | (z/sexpr root) => '(1 2 3)
|
|
142 | 158 | (-> root (z/assoc 2 5) z/sexpr) => '(1 2 5)
|
143 | 159 | (-> root (z/assoc 5 8) z/sexpr) => (throws IndexOutOfBoundsException)
|
144 | 160 | (->> root (z/map #(z/edit % inc)) z/sexpr) => '(2 3 4))
|
145 |
| - (let [root (z/edn (p/parse-string "#{1 2 3}"))] |
| 161 | + (let [root (z/of-string "#{1 2 3}")] |
146 | 162 | root => z/seq?
|
147 | 163 | root => z/set?
|
148 | 164 | (z/sexpr root) => #{1 2 3}
|
|
152 | 168 | (-> root (z/assoc 2 5) z/sexpr) => #{1 2 5}
|
153 | 169 | (-> root (z/assoc 5 8) z/sexpr) => (throws IndexOutOfBoundsException)
|
154 | 170 | (->> root (z/map #(z/edit % inc)) z/sexpr) => #{2 3 4})
|
155 |
| - (let [root (z/edn (p/parse-string "{:a 1 :b 2}"))] |
| 171 | + (let [root (z/of-string "{:a 1 :b 2}")] |
156 | 172 | root => z/seq?
|
157 | 173 | root => z/map?
|
158 | 174 | (z/sexpr root) => {:a 1 :b 2}
|
|
162 | 178 | (-> root (z/assoc :c 7) z/sexpr) => {:a 1 :b 2 :c 7}
|
163 | 179 | (->> root (z/map #(z/edit % inc)) z/sexpr) => {:a 2 :b 3}
|
164 | 180 | (->> root (z/map-keys #(z/edit % name)) z/sexpr) => {"a" 1 "b" 2}))
|
| 181 | + |
| 182 | +(fact "about edit scope limitation/location memoization" |
| 183 | + (let [root (z/of-string "[0 [1 2 3] 4]")] |
| 184 | + (fact "about subedit->" |
| 185 | + (let [r0 (-> root z/down z/right z/down z/right (z/replace 5)) |
| 186 | + r1 (z/subedit-> root z/down z/right z/down z/right (z/replace 5))] |
| 187 | + (z/->root-string r0) => (z/->root-string r1) |
| 188 | + (z/->string r0) => "5" |
| 189 | + (z/->string r1) => "[0 [1 5 3] 4]" |
| 190 | + (z/tag r0) => :token |
| 191 | + (z/tag r1) => :vector)) |
| 192 | + (fact "about subedit->>" |
| 193 | + (let [r0 (->> root z/down z/right (z/map #(z/edit % inc)) z/down) |
| 194 | + r1 (z/subedit->> root z/down z/right (z/map #(z/edit % + 1)) z/down)] |
| 195 | + (z/->root-string r0) => (z/->root-string r1) |
| 196 | + (z/->string r0) => "2" |
| 197 | + (z/->string r1) => "[0 [2 3 4] 4]" |
| 198 | + (z/tag r0) => :token |
| 199 | + (z/tag r1) => :vector)) |
| 200 | + (fact "about edit->" |
| 201 | + (let [v (-> root z/down z/right z/down) |
| 202 | + r0 (-> v z/up z/right z/remove) |
| 203 | + r1 (z/edit-> v z/up z/right z/remove)] |
| 204 | + (z/->root-string r0) => (z/->root-string r1) |
| 205 | + (z/->string v) => "1" |
| 206 | + (z/->string r0) => "3" |
| 207 | + (z/->string r1) => "1")) |
| 208 | + (fact "about edit->>" |
| 209 | + (let [v (-> root z/down) |
| 210 | + r0 (->> v z/right (z/map #(z/edit % inc)) z/right) |
| 211 | + r1 (z/edit->> v z/right (z/map #(z/edit % inc)) z/right)] |
| 212 | + (z/->root-string r0) => (z/->root-string r1) |
| 213 | + (z/->string v) => "0" |
| 214 | + (z/->string r0) => "4" |
| 215 | + (z/->string r1) => "0")))) |
0 commit comments