dojox
Version:
Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.
81 lines (77 loc) • 3.1 kB
JavaScript
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);
}*/
]);