1 dojo.provide('opensrf.tests.testJSON_v1');
3 dojo.require('DojoSRF');
5 doh.register("JSONTests", [
6 function test_version() {
7 doh.assertTrue(JSON_version() == 'wrapper');
9 function test_decodeJS() {
10 doh.assertTrue(decodeJS(0) === 0);
11 doh.assertTrue(decodeJS(null) === null);
12 doh.assertTrue(decodeJS("") === "");
14 function test_encodeJS() {
15 doh.assertTrue(encodeJS(0) === 0);
16 doh.assertTrue(encodeJS(null) === null);
17 doh.assertTrue(encodeJS("") === "");
19 function test_js2JSON() {
20 // Solo nulls and booleans are stringified XXX
21 doh.assertTrue(js2JSON(null) === "null");
22 doh.assertTrue(js2JSON(true) === "true");
23 doh.assertTrue(js2JSON(false) === "false");
24 doh.assertTrue(js2JSON(0) === 0);
25 doh.assertTrue(js2JSON(1.5) === 1.5);
26 doh.assertTrue(js2JSON(.7) === .7);
27 doh.assertTrue(js2JSON("") == '""');
28 doh.assertTrue(js2JSON("foo") == '"foo"');
30 doh.assertTrue(js2JSON("foo\n\t\n") == '"foo\\n\\t\\n"');
31 doh.assertTrue(js2JSON({"foo":"bar"}) == '{"foo":"bar"}');
32 doh.assertTrue(js2JSON({"foo":true}) == '{"foo":true}');
33 doh.assertTrue(js2JSON({"foo":0}) == '{"foo":0}');
34 doh.assertTrue(js2JSON([0,"foo",null,"true",true]) === '[0,"foo",null,"true",true]');
35 // Order of object attributes is not guaranteed
36 doh.assertTrue(js2JSON({"foo":{"one":null,"two":2}}) == '{"foo":{"two":2,"one":null}}');
38 function test_js2JSONRaw() {
39 // Solo nulls and booleans are stringified XXX
40 doh.assertTrue(js2JSONRaw(null) === "null");
41 doh.assertTrue(js2JSONRaw(true) === "true");
42 doh.assertTrue(js2JSONRaw(false) === "false");
43 doh.assertTrue(js2JSONRaw(0) === 0);
44 doh.assertTrue(js2JSONRaw(1.5) === 1.5);
45 doh.assertTrue(js2JSONRaw(.7) === .7);
46 doh.assertTrue(js2JSONRaw("") == '""');
47 doh.assertTrue(js2JSONRaw("foo") == '"foo"');
49 doh.assertTrue(js2JSONRaw("foo\n\t\n") == '"foo\\n\\t\\n"');
50 doh.assertTrue(js2JSONRaw({"foo":"bar"}) == '{"foo":"bar"}');
51 doh.assertTrue(js2JSONRaw({"foo":true}) == '{"foo":true}');
52 doh.assertTrue(js2JSONRaw({"foo":0}) == '{"foo":0}');
53 doh.assertTrue(js2JSONRaw([0,"foo",null,"true",true]) === '[0,"foo",null,"true",true]');
54 // Order of object attributes is not guaranteed
55 doh.assertTrue(js2JSONRaw({"foo":{"one":null,"two":2}}) == '{"foo":{"two":2,"one":null}}');
57 function test_JSON2jsRaw() {
58 // Standalone quoted nulls and booleans are converted to primitives
59 doh.assertTrue(JSON2jsRaw(null) === null);
60 doh.assertTrue(JSON2jsRaw("null") === null);
61 doh.assertTrue(JSON2jsRaw(true) === true);
62 doh.assertTrue(JSON2jsRaw("true") === true);
63 doh.assertTrue(JSON2jsRaw(false) === false);
64 doh.assertTrue(JSON2jsRaw("false") === false);
65 // Zero is zero and only zero
66 doh.assertTrue(JSON2jsRaw(0) === 0);
68 doh.assertTrue(JSON2jsRaw('""') === "");
70 doh.assertTrue(JSON2jsRaw('"foo"') == "foo");
71 // Array; access an index
72 doh.assertTrue(JSON2jsRaw('[0,1,2,3,4,5]')[1] == 1);
73 // Object; access a key
74 doh.assertTrue(JSON2jsRaw('{"foo":"bar"}').foo == "bar");
75 doh.assertTrue(JSON2jsRaw('{"foo":{"two":2,"one":null}}').foo.one === null);
76 doh.assertTrue(JSON2jsRaw('{"foo":{"two":2,"one":"null"}}').foo.one === "null");
78 function test_JSON2js() {
79 // Standalone quoted nulls and booleans are converted to primitives
80 doh.assertTrue(JSON2js(null) === null);
81 doh.assertTrue(JSON2js("null") === null);
82 doh.assertTrue(JSON2js(true) === true);
83 doh.assertTrue(JSON2js("true") === true);
84 doh.assertTrue(JSON2js(false) === false);
85 doh.assertTrue(JSON2js("false") === false);
86 // Zero is zero and only zero
87 doh.assertTrue(JSON2js(0) === 0);
89 doh.assertTrue(JSON2js('""') === "");
91 doh.assertTrue(JSON2js('"foo"') == "foo");
92 // Array; access an index
93 doh.assertTrue(JSON2js('[0,1,2,3,4,5]')[1] == 1);
94 // Object; access a key
95 doh.assertTrue(JSON2js('{"foo":"bar"}').foo == "bar");
96 doh.assertTrue(JSON2js('{"foo":{"two":2,"one":null}}').foo.one === null);
97 doh.assertTrue(JSON2js('{"foo":{"two":2,"one":"null"}}').foo.one === "null");