]> git.proxmox.com Git - extjs.git/blame - extjs/packages/core/test/specs/data/NodeStore.js
add extjs 6.0.1 sources
[extjs.git] / extjs / packages / core / test / specs / data / NodeStore.js
CommitLineData
6527f429
DM
1describe("Ext.data.NodeStore", function() {\r
2\r
3 var Model = Ext.define(null, {\r
4 extend: 'Ext.data.TreeModel'\r
5 });\r
6\r
7 var store;\r
8\r
9 function makeNode(id, leaf, children) {\r
10 var node = new Model({\r
11 id: id,\r
12 leaf: !!leaf\r
13 });\r
14\r
15 if (children) {\r
16 Ext.Array.forEach(children, function(child) {\r
17 node.appendChild(child);\r
18 });\r
19 }\r
20\r
21 return node;\r
22 }\r
23\r
24 function makeStore(cfg, node) {\r
25 if (!node && node !== null) {\r
26 node = makeNode('root');\r
27 }\r
28\r
29 store = new Ext.data.NodeStore(Ext.apply({\r
30 model: Model,\r
31 node: node\r
32 }, cfg));\r
33 }\r
34\r
35 afterEach(function() {\r
36 store = Ext.destroy(store);\r
37 });\r
38\r
39 function expectIds(expected) {\r
40 var ids = Ext.Array.pluck(store.getRange(), 'id');\r
41 expect(ids).toEqual(expected);\r
42 }\r
43\r
44 describe("folderSort", function() {\r
45 var node;\r
46 beforeEach(function() {\r
47 node = makeNode('root', false, [\r
48 makeNode(2, true),\r
49 makeNode(6),\r
50 makeNode(1, true),\r
51 makeNode(5),\r
52 makeNode(4, true),\r
53 makeNode(3)\r
54 ]);\r
55 });\r
56\r
57 afterEach(function() {\r
58 node = null;\r
59 });\r
60\r
61 describe("with no sorters", function() {\r
62 describe("configuration", function() {\r
63 describe("with folderSort: true", function() {\r
64 it("should sort nodes", function() {\r
65 makeStore({\r
66 folderSort: true\r
67 }, node);\r
68\r
69 expectIds([6, 5, 3, 2, 1, 4]);\r
70 });\r
71 });\r
72\r
73 describe("with folderSort: false", function() {\r
74 it("should leave nodes in place", function() {\r
75 makeStore({\r
76 folderSort: false\r
77 }, node);\r
78\r
79 expectIds([2, 6, 1, 5, 4, 3]);\r
80 });\r
81 });\r
82 });\r
83\r
84 describe("setting dynamically", function() {\r
85 describe("setting folderSort: true", function() {\r
86 it("should sort nodes", function() {\r
87 makeStore({\r
88 folderSort: false\r
89 }, node);\r
90 store.setFolderSort(true);\r
91\r
92 expectIds([6, 5, 3, 2, 1, 4]);\r
93 });\r
94 });\r
95\r
96 describe("setting folderSort: false", function() {\r
97 it("should leave nodes in place", function() {\r
98 makeStore({\r
99 folderSort: true\r
100 }, node);\r
101 store.setFolderSort(false);\r
102\r
103 expectIds([6, 5, 3, 2, 1, 4]);\r
104 });\r
105 });\r
106 });\r
107 });\r
108\r
109 describe("with sorters", function() {\r
110 describe("configuration", function() {\r
111 describe("with folderSort: true", function() {\r
112 it("should sort and give priority to folderSort", function() {\r
113 makeStore({\r
114 folderSort: true,\r
115 sorters: [{\r
116 property: 'id',\r
117 direction: 'DESC'\r
118 }]\r
119 }, node);\r
120\r
121 expectIds([6, 5, 3, 4, 2, 1]);\r
122 });\r
123 });\r
124\r
125 describe("with folderSort: false", function() {\r
126 it("should sort according to the sorter", function() {\r
127 makeStore({\r
128 folderSort: false,\r
129 sorters: [{\r
130 property: 'id',\r
131 direction: 'DESC'\r
132 }]\r
133 }, node);\r
134\r
135 expectIds([6, 5, 4, 3, 2, 1]);\r
136 });\r
137 });\r
138 });\r
139\r
140 describe("setting sorters dynamically", function() {\r
141 describe("with folderSort: true", function() {\r
142 beforeEach(function() {\r
143 makeStore({\r
144 folderSort: true\r
145 }, node);\r
146\r
147 store.getSorters().add({\r
148 property: 'id',\r
149 direction: 'DESC'\r
150 });\r
151 });\r
152\r
153 describe("adding a sorter", function() {\r
154 it("should sort and give priority to folderSort", function() {\r
155 expectIds([6, 5, 3, 4, 2, 1]);\r
156 });\r
157 });\r
158\r
159 describe("removing a sorter", function() {\r
160 it("should leave nodes in place", function() {\r
161 store.getSorters().removeAll();\r
162 expectIds([6, 5, 3, 4, 2, 1]);\r
163 });\r
164 });\r
165 });\r
166\r
167 describe("with folderSort: false", function() {\r
168 beforeEach(function() {\r
169 makeStore({\r
170 folderSort: false\r
171 }, node);\r
172\r
173 store.getSorters().add({\r
174 property: 'id',\r
175 direction: 'DESC'\r
176 });\r
177 });\r
178\r
179 describe("adding a sorter", function() {\r
180 it("should sort nodes", function() {\r
181 expectIds([6, 5, 4, 3, 2, 1]);\r
182 });\r
183 });\r
184\r
185 describe("removing a sorter", function() {\r
186 it("should leave nodes in place", function() {\r
187 store.getSorters().removeAll();\r
188 expectIds([6, 5, 4, 3, 2, 1]);\r
189 });\r
190 });\r
191 });\r
192 });\r
193\r
194 describe("setting folderSort dynamically", function() {\r
195 describe("setting folderSort: true", function() {\r
196 it("should sort and give priority to folderSort", function() {\r
197 makeStore({\r
198 folderSort: false,\r
199 sorters: [{\r
200 property: 'id',\r
201 direction: 'DESC'\r
202 }]\r
203 }, node);\r
204 store.setFolderSort(true);\r
205\r
206 expectIds([6, 5, 3, 4, 2, 1]);\r
207 });\r
208 });\r
209\r
210 describe("setting folderSort: false", function() {\r
211 it("should sort nodes", function() {\r
212 makeStore({\r
213 folderSort: false,\r
214 sorters: [{\r
215 property: 'id',\r
216 direction: 'DESC'\r
217 }]\r
218 }, node);\r
219 store.setFolderSort(false);\r
220 expectIds([6, 5, 4, 3, 2, 1]);\r
221 });\r
222 });\r
223 });\r
224 });\r
225 });\r
226\r
227 describe("node", function() {\r
228 it("should accept an object", function() {\r
229 makeStore({\r
230 node: {\r
231 id: 'foo'\r
232 }\r
233 }, null);\r
234 var node = store.getNode();\r
235\r
236 expect(node.isNode).toBe(true);\r
237 expect(node.id).toBe('foo');\r
238 });\r
239\r
240 it("should accept a node instance", function() {\r
241 var node = makeNode();\r
242 makeStore({\r
243 node: node\r
244 });\r
245 expect(store.getNode()).toBe(node);\r
246 });\r
247 });\r
248\r
249 describe("store content", function() {\r
250 describe("configuring with a node", function() {\r
251 it("should load node children", function() {\r
252 var node = makeNode('root', false, [\r
253 makeNode(1),\r
254 makeNode(2),\r
255 makeNode(3)\r
256 ]);\r
257\r
258 makeStore(null, node);\r
259\r
260 expectIds([1, 2, 3]);\r
261 });\r
262\r
263 it("should only include children of the node", function() {\r
264 var node = makeNode('root', false, [\r
265 makeNode(1, false, [\r
266 makeNode(2),\r
267 makeNode(3)\r
268 ]),\r
269 makeNode(4, false, [\r
270 makeNode(5),\r
271 makeNode(6)\r
272 ]),\r
273 makeNode(7, false, [\r
274 makeNode(8),\r
275 makeNode(9)\r
276 ])\r
277 ]);\r
278\r
279 makeStore(null, node);\r
280\r
281 expectIds([1, 4, 7]);\r
282 });\r
283 });\r
284\r
285 describe("dynamic updates", function() {\r
286 it("should add a child that is appended to the node", function() {\r
287 makeStore();\r
288 var node = makeNode();\r
289 store.getNode().appendChild(node);\r
290 expect(store.getCount()).toBe(1);\r
291 expect(store.getAt(0)).toBe(node);\r
292 });\r
293\r
294 it("should insert a child that is inserted into the node", function() {\r
295 var existing = makeNode(1);\r
296\r
297 var node = makeNode('root', false, [\r
298 existing\r
299 ]);\r
300\r
301 var newNode = makeNode(2);\r
302\r
303 makeStore(null, node);\r
304 node.insertChild(0, newNode);\r
305 expect(store.getCount()).toBe(2);\r
306 expect(store.getAt(0)).toBe(newNode);\r
307 expect(store.getAt(1)).toBe(existing);\r
308 });\r
309\r
310 it("should remove a child removed from the node", function() {\r
311 var existing = makeNode(1);\r
312\r
313 var node = makeNode('root', false, [\r
314 existing\r
315 ]);\r
316\r
317 makeStore(null, node);\r
318 node.removeChild(existing);\r
319 expect(store.getCount()).toBe(0);\r
320 });\r
321\r
322 it("should not add granchildren of the node", function() {\r
323 var existing = makeNode(1);\r
324\r
325 var node = makeNode('root', false, [\r
326 existing\r
327 ]);\r
328\r
329 makeStore(null, node);\r
330\r
331 existing.appendChild({});\r
332 expect(store.getCount()).toBe(1);\r
333 });\r
334\r
335 it("should not cause an error when removing grandchildren of the node", function() {\r
336 var grandchild = makeNode(2);\r
337 var existing = makeNode(1, false, [grandchild]);\r
338\r
339 var node = makeNode('root', false, [\r
340 existing\r
341 ]);\r
342\r
343 makeStore(null, node);\r
344\r
345 expect(function() {\r
346 existing.removeChild(grandchild);\r
347 }).not.toThrow();\r
348 });\r
349 });\r
350 });\r
351\r
352});