]>
Commit | Line | Data |
---|---|---|
6527f429 DM |
1 | describe("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 | }); |