1 | dojo.provide("dojox.json.tests.ref"); |
---|
2 | dojo.require("dojox.json.ref"); |
---|
3 | |
---|
4 | doh.register("dojox.json.tests.ref", [ |
---|
5 | function fromRefJson(t) { |
---|
6 | var testStr = '{a:{$ref:"#"},id:"root",c:{d:"e",f:{$ref:"root.c"}},b:{$ref:"#.c"},"an array":["a string"],"a string":{$ref:"#an array.0"}}'; |
---|
7 | |
---|
8 | var mirrorObj = dojox.json.ref.fromJson(testStr); |
---|
9 | t.assertEqual(mirrorObj, mirrorObj.a); |
---|
10 | t.assertEqual(mirrorObj.c, mirrorObj.c.f); |
---|
11 | t.assertEqual(mirrorObj.c, mirrorObj.b); |
---|
12 | t.assertEqual(mirrorObj["a string"], "a string"); |
---|
13 | }, |
---|
14 | function toAndFromRefJson(t) { |
---|
15 | var testObj = {a:{},b:{"has space":{}}}; |
---|
16 | testObj.a.d= testObj; |
---|
17 | var arrayItem = testObj.array = [{}]; |
---|
18 | arrayItem[1] = arrayItem[0]; |
---|
19 | testObj.b.g=testObj.a; |
---|
20 | testObj.b["has space"].f = testObj.b; |
---|
21 | testObj.b.h=testObj.a; |
---|
22 | var mirrorObj = dojox.json.ref.fromJson(dojox.json.ref.toJson(testObj)); |
---|
23 | t.assertEqual(mirrorObj.a.d, mirrorObj); |
---|
24 | t.assertEqual(mirrorObj.b.g, mirrorObj.a); |
---|
25 | t.assertEqual(mirrorObj.b["has space"].f, mirrorObj.b); |
---|
26 | t.assertEqual(mirrorObj.b.h, mirrorObj.a); |
---|
27 | t.assertEqual(mirrorObj.array[0], mirrorObj.array[1]); |
---|
28 | }, |
---|
29 | function toJsonGeneratedIds(t){ |
---|
30 | // Make obj reference b twice to ensure that there is at least one $ref |
---|
31 | // from obj to b. |
---|
32 | var b = {__id: 'bId', x: 2}, |
---|
33 | obj = {a: 1, b1: b, b2: b}; |
---|
34 | dojox.json.ref.toJson(obj); |
---|
35 | t.f(obj.hasOwnProperty('__id'), 'obj has __id property.'); |
---|
36 | t.t(obj.b1 === b, 'obj.b1 !== b'); |
---|
37 | t.t(obj.b2 === b, 'obj.b2 !== b'); |
---|
38 | t.is('bId', b.__id, 'b.__id'); |
---|
39 | }, |
---|
40 | function usingSchemas(t) { |
---|
41 | var testStr = '{id:"/dog/1",eats:{$ref:"/cat/2"},aTime:"2008-11-07T20:26:17-07:00"}'; |
---|
42 | var schemas = { |
---|
43 | "/dog/":{prototype:{barks:true},properties:{aTime:{format:'date-time'}}}, |
---|
44 | "/cat/":{prototype:{meows:true}} |
---|
45 | } |
---|
46 | var testObj = dojox.json.ref.fromJson(testStr,{ |
---|
47 | schemas:schemas |
---|
48 | }); |
---|
49 | t.t(testObj.barks); |
---|
50 | t.t(testObj.aTime instanceof Date); |
---|
51 | t.t(testObj.eats.meows); |
---|
52 | }, |
---|
53 | function secondLevelLazy(t) { |
---|
54 | var testStr = '[{$ref:1,foo:"bar"},{$ref:2, me:{$ref:2},first:{$ref:1}}]'; |
---|
55 | var mirrorObj = dojox.json.ref.fromJson(testStr); |
---|
56 | t.is(mirrorObj[0].foo,"bar"); |
---|
57 | t.is(mirrorObj[1],mirrorObj[1].me); |
---|
58 | t.is(mirrorObj[0],mirrorObj[1].first); |
---|
59 | } |
---|
60 | |
---|
61 | /*, |
---|
62 | function performanceTest(t) { |
---|
63 | var normalishJson= '[{"id":"1", "created":"2007-10-23T14:40:18Z","address":"somewhere","phoneNumber":"555-5555","comment":"this is great", "firstName":"Jim", "lastName":"Jones"},{"id":"20","created":"2008-06-03T19:45:12Z", "firstName":"Kristopher", "lastName":"dddddd" },{"id":"23", "foo":"ba=sr", "firstName":"Jennika", "lastName":"Zyp" }]'; |
---|
64 | var now = new Date().getTime(); |
---|
65 | for(var i=0;i<1000;i++){ |
---|
66 | } |
---|
67 | console.log("Just Loop",new Date().getTime()-now); |
---|
68 | now = new Date().getTime(); |
---|
69 | var result; |
---|
70 | for(i=0;i<1000;i++){ |
---|
71 | result = dojo.fromJson(normalishJson); |
---|
72 | } |
---|
73 | console.log("Normal fromJson",new Date().getTime()-now, result, normalishJson.length); |
---|
74 | now = new Date().getTime(); |
---|
75 | for(i=0;i<1000;i++){ |
---|
76 | result = dojox.json.ref.fromJson(normalishJson); |
---|
77 | } |
---|
78 | console.log("JSON Referencing toJson",new Date().getTime()-now, result); |
---|
79 | }*/ |
---|
80 | ]); |
---|