|
2 | 2 | (:require
|
3 | 3 | [cider.nrepl.middleware.inspect :as i]
|
4 | 4 | [cider.nrepl.test-session :as session]
|
| 5 | + [clojure.edn :as edn] |
5 | 6 | [clojure.string :as string]
|
6 | 7 | [clojure.test :refer :all]))
|
7 | 8 |
|
8 |
| -(def nil-result ["(\"nil\" (:newline))"]) |
9 |
| - |
10 |
| -(def var-result ["(\"Class\" \": \" (:value \"clojure.lang.Var\" 0) (:newline) \"Meta Information: \" (:newline) \" \" (:value \":ns\" 1) \" = \" (:value \"clojure.core\" 2) (:newline) \" \" (:value \":name\" 3) \" = \" (:value \"*assert*\" 4) (:newline) \"Value: \" (:value \"true\" 5))"]) |
| 9 | +(def datafy? |
| 10 | + (some? (resolve 'clojure.core.protocols/datafy))) |
| 11 | + |
| 12 | +(def nil-result |
| 13 | + '["nil" (:newline)]) |
| 14 | + |
| 15 | +(def var-result |
| 16 | + (cond-> '("Class" |
| 17 | + ": " (:value "clojure.lang.Var" 0) |
| 18 | + (:newline) |
| 19 | + "Value: " (:value "true" 1) |
| 20 | + (:newline) |
| 21 | + (:newline) |
| 22 | + "--- Meta Information:" |
| 23 | + (:newline) |
| 24 | + " " (:value ":ns" 2) " = " (:value "clojure.core" 3) |
| 25 | + (:newline) |
| 26 | + " " (:value ":name" 4) " = " (:value "*assert*" 5) |
| 27 | + (:newline)) |
| 28 | + datafy? (concat '((:newline) |
| 29 | + "--- Datafy:" |
| 30 | + (:newline) |
| 31 | + " " "0" ". " (:value "true" 6) (:newline))))) |
11 | 32 |
|
12 | 33 | (def code "(sorted-map :a {:b 1} :c \"a\" :d 'e :f [2 3])")
|
13 | 34 |
|
14 |
| -(def eval-result (eval (read-string code))) |
15 |
| - |
16 |
| -(def inspect-result ["(\"Class\" \": \" (:value \"clojure.lang.PersistentTreeMap\" 0) (:newline) \"Contents: \" (:newline) \" \" (:value \":a\" 1) \" = \" (:value \"{ :b 1 }\" 2) (:newline) \" \" (:value \":c\" 3) \" = \" (:value \"\\\"a\\\"\" 4) (:newline) \" \" (:value \":d\" 5) \" = \" (:value \"e\" 6) (:newline) \" \" (:value \":f\" 7) \" = \" (:value \"[ 2 3 ]\" 8) (:newline))"]) |
17 |
| - |
18 |
| -(def push-result ["(\"Class\" \": \" (:value \"clojure.lang.PersistentArrayMap\" 0) (:newline) \"Contents: \" (:newline) \" \" (:value \":b\" 1) \" = \" (:value \"1\" 2) (:newline) (:newline) \" Path: :a\")"]) |
19 |
| - |
20 |
| -(def next-page-result ["(\"Class\" \": \" (:value \"clojure.lang.LazySeq\" 0) (:newline) \"Contents: \" (:newline) \" ...\" (:newline) \" \" \"32\" \". \" (:value \"32\" 1) (:newline) \" \" \"33\" \". \" (:value \"33\" 2) (:newline) \" \" \"34\" \". \" (:value \"34\" 3) (:newline) (:newline) \" Page size: 32, showing page: 2 of 2\")"]) |
21 |
| -(def first-page-result ["(\"Class\" \": \" (:value \"clojure.lang.LazySeq\" 0) (:newline) \"Contents: \" (:newline) \" \" \"0\" \". \" (:value \"0\" 1) (:newline) \" \" \"1\" \". \" (:value \"1\" 2) (:newline) \" \" \"2\" \". \" (:value \"2\" 3) (:newline) \" \" \"3\" \". \" (:value \"3\" 4) (:newline) \" \" \"4\" \". \" (:value \"4\" 5) (:newline) \" ...\" (:newline) \" Page size: 5, showing page: 1 of ?\")"]) |
| 35 | +(def inspect-result |
| 36 | + '("Class" |
| 37 | + ": " (:value "clojure.lang.PersistentTreeMap" 0) |
| 38 | + (:newline) |
| 39 | + (:newline) |
| 40 | + "--- Contents:" |
| 41 | + (:newline) |
| 42 | + " " (:value ":a" 1) " = " (:value "{ :b 1 }" 2) |
| 43 | + (:newline) |
| 44 | + " " (:value ":c" 3) " = " (:value "\"a\"" 4) |
| 45 | + (:newline) |
| 46 | + " " (:value ":d" 5) " = " (:value "e" 6) |
| 47 | + (:newline) |
| 48 | + " " (:value ":f" 7) " = " (:value "[ 2 3 ]" 8) |
| 49 | + (:newline))) |
| 50 | + |
| 51 | +(def push-result |
| 52 | + '("Class" |
| 53 | + ": " (:value "clojure.lang.PersistentArrayMap" 0) |
| 54 | + (:newline) |
| 55 | + (:newline) |
| 56 | + "--- Contents:" |
| 57 | + (:newline) |
| 58 | + " " (:value ":b" 1) " = " (:value "1" 2) |
| 59 | + (:newline) |
| 60 | + (:newline) |
| 61 | + "--- Path:" |
| 62 | + (:newline) |
| 63 | + " " ":a")) |
| 64 | + |
| 65 | +(def next-page-result |
| 66 | + '("Class" |
| 67 | + ": " (:value "clojure.lang.LazySeq" 0) |
| 68 | + (:newline) |
| 69 | + (:newline) |
| 70 | + "--- Contents:" |
| 71 | + (:newline) |
| 72 | + " " "..." |
| 73 | + (:newline) |
| 74 | + " " "32" ". " (:value "32" 1) |
| 75 | + (:newline) |
| 76 | + " " "33" ". " (:value "33" 2) |
| 77 | + (:newline) |
| 78 | + " " "34" ". " (:value "34" 3) |
| 79 | + (:newline) |
| 80 | + (:newline) |
| 81 | + "--- Page Info:" |
| 82 | + (:newline) |
| 83 | + " " "Page size: 32, showing page: 2 of 2")) |
| 84 | + |
| 85 | +(def first-page-result |
| 86 | + '("Class" |
| 87 | + ": " (:value "clojure.lang.LazySeq" 0) |
| 88 | + (:newline) |
| 89 | + (:newline) |
| 90 | + "--- Contents:" |
| 91 | + (:newline) |
| 92 | + " " "0" ". " (:value "0" 1) |
| 93 | + (:newline) |
| 94 | + " " "1" ". " (:value "1" 2) |
| 95 | + (:newline) |
| 96 | + " " "2" ". " (:value "2" 3) |
| 97 | + (:newline) |
| 98 | + " " "3" ". " (:value "3" 4) |
| 99 | + (:newline) |
| 100 | + " " "4" ". " (:value "4" 5) |
| 101 | + (:newline) |
| 102 | + " " "..." |
| 103 | + (:newline) |
| 104 | + (:newline) |
| 105 | + "--- Page Info:" |
| 106 | + (:newline) |
| 107 | + " " "Page size: 5, showing page: 1 of ?")) |
| 108 | + |
| 109 | +(defn value [{:keys [value]}] |
| 110 | + (edn/read-string (first value))) |
22 | 111 |
|
23 | 112 | ;; integration tests
|
24 | 113 |
|
|
27 | 116 | (deftest nil-integration-test
|
28 | 117 | (testing "nil renders correctly"
|
29 | 118 | (is (= nil-result
|
30 |
| - (:value (session/message {:op "eval" |
31 |
| - :inspect "true" |
32 |
| - :code "nil"})))))) |
| 119 | + (value (session/message {:op "eval" |
| 120 | + :inspect "true" |
| 121 | + :code "nil"})))))) |
33 | 122 |
|
34 | 123 | (deftest pop-empty-integration-test
|
35 | 124 | (testing "popping an empty inspector renders nil"
|
36 | 125 | (is (= nil-result
|
37 |
| - (:value (session/message {:op "inspect-pop"})))))) |
| 126 | + (value (session/message {:op "inspect-pop"})))))) |
38 | 127 |
|
39 | 128 | (deftest pop-empty-idempotent-integration-test
|
40 | 129 | (testing "popping an empty inspector is idempotent"
|
41 | 130 | (is (= nil-result
|
42 |
| - (:value (do |
43 |
| - (session/message {:op "inspect-pop"}) |
44 |
| - (session/message {:op "inspect-pop"}))))))) |
| 131 | + (value (do |
| 132 | + (session/message {:op "inspect-pop"}) |
| 133 | + (session/message {:op "inspect-pop"}))))))) |
45 | 134 |
|
46 | 135 | (deftest push-empty-integration-test
|
47 | 136 | (testing "pushing an empty inspector index renders nil"
|
48 | 137 | (is (= nil-result
|
49 |
| - (:value (session/message {:op "inspect-push" |
50 |
| - :idx 1})))))) |
| 138 | + (value (session/message {:op "inspect-push" |
| 139 | + :idx 1})))))) |
51 | 140 |
|
52 | 141 | (deftest push-empty-idempotent-integration-test
|
53 | 142 | (testing "pushing an empty inspector index is idempotent"
|
54 | 143 | (is (= nil-result
|
55 |
| - (:value (do |
56 |
| - (session/message {:op "inspect-push" |
57 |
| - :idx 1}) |
58 |
| - (session/message {:op "inspect-push" |
59 |
| - :idx 1}))))))) |
| 144 | + (value (do |
| 145 | + (session/message {:op "inspect-push" |
| 146 | + :idx 1}) |
| 147 | + (session/message {:op "inspect-push" |
| 148 | + :idx 1}))))))) |
60 | 149 |
|
61 | 150 | (deftest refresh-empty-integration-test
|
62 | 151 | (testing "refreshing an empty inspector renders nil"
|
63 | 152 | (is (= nil-result
|
64 |
| - (:value (session/message {:op "inspect-refresh"})))))) |
| 153 | + (value (session/message {:op "inspect-refresh"})))))) |
65 | 154 |
|
66 | 155 | (deftest refresh-empty-idempotent-integration-test
|
67 | 156 | (testing "refreshing an empty inspector renders nil"
|
68 | 157 | (is (= nil-result
|
69 |
| - (:value (do |
70 |
| - (session/message {:op "inspect-refresh"}) |
71 |
| - (session/message {:op "inspect-refresh"}))))))) |
| 158 | + (value (do |
| 159 | + (session/message {:op "inspect-refresh"}) |
| 160 | + (session/message {:op "inspect-refresh"}))))))) |
72 | 161 |
|
73 | 162 | (deftest exception-integration-test
|
74 | 163 | (testing "eval op error handling"
|
|
150 | 239 | (deftest inspect-var-integration-test
|
151 | 240 | (testing "rendering a var"
|
152 | 241 | (is (= var-result
|
153 |
| - (:value (session/message {:op "eval" |
154 |
| - :inspect "true" |
155 |
| - :code "#'*assert*"})))))) |
| 242 | + (value (session/message {:op "eval" |
| 243 | + :inspect "true" |
| 244 | + :code "#'*assert*"})))))) |
156 | 245 |
|
157 | 246 | (deftest inspect-expr-integration-test
|
158 | 247 | (testing "rendering an expr"
|
159 | 248 | (is (= inspect-result
|
160 |
| - (:value (session/message {:op "eval" |
161 |
| - :inspect "true" |
162 |
| - :code code})))))) |
| 249 | + (value (session/message {:op "eval" |
| 250 | + :inspect "true" |
| 251 | + :code code})))))) |
163 | 252 |
|
164 | 253 | (deftest push-integration-test
|
165 | 254 | (testing "pushing a rendered expr inspector idx"
|
166 | 255 | (is (= push-result
|
167 |
| - (:value (do |
168 |
| - (session/message {:op "eval" |
169 |
| - :inspect "true" |
170 |
| - :code code}) |
171 |
| - (session/message {:op "inspect-push" |
172 |
| - :idx 2}))))))) |
| 256 | + (value (do |
| 257 | + (session/message {:op "eval" |
| 258 | + :inspect "true" |
| 259 | + :code code}) |
| 260 | + (session/message {:op "inspect-push" |
| 261 | + :idx 2}))))))) |
173 | 262 |
|
174 | 263 | (deftest next-page-integration-test
|
175 | 264 | (testing "jumping to next page in a rendered expr inspector"
|
176 | 265 | (is (= next-page-result
|
177 |
| - (:value (do |
178 |
| - (session/message {:op "eval" |
179 |
| - :inspect "true" |
180 |
| - :code "(map identity (range 35))"}) |
181 |
| - (session/message {:op "inspect-next-page"}))))))) |
| 266 | + (value (do |
| 267 | + (session/message {:op "eval" |
| 268 | + :inspect "true" |
| 269 | + :code "(map identity (range 35))"}) |
| 270 | + (session/message {:op "inspect-next-page"}))))))) |
182 | 271 |
|
183 | 272 | (deftest prev-page-integration-test
|
184 | 273 | (testing "jumping to previous page in a rendered expr inspector"
|
185 | 274 | (is (= first-page-result
|
186 |
| - (:value (do |
187 |
| - (session/message {:op "eval" |
188 |
| - :inspect "true" |
189 |
| - :code "(map identity (range 35))"}) |
190 |
| - (session/message {:op "inspect-set-page-size" |
191 |
| - :page-size 5}) |
192 |
| - (session/message {:op "inspect-next-page"}) |
193 |
| - (session/message {:op "inspect-prev-page"}))))))) |
| 275 | + (value (do |
| 276 | + (session/message {:op "eval" |
| 277 | + :inspect "true" |
| 278 | + :code "(map identity (range 35))"}) |
| 279 | + (session/message {:op "inspect-set-page-size" |
| 280 | + :page-size 5}) |
| 281 | + (session/message {:op "inspect-next-page"}) |
| 282 | + (session/message {:op "inspect-prev-page"}))))))) |
194 | 283 |
|
195 | 284 | (deftest pop-integration-test
|
196 | 285 | (testing "popping a rendered expr inspector"
|
197 | 286 | (is (= inspect-result
|
198 |
| - (:value (do |
199 |
| - (session/message {:op "eval" |
200 |
| - :inspect "true" |
201 |
| - :code code}) |
202 |
| - (session/message {:op "inspect-push" |
203 |
| - :idx 1}) |
204 |
| - (session/message {:op "inspect-pop"}))))))) |
| 287 | + (value (do |
| 288 | + (session/message {:op "eval" |
| 289 | + :inspect "true" |
| 290 | + :code code}) |
| 291 | + (session/message {:op "inspect-push" |
| 292 | + :idx 1}) |
| 293 | + (session/message {:op "inspect-pop"}))))))) |
205 | 294 |
|
206 | 295 | (deftest refresh-integration-test
|
207 | 296 | (testing "refreshing a rendered expr inspector"
|
208 | 297 | (is (= inspect-result
|
209 |
| - (:value (do |
210 |
| - (session/message {:op "eval" |
211 |
| - :inspect "true" |
212 |
| - :code code}) |
213 |
| - (session/message {:op "inspect-refresh"}))))))) |
| 298 | + (value (do |
| 299 | + (session/message {:op "eval" |
| 300 | + :inspect "true" |
| 301 | + :code code}) |
| 302 | + (session/message {:op "inspect-refresh"}))))))) |
214 | 303 |
|
215 | 304 | (deftest refresh-idempotent-integration-test
|
216 | 305 | (testing "refreshing a rendered expr inspector is idempotent"
|
217 | 306 | (is (= inspect-result
|
218 |
| - (:value (do |
219 |
| - (session/message {:op "eval" |
220 |
| - :inspect "true" |
221 |
| - :code code}) |
222 |
| - (session/message {:op "inspect-refresh"}) |
223 |
| - (session/message {:op "inspect-refresh"}))))))) |
| 307 | + (value (do |
| 308 | + (session/message {:op "eval" |
| 309 | + :inspect "true" |
| 310 | + :code code}) |
| 311 | + (session/message {:op "inspect-refresh"}) |
| 312 | + (session/message {:op "inspect-refresh"}))))))) |
224 | 313 |
|
225 | 314 | (deftest refresh-after-push-integration-test
|
226 | 315 | (testing "refreshing a rendered expr inspector after an idx is pushed"
|
227 | 316 | (is (= push-result
|
228 |
| - (:value (do |
229 |
| - (session/message {:op "eval" |
230 |
| - :inspect "true" |
231 |
| - :code code}) |
232 |
| - (session/message {:op "inspect-push" |
233 |
| - :idx 2}) |
234 |
| - (session/message {:op "inspect-refresh"}))))))) |
| 317 | + (value (do |
| 318 | + (session/message {:op "eval" |
| 319 | + :inspect "true" |
| 320 | + :code code}) |
| 321 | + (session/message {:op "inspect-push" |
| 322 | + :idx 2}) |
| 323 | + (session/message {:op "inspect-refresh"}))))))) |
235 | 324 |
|
236 | 325 | (deftest session-binding-integration-test
|
237 | 326 | (testing "session bindings can be inspected"
|
238 | 327 | (is (= inspect-result
|
239 |
| - (:value (do |
240 |
| - (session/message {:op "eval" |
241 |
| - :inspect "true" |
242 |
| - :code code}) |
243 |
| - (session/message {:op "eval" |
244 |
| - :inspect "true" |
245 |
| - :code "*1"}))))))) |
| 328 | + (value (do |
| 329 | + (session/message {:op "eval" |
| 330 | + :inspect "true" |
| 331 | + :code code}) |
| 332 | + (session/message {:op "eval" |
| 333 | + :inspect "true" |
| 334 | + :code "*1"}))))))) |
246 | 335 |
|
247 | 336 | (deftest page-size-integration-test
|
248 | 337 | (testing "page size can be changed in the eval op itself"
|
|
0 commit comments