[483] | 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 | ]); |
---|