📄 itemfilewritestore.js
字号:
} } store.fetchItemByIdentity({identity: 10, onError: onError, onItem: onItem}); return deferred; }, function testReferenceIntegrity_deleteReferencedItemThenRevert(){ // summary: // Simple test to verify the references were properly deleted. // description: // Simple test to verify the references were properly deleted. var store = new dojo.data.ItemFileWriteStore(tests.data.ItemFileWriteStore.getTestData("reference_integrity")); var deferred = new doh.Deferred(); var passed = true; function onError(error, request){ deferred.errback(error); } function onItem(item, request){ try{ //DO NOT EVER ACCESS THESE VARIABLES LIKE THIS! //THIS IS FOR TESTING INTERNAL STATE! console.log("Map before delete:"); store._dumpReferenceMap(); var beforeDelete = dojo.toJson(item[store._reverseRefMap]); store.deleteItem(item); console.log("Map after delete:"); store._dumpReferenceMap(); var afterDelete = dojo.toJson(item[store._reverseRefMap]); store.revert(); console.log("Map after revert:"); store._dumpReferenceMap(); var afterRevert = dojo.toJson(item[store._reverseRefMap]); doh.assertTrue(afterRevert === beforeDelete); }catch(e){ deferred.errback(e); passed = false; } if(passed){ deferred.callback(true); } } store.fetchItemByIdentity({identity: 10, onError: onError, onItem: onItem}); return deferred; }, function testReferenceIntegrity_deleteMultipleItemsWithReferencesAndRevert(){ // summary: // Simple test to verify that a flow of deleting items with references and reverting does not damage the internal structure. // Created for tracker bug: #5743 // description: // Simple test to verify that a flow of deleting items with references and reverting does not damage the internal structure. // Created for tracker bug: #5743 var store = new dojo.data.ItemFileWriteStore(tests.data.readOnlyItemFileTestTemplates.getTestData("countries_references")); var deferred = new doh.Deferred(); var passed = true; function onError(error, request){ deferred.errback(error); doh.assertTrue(false); } function onItem(item, request){ //Save off the located item, then locate another one (peer to Egypt) doh.assertTrue(store.isItem(item)); var egypt = item; function onItem2(item, request){ doh.assertTrue(store.isItem(item)); var nairobi = item; //Delete them store.deleteItem(egypt); store.deleteItem(nairobi); try{ //Revert, then do a fetch. If the internals have been damaged, this will generally //cause onError to fire instead of onComplete. store.revert(); function onComplete(items, request){ deferred.callback(true); } store.fetch({query: {name: "*"}, start: 0, count: 20, onComplete: onComplete, onError: onError}); }catch(e){ deferred.errback(e) } } store.fetchItemByIdentity({identity: "Nairobi", onError: onError, onItem: onItem2}); } store.fetchItemByIdentity({identity: "Egypt", onError: onError, onItem: onItem}); return deferred; }, function testReferenceIntegrity_removeReferenceFromAttribute(){ // summary: // Simple test to verify the reference removal updates the internal map. // description: // Simple test to verify the reference removal updates the internal map. var store = new dojo.data.ItemFileWriteStore(tests.data.ItemFileWriteStore.getTestData("reference_integrity")); var deferred = new doh.Deferred(); var passed = true; function onError(error, request){ deferred.errback(error); doh.assertTrue(false); } function onItem(item, request){ try{ store.setValues(item, "friends", [null]); function onItem2(item10, request){ //DO NOT EVER ACCESS THESE VARIABLES LIKE THIS! //THIS IS FOR TESTING INTERNAL STATE! var refMap = item10[store._reverseRefMap]; store._dumpReferenceMap(); console.log("MAP for Item 10 is: " + dojo.toJson(refMap)); //Assert there is no reference to item 10 in item 11's attribute 'friends'. doh.assertTrue(!refMap["11"]["friends"]); store.setValues(item, "siblings", [0, 1, 2]); //Assert there are no more references to 10 in 11. Ergo, "11" should be a 'undefined' attribute for the map of items referencing '10'.. doh.assertTrue(!refMap["11"]); deferred.callback(true); } store.fetchItemByIdentity({identity: 10, onError: onError, onItem: onItem2}); }catch(e){ console.debug(e); deferred.errback(e); doh.assertTrue(false); } } store.fetchItemByIdentity({identity: 11, onError: onError, onItem: onItem}); return deferred; }, function testReferenceIntegrity_deleteReferencedItemNonParent(){ // summary: // Simple test to verify the references to a non-parent item was properly deleted. // description: // Simple test to verify the references to a non-parent item was properly deleted. var store = new dojo.data.ItemFileWriteStore(tests.data.ItemFileWriteStore.getTestData("reference_integrity")); var deferred = new doh.Deferred(); var passed = true; function onError(error, request){ deferred.errback(error); } function onItem(item, request){ try{ console.log("Reference state for item 16 is: " + dojo.toJson(item[store._reverseRefMap])); store.deleteItem(item); function verifyRefDelete(items, request){ var passed = true; for(var i = 0; i < items.length; i++){ var curItem = items[i]; var attributes = store.getAttributes(curItem); for(var j = 0; j < attributes.length; j++){ var values = store.getValues(curItem, attributes[j]); var badRef = false; for(var k = 0; k < values.length; k++){ var value = values[k]; try{ var id = store.getIdentity(value); if(id == 16){ badRef = true; break; } }catch(e){/*Not an item, even a dead one, just eat it.*/} } if(badRef){ deferred.errback(new Error("Found a reference remaining to a deleted item. Failure.")); passed = false; break; } } } if(passed){ deferred.callback(true); } } store.fetch({onComplete: verifyRefDelete, onError: onError}); }catch(error){ deferred.errback(error); } } store.fetchItemByIdentity({identity: 16, onError: onError, onItem: onItem}); return deferred; }, function testReferenceIntegrity_addReferenceToAttribute(){ // summary: // Simple test to verify the reference additions can happen. // description: // Simple test to verify the reference additions can happen. var store = new dojo.data.ItemFileWriteStore(tests.data.ItemFileWriteStore.getTestData("reference_integrity")); var deferred = new doh.Deferred(); var passed = true; function onError(error, request){ deferred.errback(error); doh.assertTrue(false); } function onComplete(items, request){ doh.assertTrue(items.length > 2); var item1 = items[0]; var item2 = items[1]; //DO NOT EVER ACCESS THESE VARIABLES LIKE THIS! //THIS IS FOR TESTING INTERNAL STATE! console.log("Map state for Item 1 is: " + dojo.toJson(item1[store._reverseRefMap])); console.log("Map state for Item 2 is: " + dojo.toJson(item2[store._reverseRefMap])); store.setValue(item1, "siblings", item2); //Emit the current map state for inspection. console.log("Map state for Item 1 is: " + dojo.toJson(item1[store._reverseRefMap])); console.log("Map state for Item 2 is: " + dojo.toJson(item2[store._reverseRefMap])); doh.assertTrue(item2[store._reverseRefMap] != null); //Assert there is a recorded reference to item 2 in item 1's attribute 'sibling'. doh.assertTrue(item2[store._reverseRefMap][store.getIdentity(item1)]["siblings"]); deferred.callback(true); } store.fetch({onError: onError, onComplete: onComplete}); return deferred; }, function testReferenceIntegrity_newItemWithParentReference(){ // summary: // Simple test to verify that newItems with a parent properly record the parent's reference in the map. // description: // Simple test to verify that newItems with a parent properly record the parent's reference in the map. var store = new dojo.data.ItemFileWriteStore(tests.data.ItemFileWriteStore.getTestData("reference_integrity")); var deferred = new doh.Deferred(); var passed = true; function onError(error, request){ deferred.errback(error); doh.assertTrue(false); } function onItem(item, request){ try{ //Create a new item and set its parent to item 10's uncle attribute. var newItem = store.newItem({id: 17, name: "Item 17"}, {parent: item, attribute: "uncles"}); //DO NOT EVER ACCESS THESE VARIABLES LIKE THIS! //THIS IS FOR TESTING INTERNAL STATE! //Look up the references to 17, as item 10 has one now on attribute 'uncles' var refs = newItem[store._reverseRefMap]; //Assert there is a reference from 10 to item 17, on attribute uncle doh.assertTrue(refs["10"]["uncles"]); console.log("State of map of item 17 after newItem: " + dojo.toJson(refs)); }catch(e){ console.debug(e); deferred.errback(e); doh.assertTrue(false); passed = false; } if(passed){ deferred.callback(true); } } store.fetchItemByIdentity({identity: 10, onError: onError, onItem: onItem}); return deferred; }, function testReferenceIntegrity_newItemWithReferenceToExistingItem(){ // summary: // Simple test to verify that a new item with references to existing items properly record the references in the map. // description: // Simple test to verify that a new item with references to existing items properly record the references in the map. var store = new dojo.data.ItemFileWriteStore(tests.data.ItemFileWriteStore.getTestData("reference_integrity")); var deferred = new doh.Deferred(); var passed = true; function onError(error, request){ deferred.errback(error); doh.assertTrue(false); } function onItem(item, request){ try{ //DO NOT EVER ACCESS THESE VARIABLES LIKE THIS! //THIS IS FOR TESTING INTERNAL STATE! console.log("State of reference map to item 10 before newItem: " + dojo.toJson(item[store._reverseRefMap])); //Create a new item and set its parent to item 10's uncle attribute. var newItem = store.newItem({id: 17, name: "Item 17", friends: [item]}); //DO NOT EVER ACCESS THESE VARIABLES LIKE THIS! //THIS IS FOR TESTING INTERNAL STATE! //Look up the references to 10, as item 17 has one on friends now. var refs = item[store._reverseRefMap]; //Assert there is a reference from 15 to item 10, on attribute friends doh.assertTrue(refs["17"]["friends"]); console.log("State of reference map to item 10 after newItem: " + dojo.toJson(refs)); }catch(e){ console.debug(e); deferred.errback(e); doh.assertTrue(false); passed = false; } if(passed){ deferred.callback(true); } } store.fetchItemByIdentity({identity: 10, onError: onError, onItem: onItem}); return deferred; }, function testReferenceIntegrity_disableReferenceIntegrity(){ // summary: // Simple test to verify reference integrity can be disabled. // description: // Simple test to verify reference integrity can be disabled. var params = tests.data.ItemFileWriteStore.getTestData("reference_integrity"); params.referenceIntegrity = false; var store = new dojo.data.ItemFileWriteStore(params); var deferred = new doh.Deferred(); function onError(error, request){ deferred.errback(error); doh.assertTrue(false); } function onItem(item, request){ //DO NOT EVER ACCESS THESE VARIABLES LIKE THIS! //THIS IS FOR TESTING INTERNAL STATE! if(item[store._reverseRefMap] === undefined){ deferred.callback(true); }else{ deferred.errback(new Error("Disabling of reference integrity failed.")); } } store.fetchItemByIdentity({identity: 10, onError: onError, onItem: onItem}); return deferred; } ]);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -