test_bug600307-DBOps.html (6091B)
1 <html xmlns="http://www.w3.org/1999/xhtml"> 2 <head> 3 <title>bug 600307</title> 4 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <script type="text/javascript" src="localStorageCommon.js"></script> 7 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 8 9 <script type="text/javascript"> 10 11 /* eslint-disable max-nested-callbacks */ 12 13 /* 14 This is strictly implementation specific test for dom storage code from bug 600307. 15 It exercises code for asynchronous data flushing with regard to cache life time and its preload. 16 17 "flush + reload" means to tell the database to store all pending data then wipe the cached content and reload it from the db 18 19 "reload" only means to simulate situation when there is a pending flush for an origin but a new cache is about to preload 20 which is a corner case happening rarely ; this helps check the next preload operation will load correct data from the database anyway 21 22 Case 1: set | flush + reload | remove | set | remove | flush + reload | get ?= null 23 checks coalescing optimization for single key changes does work correctly for repeated removals of a key 24 25 Case 2: set | set | clear | flush + reload | count ?= 0 26 checks whether clear operation superseeds setting keys, the database must be empty for the origin 27 28 Case 3: set | set | clear | reload | count ?= 0 29 check the corner case when a data clear flush is pending but a new cache is about to preload 30 */ 31 32 function startTest() 33 { 34 // Enable testing observer notifications 35 localStorageEnableTestingMode(function() { 36 37 // Have an untouched land 38 localStorage.clear(); 39 40 // Initial flush 41 localStorageFlush(function() { 42 is(localStorage.length, 0, "localStorage empty at the test start"); 43 44 // Basic test 1 (set a key, check presence after reload): 45 localStorage.setItem("item", "value"); 46 localStorageFlushAndReload(function() { 47 is(localStorage.getItem("item"), "value", "Basic persistance works"); 48 is(localStorage.length, 1, "1 item in localStorage"); 49 50 // Basic test 2 (set a key twice, check presence of the last value): 51 localStorage.setItem("item", "value2"); 52 localStorage.setItem("item", "value3"); 53 localStorageFlushAndReload(function() { 54 is(localStorage.getItem("item"), "value3", "Basic persistance 2 works"); 55 56 // Basic test 3 (remove a key, check it has been deleted): 57 localStorage.removeItem("item"); 58 localStorageFlushAndReload(function() { 59 is(localStorage.getItem("item"), null, "Basic delete works"); 60 61 // Basic test 4 (set and remove a key, check it is not present): 62 localStorage.setItem("item", "value4"); 63 localStorage.removeItem("item"); 64 localStorageFlushAndReload(function() { 65 is(localStorage.getItem("item"), null, "Basic delete 2 works"); 66 67 68 // Case 1: 69 localStorage.setItem("item", "value"); 70 localStorageFlushAndReload(function() { 71 localStorage.removeItem("item"); 72 localStorage.setItem("item", "value2"); 73 localStorage.removeItem("item"); 74 localStorageFlushAndReload(function() { 75 is(localStorage.getItem("item"), null, "Item deleted in case 1"); 76 77 // Case 2: 78 localStorage.setItem("item", "value"); 79 localStorage.setItem("item2", "value2"); 80 localStorage.clear(); 81 localStorageFlushAndReload(function() { 82 is(localStorage.length, 0, "localStorage clean in case 2"); 83 84 // Case 3: 85 localStorageFlush(function() { 86 localStorage.setItem("item", "value"); 87 localStorage.setItem("item2", "value2"); 88 localStorage.clear(); 89 localStorageReload(function() { 90 is(localStorage.length, 0, "localStorage clean in case 4"); 91 92 if (!SpecialPowers.Services.domStorageManager.nextGenLocalStorageEnabled && 93 SpecialPowers.Cc["@mozilla.org/xre/app-info;1"].getService( 94 SpecialPowers.Ci.nsIXULRuntime).processType != SpecialPowers.Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT) { 95 // Following tests cannot be run in a child/plugin process type 96 SimpleTest.finish(); 97 return; 98 } 99 100 // Cookies clean 1 101 localStorageFlush(function() { 102 localStorage.setItem("item", "value"); 103 localStorageClearAll(function() { 104 is(localStorage.length, 0, "localStorage clean after cookies deletion"); 105 localStorage.setItem("item2", "value2"); 106 is(localStorage.getItem("item"), null, "Unexpected key 1, cookies delete"); 107 is(localStorage.getItem("item2"), "value2", "Expected key 2, cookies delete"); 108 localStorageFlushAndReload(function() { 109 is(localStorage.getItem("item"), null, "Unexpected key 1, cookies delete"); 110 is(localStorage.getItem("item2"), "value2", "Expected key 2, cookies delete"); 111 112 // Cookies clean 2 113 localStorage.clear(); 114 localStorageFlush(function() { 115 localStorage.setItem("item", "value"); 116 localStorageClearAll(function() { 117 is(localStorage.length, 0, "localStorage clean after cookies deletion 2"); 118 localStorageFlushAndReload(function() { 119 is(localStorage.length, 0, "localStorage clean after cookies deletion 2"); 120 121 122 // Domain clean 1 123 localStorageFlush(function() { 124 localStorage.setItem("item", "value"); 125 localStorageClearDomain("test", function() { 126 is(localStorage.length, 0, "localStorage clean after domain deletion"); 127 localStorage.setItem("item2", "value2"); 128 is(localStorage.getItem("item"), null, "Unexpected key 1, domain delete"); 129 is(localStorage.getItem("item2"), "value2", "Expected key 2, domain delete"); 130 localStorageFlushAndReload(function() { 131 is(localStorage.getItem("item"), null, "Unexpected key 1, domain delete"); 132 is(localStorage.getItem("item2"), "value2", "Expected key 2, domain delete"); 133 134 // Domain clean 2 135 localStorage.clear(); 136 localStorageFlush(function() { 137 localStorage.setItem("item", "value"); 138 localStorageClearDomain("test", function() { 139 is(localStorage.length, 0, "localStorage clean after domain deletion 2"); 140 localStorageFlushAndReload(function() { 141 is(localStorage.length, 0, "localStorage clean after domain deletion 2"); 142 143 SimpleTest.finish(); 144 145 }); 146 }); 147 }); 148 }); 149 }); 150 }); 151 }); 152 }); 153 }); 154 }); 155 }); 156 }); 157 }); 158 }); 159 }); 160 }); 161 }); 162 }); 163 }); 164 }); 165 }); 166 }); 167 }); 168 } 169 170 SimpleTest.waitForExplicitFinish(); 171 172 </script> 173 174 </head> 175 176 <body onload="startTest();"> 177 </body> 178 </html>