You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
3.0 KiB
80 lines
3.0 KiB
dojo.provide("dojox.json.tests.ref"); |
|
dojo.require("dojox.json.ref"); |
|
|
|
doh.register("dojox.json.tests.ref", [ |
|
function fromRefJson(t) { |
|
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"}}'; |
|
|
|
var mirrorObj = dojox.json.ref.fromJson(testStr); |
|
t.assertEqual(mirrorObj, mirrorObj.a); |
|
t.assertEqual(mirrorObj.c, mirrorObj.c.f); |
|
t.assertEqual(mirrorObj.c, mirrorObj.b); |
|
t.assertEqual(mirrorObj["a string"], "a string"); |
|
}, |
|
function toAndFromRefJson(t) { |
|
var testObj = {a:{},b:{"has space":{}}}; |
|
testObj.a.d= testObj; |
|
var arrayItem = testObj.array = [{}]; |
|
arrayItem[1] = arrayItem[0]; |
|
testObj.b.g=testObj.a; |
|
testObj.b["has space"].f = testObj.b; |
|
testObj.b.h=testObj.a; |
|
var mirrorObj = dojox.json.ref.fromJson(dojox.json.ref.toJson(testObj)); |
|
t.assertEqual(mirrorObj.a.d, mirrorObj); |
|
t.assertEqual(mirrorObj.b.g, mirrorObj.a); |
|
t.assertEqual(mirrorObj.b["has space"].f, mirrorObj.b); |
|
t.assertEqual(mirrorObj.b.h, mirrorObj.a); |
|
t.assertEqual(mirrorObj.array[0], mirrorObj.array[1]); |
|
}, |
|
function toJsonGeneratedIds(t){ |
|
// Make obj reference b twice to ensure that there is at least one $ref |
|
// from obj to b. |
|
var b = {__id: 'bId', x: 2}, |
|
obj = {a: 1, b1: b, b2: b}; |
|
dojox.json.ref.toJson(obj); |
|
t.f(obj.hasOwnProperty('__id'), 'obj has __id property.'); |
|
t.t(obj.b1 === b, 'obj.b1 !== b'); |
|
t.t(obj.b2 === b, 'obj.b2 !== b'); |
|
t.is('bId', b.__id, 'b.__id'); |
|
}, |
|
function usingSchemas(t) { |
|
var testStr = '{id:"/dog/1",eats:{$ref:"/cat/2"},aTime:"2008-11-07T20:26:17-07:00"}'; |
|
var schemas = { |
|
"/dog/":{prototype:{barks:true},properties:{aTime:{format:'date-time'}}}, |
|
"/cat/":{prototype:{meows:true}} |
|
} |
|
var testObj = dojox.json.ref.fromJson(testStr,{ |
|
schemas:schemas |
|
}); |
|
t.t(testObj.barks); |
|
t.t(testObj.aTime instanceof Date); |
|
t.t(testObj.eats.meows); |
|
}, |
|
function secondLevelLazy(t) { |
|
var testStr = '[{$ref:1,foo:"bar"},{$ref:2, me:{$ref:2},first:{$ref:1}}]'; |
|
var mirrorObj = dojox.json.ref.fromJson(testStr); |
|
t.is(mirrorObj[0].foo,"bar"); |
|
t.is(mirrorObj[1],mirrorObj[1].me); |
|
t.is(mirrorObj[0],mirrorObj[1].first); |
|
} |
|
|
|
/*, |
|
function performanceTest(t) { |
|
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" }]'; |
|
var now = new Date().getTime(); |
|
for(var i=0;i<1000;i++){ |
|
} |
|
console.log("Just Loop",new Date().getTime()-now); |
|
now = new Date().getTime(); |
|
var result; |
|
for(i=0;i<1000;i++){ |
|
result = dojo.fromJson(normalishJson); |
|
} |
|
console.log("Normal fromJson",new Date().getTime()-now, result, normalishJson.length); |
|
now = new Date().getTime(); |
|
for(i=0;i<1000;i++){ |
|
result = dojox.json.ref.fromJson(normalishJson); |
|
} |
|
console.log("JSON Referencing toJson",new Date().getTime()-now, result); |
|
}*/ |
|
]);
|
|
|