dom/tests/mochitest/localstorage/test_bug600307-DBOps.html

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:987a1fefc840
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>

mercurial