|
38 | 38 | path-files-fixture
|
39 | 39 | reset-data-readers-fixture)
|
40 | 40 |
|
| 41 | +(deftest data-readers-test |
| 42 | + (alter-var-root #'*data-readers* assoc |
| 43 | + 'test/test vector |
| 44 | + 'test/test2 list) |
| 45 | + |
| 46 | + (testing "use var root value" |
| 47 | + (is (= '[x] (read-string "#test/test x")))) |
| 48 | + |
| 49 | + (testing "use bound value" |
| 50 | + (binding [*data-readers* {'test/test (partial vector :pass)}] |
| 51 | + (is (= '[:pass x] (read-string "#test/test x"))) |
| 52 | + (is (thrown? reader/SyntaxError |
| 53 | + #"No data reader found for tag #test/test2" |
| 54 | + (read-string "#test/test2 x"))))) |
| 55 | + |
| 56 | + (testing "fallback to defaults" |
| 57 | + (is (= #py {} (read-string "#py {}")))) |
| 58 | + |
| 59 | + (testing "override defaults" |
| 60 | + (binding [*data-readers* {'py identity}] |
| 61 | + (is (= {} (read-string "#py {}")))))) |
| 62 | + |
41 | 63 | (def custom-data-reader list)
|
42 | 64 |
|
43 | 65 | (deftest load-data-readers-from-path-test
|
|
161 | 183 | (is (thrown-with-msg? basilisp.lang.exception/ExceptionInfo
|
162 | 184 | #"Conflicting data-reader mapping"
|
163 | 185 | (#'basilisp.core/load-data-readers)))))
|
| 186 | + |
| 187 | +(deftest default-data-readers-fn-test |
| 188 | + (testing "raise syntax exception by default" |
| 189 | + (is (thrown-with-msg? reader/SyntaxError |
| 190 | + #"No data reader found for tag #default" |
| 191 | + (read-string "#default nil")))) |
| 192 | + |
| 193 | + (testing "use *default-data-reader-fn* binding" |
| 194 | + (binding [*default-data-reader-fn* vector] |
| 195 | + (is (= ['default nil] (read-string "#default nil")))))) |
0 commit comments