Add DOH-based unit test harness for OpenSRF JavaScript
[OpenSRF.git] / src / javascript / tests / testJSON_v1.js
1 dojo.provide('opensrf.tests.testJSON_v1');
2
3 dojo.require('DojoSRF');
4
5 doh.register("JSONTests", [
6     function test_version() {
7         doh.assertTrue(JSON_version() == 'wrapper');
8     },
9     function test_js2JSON() {
10         // Solo nulls and booleans are stringified XXX
11         doh.assertTrue(js2JSON(null) === "null");
12         doh.assertTrue(js2JSON(true) === "true");
13         doh.assertTrue(js2JSON(false) === "false");
14         doh.assertTrue(js2JSON(0) === 0);
15         doh.assertTrue(js2JSON(1.5) === 1.5);
16         doh.assertTrue(js2JSON(.7) === .7);
17         doh.assertTrue(js2JSON("") == '""');
18         doh.assertTrue(js2JSON("foo") == '"foo"');
19         // Escape sequences
20         doh.assertTrue(js2JSON("foo\n\t\n") == '"foo\\n\\t\\n"');
21         doh.assertTrue(js2JSON({"foo":"bar"}) == '{"foo":"bar"}');
22         doh.assertTrue(js2JSON({"foo":true}) == '{"foo":true}');
23         doh.assertTrue(js2JSON({"foo":0}) == '{"foo":0}');
24         doh.assertTrue(js2JSON([0,"foo",null,"true",true]) === '[0,"foo",null,"true",true]');
25         // Order of object attributes is not guaranteed
26         doh.assertTrue(js2JSON({"foo":{"one":null,"two":2}}) == '{"foo":{"two":2,"one":null}}');
27     },
28     function test_js2JSONRaw() {
29         // Solo nulls and booleans are stringified XXX
30         doh.assertTrue(js2JSONRaw(null) === "null");
31         doh.assertTrue(js2JSONRaw(true) === "true");
32         doh.assertTrue(js2JSONRaw(false) === "false");
33         doh.assertTrue(js2JSONRaw(0) === 0);
34         doh.assertTrue(js2JSONRaw(1.5) === 1.5);
35         doh.assertTrue(js2JSONRaw(.7) === .7);
36         doh.assertTrue(js2JSONRaw("") == '""');
37         doh.assertTrue(js2JSONRaw("foo") == '"foo"');
38         // Escape sequences
39         doh.assertTrue(js2JSONRaw("foo\n\t\n") == '"foo\\n\\t\\n"');
40         doh.assertTrue(js2JSONRaw({"foo":"bar"}) == '{"foo":"bar"}');
41         doh.assertTrue(js2JSONRaw({"foo":true}) == '{"foo":true}');
42         doh.assertTrue(js2JSONRaw({"foo":0}) == '{"foo":0}');
43         doh.assertTrue(js2JSONRaw([0,"foo",null,"true",true]) === '[0,"foo",null,"true",true]');
44         // Order of object attributes is not guaranteed
45         doh.assertTrue(js2JSONRaw({"foo":{"one":null,"two":2}}) == '{"foo":{"two":2,"one":null}}');
46     },
47     function test_JSON2js() {
48         // Standalone quoted nulls and booleans are converted to primitives
49         doh.assertTrue(JSON2js(null) === null);
50         doh.assertTrue(JSON2js("null") === null);
51         doh.assertTrue(JSON2js(true) === true);
52         doh.assertTrue(JSON2js("true") === true);
53         doh.assertTrue(JSON2js(false) === false);
54         doh.assertTrue(JSON2js("false") === false);
55         // Zero is zero and only zero
56         doh.assertTrue(JSON2js(0) === 0);
57         // Empty string
58         doh.assertTrue(JSON2js('""') === "");
59         // String
60         doh.assertTrue(JSON2js('"foo"') == "foo");
61         // Array; access an index
62         doh.assertTrue(JSON2js('[0,1,2,3,4,5]')[1] == 1);
63         // Object; access a key
64         doh.assertTrue(JSON2js('{"foo":"bar"}').foo == "bar");
65         doh.assertTrue(JSON2js('{"foo":{"two":2,"one":null}}').foo.one === null);
66         doh.assertTrue(JSON2js('{"foo":{"two":2,"one":"null"}}').foo.one === "null");
67     }
68 ]);