Mercurial > lasercutter
view src/clojure/contrib/test_contrib/test_json.clj @ 10:ef7dbbd6452c
added clojure source goodness
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 21 Aug 2010 06:25:44 -0400 |
parents | |
children |
line wrap: on
line source
1 (ns clojure.contrib.test-json2 (:use clojure.test clojure.contrib.json))4 (deftest can-read-from-pushback-reader5 (let [s (java.io.PushbackReader. (java.io.StringReader. "42"))]6 (is (= 42 (read-json s)))))8 (deftest can-read-from-reader9 (let [s (java.io.StringReader. "42")]10 (is (= 42 (read-json s)))))12 (deftest can-read-numbers13 (is (= 42 (read-json "42")))14 (is (= -3 (read-json "-3")))15 (is (= 3.14159 (read-json "3.14159")))16 (is (= 6.022e23 (read-json "6.022e23"))))18 (deftest can-read-null19 (is (= nil (read-json "null"))))21 (deftest can-read-strings22 (is (= "Hello, World!" (read-json "\"Hello, World!\""))))24 (deftest handles-escaped-slashes-in-strings25 (is (= "/foo/bar" (read-json "\"\\/foo\\/bar\""))))27 (deftest handles-unicode-escapes28 (is (= " \u0beb " (read-json "\" \\u0bEb \""))))30 (deftest handles-escaped-whitespace31 (is (= "foo\nbar" (read-json "\"foo\\nbar\"")))32 (is (= "foo\rbar" (read-json "\"foo\\rbar\"")))33 (is (= "foo\tbar" (read-json "\"foo\\tbar\""))))35 (deftest can-read-booleans36 (is (= true (read-json "true")))37 (is (= false (read-json "false"))))39 (deftest can-ignore-whitespace40 (is (= nil (read-json "\r\n null"))))42 (deftest can-read-arrays43 (is (= [1 2 3] (read-json "[1,2,3]")))44 (is (= ["Ole" "Lena"] (read-json "[\"Ole\", \r\n \"Lena\"]"))))46 (deftest can-read-objects47 (is (= {:a 1, :b 2} (read-json "{\"a\": 1, \"b\": 2}"))))49 (deftest can-read-nested-structures50 (is (= {:a [1 2 {:b [3 "four"]} 5.5]}51 (read-json "{\"a\":[1,2,{\"b\":[3,\"four\"]},5.5]}"))))53 (deftest disallows-non-string-keys54 (is (thrown? Exception (read-json "{26:\"z\""))))56 (deftest disallows-barewords57 (is (thrown? Exception (read-json " foo "))))59 (deftest disallows-unclosed-arrays60 (is (thrown? Exception (read-json "[1, 2, "))))62 (deftest disallows-unclosed-objects63 (is (thrown? Exception (read-json "{\"a\":1, "))))65 (deftest can-get-string-keys66 (is (= {"a" [1 2 {"b" [3 "four"]} 5.5]}67 (read-json "{\"a\":[1,2,{\"b\":[3,\"four\"]},5.5]}" false true nil))))69 (declare *pass1-string*)71 (deftest pass1-test72 (let [input (read-json *pass1-string* false true nil)]73 (is (= "JSON Test Pattern pass1" (first input)))74 (is (= "array with 1 element" (get-in input [1 "object with 1 member" 0])))75 (is (= 1234567890 (get-in input [8 "integer"])))76 (is (= "rosebud" (last input)))))78 ; from http://www.json.org/JSON_checker/test/pass1.json79 (def *pass1-string*80 "[81 \"JSON Test Pattern pass1\",82 {\"object with 1 member\":[\"array with 1 element\"]},83 {},84 [],85 -42,86 true,87 false,88 null,89 {90 \"integer\": 1234567890,91 \"real\": -9876.543210,92 \"e\": 0.123456789e-12,93 \"E\": 1.234567890E+34,94 \"\": 23456789012E66,95 \"zero\": 0,96 \"one\": 1,97 \"space\": \" \",98 \"quote\": \"\\\"\",99 \"backslash\": \"\\\\\",100 \"controls\": \"\\b\\f\\n\\r\\t\",101 \"slash\": \"/ & \\/\",102 \"alpha\": \"abcdefghijklmnopqrstuvwyz\",103 \"ALPHA\": \"ABCDEFGHIJKLMNOPQRSTUVWYZ\",104 \"digit\": \"0123456789\",105 \"0123456789\": \"digit\",106 \"special\": \"`1~!@#$%^&*()_+-={':[,]}|;.</>?\",107 \"hex\": \"\\u0123\\u4567\\u89AB\\uCDEF\\uabcd\\uef4A\",108 \"true\": true,109 \"false\": false,110 \"null\": null,111 \"array\":[ ],112 \"object\":{ },113 \"address\": \"50 St. James Street\",114 \"url\": \"http://www.JSON.org/\",115 \"comment\": \"// /* <!-- --\",116 \"# -- --> */\": \" \",117 \" s p a c e d \" :[1,2 , 3119 ,121 4 , 5 , 6 ,7 ],\"compact\":[1,2,3,4,5,6,7],122 \"jsontext\": \"{\\\"object with 1 member\\\":[\\\"array with 1 element\\\"]}\",123 \"quotes\": \"" \\u0022 %22 0x22 034 "\",124 \"\\/\\\\\\\"\\uCAFE\\uBABE\\uAB98\\uFCDE\\ubcda\\uef4A\\b\\f\\n\\r\\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?\"125 : \"A key can be any string\"126 },127 0.5 ,98.6128 ,129 99.44130 ,132 1066,133 1e1,134 0.1e1,135 1e-1,136 1e00,2e+00,2e-00137 ,\"rosebud\"]")140 (deftest can-print-json-strings141 (is (= "\"Hello, World!\"" (json-str "Hello, World!")))142 (is (= "\"\\\"Embedded\\\" Quotes\"" (json-str "\"Embedded\" Quotes"))))144 (deftest can-print-unicode145 (is (= "\"\\u1234\\u4567\"" (json-str "\u1234\u4567"))))147 (deftest can-print-json-null148 (is (= "null" (json-str nil))))150 (deftest can-print-json-arrays151 (is (= "[1,2,3]" (json-str [1 2 3])))152 (is (= "[1,2,3]" (json-str (list 1 2 3))))153 (is (= "[1,2,3]" (json-str (sorted-set 1 2 3))))154 (is (= "[1,2,3]" (json-str (seq [1 2 3])))))156 (deftest can-print-java-arrays157 (is (= "[1,2,3]" (json-str (into-array [1 2 3])))))159 (deftest can-print-empty-arrays160 (is (= "[]" (json-str [])))161 (is (= "[]" (json-str (list))))162 (is (= "[]" (json-str #{}))))164 (deftest can-print-json-objects165 (is (= "{\"a\":1,\"b\":2}" (json-str (sorted-map :a 1 :b 2)))))167 (deftest object-keys-must-be-strings168 (is (= "{\"1\":1,\"2\":2") (json-str (sorted-map 1 1 2 2))))170 (deftest can-print-empty-objects171 (is (= "{}" (json-str {}))))173 (deftest accept-sequence-of-nils174 (is (= "[null,null,null]" (json-str [nil nil nil]))))176 (deftest error-on-nil-keys177 (is (thrown? Exception (json-str {nil 1}))))179 (deftest characters-in-symbols-are-escaped180 (is (= "\"foo\\u1b1b\"" (json-str (symbol "foo\u1b1b")))))182 ;;; Pretty-printer184 (deftest pretty-printing185 (let [x (read-json *pass1-string* false)]186 (is (= x (read-json (with-out-str (pprint-json x)) false)))))