source: Dev/branches/rest-dojo-ui/client/dojo/tests/json.js @ 263

Last change on this file since 263 was 256, checked in by hendrikvanantwerpen, 13 years ago

Reworked project structure based on REST interaction and Dojo library. As
soon as this is stable, the old jQueryUI branch can be removed (it's
kept for reference).

File size: 6.7 KB
Line 
1define(["../main", "doh", "../json"], function(dojo, doh, JSON){
2
3        var mustThrow = function(json){
4                try{
5                        JSON.parse(json, true);
6                }catch(e){
7                        return;
8                }
9                throw new Error("Invalid JSON " + json + " should have been rejected");
10        };
11
12        doh.register("tests.json", [
13                // all tests below are taken from #4.2 of the CSS3 Color Module
14                function simpleString(t){ t.is("bar", JSON.parse('{"foo":"bar"}').foo)},
15                function simpleTrue(t){ t.is(true, JSON.parse('{"foo":true}').foo)},
16                function simpleFalse(t){ t.is(false, JSON.parse('{"foo":false}').foo)},
17                function simpleNull(t){ t.is(null, JSON.parse('{"foo":null}').foo)},
18                function simpleNumber(t){ t.is(3.3, JSON.parse('{"foo":3.3}', true).foo)},
19                function strictString(t){ t.is("bar", JSON.parse('{"foo":"bar"}', true).foo)},
20                function strictStringEsc(t){ t.is("b\n\t\"ar()", JSON.parse('{"foo":"b\\n\\t\\"ar()"}', true).foo)},
21                function strictTrue(t){ t.is(true, JSON.parse('{"foo":true}', true).foo)},
22                function strictFalse(t){ t.is(false, JSON.parse('{"foo":false}', true).foo)},
23                function strictNull(t){ t.is(null, JSON.parse('{"foo":null}', true).foo)},
24                function strictNumber(t){ t.is(3.3, JSON.parse('{"foo":3.3}', true).foo)},
25                function strictNumberNeg(t){ t.is(-3.3, JSON.parse('{"foo":-3.3}', true).foo)},
26                function exponentNegative(t){ t.is(3.3e-33, JSON.parse('{"foo":3.3e-33}', true).foo)},
27                function exponent(t){ t.is(3.3e33, JSON.parse('{"foo":3.3e33}', true).foo)},
28                function array(t){ t.is(3, JSON.parse('{"foo":[3,true,[]]}', true).foo[0])},
29                function badCall(t){ mustThrow('{"foo":alert()}')},
30                function badMath(t){ mustThrow('{"foo":3+4}')},
31                function badIndex(t){ mustThrow('{"foo":"bar"}[3]')},
32                function badKey(t){ mustThrow('{foo:"bar"}')},
33                //function badKey2(t){ mustThrow('{2:"bar"}')},
34                function badUnbalanced(t){ mustThrow('[')},
35                function badUnbalanced2(t){ mustThrow('}')},
36                function badType(t){ mustThrow('["foo":"bar"]')},
37                function badUnbalanced2(t){ mustThrow('}')},
38                function serializeString(t){ t.is('{"foo":"bar"}', JSON.stringify({"foo":"bar"}))},
39                function serializeNull(t){ t.is('{"foo":null}', JSON.stringify({"foo":null}))},
40                function serializeFunction(t){ t.is('{}', JSON.stringify({"foo":function(){}}))},
41                function serializeNaN(t){ t.is('{"foo":null}', JSON.stringify({"foo":NaN}))},
42                function serializeInfinity(t){ t.is('{"foo":null}', JSON.stringify({"foo":Infinity}))},
43                // there is differences in how many decimals of accuracies in seconds in how Dates are serialized between browsers
44                function serializeDate(t){ t.t(/1970-01-01T00:00:00.*Z/.test(JSON.parse(JSON.stringify({"foo":new Date(1)})).foo));},
45                function serializeCircular(t){
46                        try{
47                                var a = {};
48                                a.a = a;
49                                console.log("circular: " + JSON.stringify(a));
50                        }catch(e){
51                                return;
52                        }
53                        throw new Error("stringify must throw for circular references");
54
55                },
56                /*Apparently Firefox doesn't pass the key to the toJSON method*/
57                function serializeToJSON(t){ t.is('{"foo":{"name":"value"}}', JSON.stringify({foo:{toJSON:function(key){return {name:"value"};}}}))}
58        ]);
59
60var smallDataSet = {
61        prop1: null,
62        prop2: true,
63        prop3: [],
64        prop4: 3.4325222223332266,
65        prop5: 10003,
66        prop6: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean semper",
67        prop7: "sagittis velit. Cras in mi. Duis porta mauris ut ligula. Proin porta rutrum",
68        prop8: "lacus. Etiam consequat scelerisque quam. Nulla facilisi. Maecenas luctus",
69        prop9: "venenatis nulla. In sit amet dui non mi semper iaculis. Sed molestie",
70        prop10: "tortor at ipsum. Morbi dictum rutrum magna. Sed vitae risus." +
71                "Aliquam vitae enim. Duis scelerisque metus auctor est venenatis imperdiet." +
72                "Fusce dignissim porta augue. Nulla vestibulum. Integer lorem nunc," +
73                "ullamcorper a, commodo ac, malesuada sed, dolor. Aenean id mi in massa" +
74                "bibendum suscipit. Integer eros. Nullam suscipit mauris. In pellentesque." +
75                "Mauris ipsum est, pharetra semper, pharetra in, viverra quis, tellus. Etiam" +
76                "purus. Quisque egestas, tortor ac cursus lacinia, felis leo adipiscing" +
77                "nisi, et rhoncus elit dolor eget eros. Fusce ut quam. Suspendisse eleifend" +
78                "leo vitae ligula. Nulla facilisi."
79};
80var smallJson = JSON.stringify(smallDataSet);
81
82var i, mediumDataSet = [];
83for(i = 0; i < 20; i++){
84        mediumDataSet.push({
85                prop1: null,
86                prop2: true,
87                prop3: false,
88                prop4: 3.4325222223332266 - i,
89                prop5: 10003 + i,
90                prop6: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean semper",
91                prop7: "sagittis velit. Cras in mi. Duis porta mauris ut ligula. Proin porta rutrum",
92                prop8: "lacus. Etiam consequat scelerisque quam. Nulla facilisi. Maecenas luctus",
93                prop9: "venenatis nulla. In sit amet dui non mi semper iaculis. Sed molestie",
94                prop10: "tortor at ipsum. Morbi dictum rutrum magna. Sed vitae risus." +
95                        "Aliquam vitae enim."
96        });
97}
98var mediumJson = JSON.stringify(mediumDataSet);
99
100var largeDataSet = [];
101for(i = 0; i < 100; i++){
102        largeDataSet.push({
103                prop1: null,
104                prop2: true,
105                prop3: false,
106                prop4: 3.4325222223332266 - i,
107                prop5: ["Mauris ipsum est, pharetra semper, pharetra in, viverra quis, tellus. Etiam" +
108                        "purus. Quisque egestas, tortor ac cursus lacinia, felis leo adipiscing",
109                        "nisi, et rhoncus elit dolor eget eros. Fusce ut quam. Suspendisse eleifend" +
110                        "leo vitae ligula. Nulla facilisi."
111                ],
112                prop6: "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean semper",
113                prop7: "sagittis velit. Cras in mi. Duis porta mauris ut ligula. Proin porta rutrum",
114                prop8: "lacus. Etiam consequat scelerisque quam. Nulla facilisi. Maecenas luctus",
115                prop9: "venenatis nulla. In sit amet dui non mi semper iaculis. Sed molestie",
116        prop10: "tortor at ipsum. Morbi dictum rutrum magna. Sed vitae risus." +
117                "Aliquam vitae enim. Duis scelerisque metus auctor est venenatis imperdiet." +
118                "Fusce dignissim porta augue. Nulla vestibulum. Integer lorem nunc," +
119                "ullamcorper a, commodo ac, malesuada sed, dolor. Aenean id mi in massa" +
120                "bibendum suscipit. Integer eros. Nullam suscipit mauris. In pellentesque."
121        });
122}
123var largeJson = JSON.stringify(largeDataSet);
124
125doh.register("tests.json.performance", [
126                // all tests below are taken from #4.2 of the CSS3 Color Module
127                function small(){
128                        var i = 10000;
129                        while(i-->0){
130                                var result = JSON.parse(smallJson);
131                        }
132                },
133                function strictSmall(){
134                        var i = 10000;
135                        while(i-->0){
136                                var result = JSON.parse(smallJson, true);
137                        }
138                },
139                function medium(){
140                        var i = 1000;
141                        while(i-->0){
142                                var result = JSON.parse(mediumJson);
143                        }
144                },
145                function strictMedium(){
146                        var i = 1000;
147                        while(i-->0){
148                                var result = JSON.parse(mediumJson, true);
149                        }
150                },
151                function large(){
152                        var i = 100;
153                        while(i-->0){
154                                var result = JSON.parse(largeJson);
155                        }
156                },
157                function strictLarge(){
158                        var i = 100;
159                        while(i-->0){
160                                var result = JSON.parse(largeJson, true);
161                        }
162                }
163        ]);
164
165});
166
Note: See TracBrowser for help on using the repository browser.