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