]> git.proxmox.com Git - extjs.git/blame - extjs/packages/core/test/specs/util/LocalStorage.js
add extjs 6.0.1 sources
[extjs.git] / extjs / packages / core / test / specs / util / LocalStorage.js
CommitLineData
6527f429
DM
1describe("Ext.util.LocalStorage", function() {\r
2 var store;\r
3\r
4 function createStore () {\r
5 return new Ext.util.LocalStorage({ id: 'one', flushDelay: 0 });\r
6 }\r
7\r
8 beforeEach(function () {\r
9 store = createStore();\r
10 });\r
11 afterEach(function() {\r
12 store.clear();\r
13 store.destroy();\r
14 store = null;\r
15 });\r
16\r
17 describe("initialization", function() {\r
18 it("should start empty", function() {\r
19 var keys = store.getKeys();\r
20 expect(keys.length).toBe(0);\r
21 });\r
22\r
23 it("should start with last state", function() {\r
24 store.setItem('foo', 'bar');\r
25 store.destroy();\r
26\r
27 // Using a new instance, check the state of the store:\r
28 store = createStore();\r
29\r
30 var keys = store.getKeys();\r
31 expect(keys.length).toBe(1);\r
32 expect(keys[0]).toBe('foo');\r
33 });\r
34 });\r
35\r
36 describe("isolation", function() {\r
37 var store2;\r
38\r
39 function createStore2 () {\r
40 return new Ext.util.LocalStorage({ id: 'two', flushDelay: 0 });\r
41 }\r
42\r
43 beforeEach(function () {\r
44 store2 = createStore2();\r
45 });\r
46 afterEach(function() {\r
47 store2.clear();\r
48 store2.destroy();\r
49 store2 = null;\r
50 });\r
51\r
52 it("should isolate getKeys", function() {\r
53 store.setItem('foo', 'bar');\r
54 store2.setItem('foo', '42');\r
55\r
56 var keys = store.getKeys();\r
57 expect(keys.length).toBe(1);\r
58 expect(keys[0]).toBe('foo');\r
59\r
60 var keys2 = store2.getKeys();\r
61 expect(keys2.length).toBe(1);\r
62 expect(keys2[0]).toBe('foo');\r
63\r
64 // Arrays should not be same instances:\r
65 expect(keys).not.toBe(keys2);\r
66\r
67 var value = store.getItem('foo');\r
68 var value2 = store2.getItem('foo');\r
69\r
70 expect(value).toBe('bar');\r
71 expect(value2).toBe('42');\r
72 });\r
73\r
74 it("should isolate keys", function() {\r
75 store.setItem('foo', 'bar');\r
76 store.setItem('bar', 'foobar');\r
77\r
78 // One common key (foo) but some distinct keys and different number of keys\r
79 store2.setItem('foo', '42');\r
80 store2.setItem('zip', 'abc');\r
81 store2.setItem('zap', 'xyz');\r
82\r
83 var keys = [ store.key(0), store.key(1) ];\r
84 keys.sort();\r
85 expect(keys[1]).toBe('foo');\r
86 expect(keys[0]).toBe('bar');\r
87 expect(store.key(2)).toBe(null);\r
88\r
89 var keys2 = [ store2.key(0), store2.key(1), store2.key(2) ];\r
90 keys2.sort();\r
91 expect(keys2[0]).toBe('foo');\r
92 expect(keys2[1]).toBe('zap');\r
93 expect(keys2[2]).toBe('zip');\r
94 expect(store2.key(3)).toBe(null);\r
95\r
96 var value0 = store.getItem('foo');\r
97 expect(value0).toBe('bar');\r
98 var value1 = store.getItem('bar');\r
99 expect(value1).toBe('foobar');\r
100\r
101 var value2_0 = store2.getItem('foo');\r
102 expect(value2_0).toBe('42');\r
103 var value2_1 = store2.getItem('zip');\r
104 expect(value2_1).toBe('abc');\r
105 var value2_2 = store2.getItem('zap');\r
106 expect(value2_2).toBe('xyz');\r
107 });\r
108\r
109 it("should isolate clear", function() {\r
110 store.setItem('foo', 'bar');\r
111 store2.setItem('foo', '42');\r
112\r
113 store.clear();\r
114\r
115 var keys = store.getKeys();\r
116 expect(keys.length).toBe(0);\r
117\r
118 var value2 = store2.getItem('foo');\r
119 var keys2 = store2.getKeys();\r
120 expect(keys2.length).toBe(1);\r
121 expect(value2).toBe('42');\r
122 });\r
123\r
124 it("should isolate removeItem", function() {\r
125 store.setItem('foo', 'bar');\r
126 store2.setItem('foo', '42');\r
127\r
128 store.removeItem('foo');\r
129\r
130 var keys = store.getKeys();\r
131 expect(keys.length).toBe(0);\r
132\r
133 var value2 = store2.getItem('foo');\r
134 var keys2 = store2.getKeys();\r
135 expect(keys2.length).toBe(1);\r
136 expect(value2).toBe('42');\r
137 });\r
138 });\r
139\r
140 describe("cache", function () {\r
141 it ("should not share instances with the different id", function () {\r
142 var store1 = Ext.util.LocalStorage.get('foo');\r
143 var store2 = Ext.util.LocalStorage.get('bar');\r
144\r
145 expect(store1).not.toBe(store2);\r
146 store1.release();\r
147 store2.release();\r
148 });\r
149\r
150 it ("should share instances with the same id", function () {\r
151 var store1 = Ext.util.LocalStorage.get('foo');\r
152 var store2 = Ext.util.LocalStorage.get('foo');\r
153\r
154 expect(store1).toBe(store2);\r
155 store1.release();\r
156 store2.release();\r
157 });\r
158\r
159 it ("should destroy the instance on final release", function () {\r
160 var store = Ext.util.LocalStorage.get('foo');\r
161\r
162 expect(store._users).toBe(1);\r
163\r
164 expect(store).toBe(Ext.util.LocalStorage.get('foo')); // count = 2\r
165 expect(store._users).toBe(2);\r
166\r
167 store.release();\r
168 expect(store._users).toBe(1);\r
169 expect(store.destroyed).toBe(false);\r
170\r
171 store.release();\r
172 expect(store._users).toBe(0);\r
173 expect(store.destroyed).toBe(true);\r
174 });\r
175 });\r
176\r
177 /*\r
178 * Legacy IE support delays writes by default for performance. We've disabled that\r
179 * above for sanity, but we need to test it as well. So here we go.\r
180 */\r
181 describe("delayed operation", function() {\r
182 var store2;\r
183\r
184 function createStore2 () {\r
185 return new Ext.util.LocalStorage({ id: 'three', flushDelay: 1 });\r
186 }\r
187\r
188 beforeEach(function () {\r
189 store2 = createStore2();\r
190 });\r
191 afterEach(function() {\r
192 store2.clear();\r
193 store2.destroy();\r
194 store2 = null;\r
195 });\r
196\r
197 it("should delay writes", function() {\r
198 if (store2.el) { // if (legacy IE)\r
199 runs(function () {\r
200 store2.setItem('foo', '42');\r
201\r
202 // if we've *ever* cleared the data it will be '{}' otherwise null:\r
203 var s = store2.el.getAttribute('xdata') || '{}';\r
204 expect(s).toBe('{}');\r
205 });\r
206\r
207 waitsFor(function () {\r
208 return !store2._timer;\r
209 });\r
210\r
211 runs(function () {\r
212 var s = store2.el.getAttribute('xdata');\r
213 expect(s).toBe('{\"foo\":\"42\"}');\r
214 });\r
215 }\r
216 });\r
217\r
218 it("should flush writes when requested", function() {\r
219 if (store2.el) { // if (legacy IE)\r
220 store2.setItem('foo', '42');\r
221\r
222 // if we've *ever* cleared the data it will be '{}' otherwise null:\r
223 var s = store2.el.getAttribute('xdata') || '{}';\r
224 expect(s).toBe('{}');\r
225\r
226 expect(store2._timer).not.toBe(null);\r
227 store2.save();\r
228 expect(store2._timer).toBe(null);\r
229\r
230 var s2 = store2.el.getAttribute('xdata');\r
231 expect(s2).toBe('{\"foo\":\"42\"}');\r
232 }\r
233 });\r
234 });\r
235});\r