Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(423)

Side by Side Diff: chrome/test/data/webui/md_bookmarks/store_test.js

Issue 2639453002: [MD Bookmarks] Add Select for Bookmarks. (Closed)
Patch Set: add removeChild Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 suite('<bookmarks-store>', function() { 5 suite('<bookmarks-store>', function() {
6 var store; 6 var store;
7 var TEST_TREE; 7 var TEST_TREE;
8 8
9 function replaceStore() { 9 function replaceStore() {
10 store = document.createElement('bookmarks-store'); 10 store = document.createElement('bookmarks-store');
11 replaceBody(store); 11 replaceBody(store);
12 store.setupStore_(TEST_TREE); 12 store.setupStore_(TEST_TREE);
13 } 13 }
14 14
15 function navigateTo(route) { 15 function navigateTo(route) {
16 window.history.replaceState({}, '', route); 16 window.history.replaceState({}, '', route);
17 window.dispatchEvent(new CustomEvent('location-changed')); 17 window.dispatchEvent(new CustomEvent('location-changed'));
18 } 18 }
19 19
20 function removeChild(tree, index) {
tsergeant 2017/02/02 04:35:21 I think this should go in test_util.js with the re
jiaxi 2017/02/02 05:28:36 Done.
21 tree.children.splice(index, 1);
22 for (var i = index; i < tree.children.length; i++) {
23 tree.children[i].index = i;
24 }
25 }
26
20 /** 27 /**
21 * Overrides the chrome.bookmarks.search to pass results into the callback. 28 * Overrides the chrome.bookmarks.search to pass results into the callback.
22 * @param {Array} results 29 * @param {Array} results
23 */ 30 */
24 function overrideBookmarksSearch(results) { 31 function overrideBookmarksSearch(results) {
25 chrome.bookmarks.search = function(searchTerm, callback) { 32 chrome.bookmarks.search = function(searchTerm, callback) {
26 callback(results); 33 callback(results);
27 }; 34 };
28 } 35 }
29 36
37 /**
38 * Overrides the chrome.bookmarks.getSubTree to pass results into the
39 * callback.
40 * @param {Array} results
41 */
42 function overrideBookmarksGetSubTree(results) {
43 chrome.bookmarks.getSubTree = function(parentId, callback) {
44 callback(results);
45 };
46 }
47
30 setup(function() { 48 setup(function() {
31 TEST_TREE = createFolder('0', [ 49 TEST_TREE = createFolder('0', [
32 createFolder( 50 createFolder(
33 '1', 51 '1',
34 [ 52 [
35 createItem('2', {url: 'link2'}), 53 createItem('2', {url: 'link2'}),
36 createFolder('3', []), 54 createFolder('3', []),
55 createItem('6', {url: 'link4'}),
56 createItem('7', {url: 'link5'}),
37 ]), 57 ]),
38 createItem('4', {url: 'link4'}), 58 createItem('4', {url: 'link4'}),
39 createItem('5', {url: 'link5'}), 59 createItem('5', {url: 'link5'}),
40 createFolder('6', []), 60 createFolder('8', []),
41 ]); 61 ]);
42 62
43 replaceStore(); 63 replaceStore();
44 }); 64 });
45 65
46 teardown(function() { 66 teardown(function() {
47 // Clean up anything left in URL. 67 // Clean up anything left in URL.
48 navigateTo('/'); 68 navigateTo('/');
49 }); 69 });
50 70
(...skipping 10 matching lines...) Expand all
61 }); 81 });
62 82
63 test('correct paths generated for nodes', function() { 83 test('correct paths generated for nodes', function() {
64 var TEST_PATHS = { 84 var TEST_PATHS = {
65 '0': 'rootNode', 85 '0': 'rootNode',
66 '1': 'rootNode.children.#0', 86 '1': 'rootNode.children.#0',
67 '2': 'rootNode.children.#0.children.#0', 87 '2': 'rootNode.children.#0.children.#0',
68 '3': 'rootNode.children.#0.children.#1', 88 '3': 'rootNode.children.#0.children.#1',
69 '4': 'rootNode.children.#1', 89 '4': 'rootNode.children.#1',
70 '5': 'rootNode.children.#2', 90 '5': 'rootNode.children.#2',
71 '6': 'rootNode.children.#3', 91 '6': 'rootNode.children.#0.children.#2',
92 '7': 'rootNode.children.#0.children.#3',
93 '8': 'rootNode.children.#3',
72 }; 94 };
73 95
74 for (var id in store.idToNodeMap_) 96 for (var id in store.idToNodeMap_)
75 assertEquals(TEST_PATHS[id], store.idToNodeMap_[id].path); 97 assertEquals(TEST_PATHS[id], store.idToNodeMap_[id].path);
76 }); 98 });
77 99
78 ////////////////////////////////////////////////////////////////////////////// 100 //////////////////////////////////////////////////////////////////////////////
79 // editing bookmarks tree tests: 101 // editing bookmarks tree tests:
80 102
81 test('changing selectedId changes the displayedList', function() { 103 test('changing selectedId changes the displayedList', function() {
82 store.selectedId = '0'; 104 store.selectedId = '0';
83 assertEquals(TEST_TREE.children, store.displayedList); 105 assertEquals(TEST_TREE.children, store.displayedList);
84 store.selectedId = '1'; 106 store.selectedId = '1';
85 assertEquals(TEST_TREE.children[0].children, store.displayedList); 107 assertEquals(TEST_TREE.children[0].children, store.displayedList);
86 store.selectedId = '3'; 108 store.selectedId = '3';
87 assertEquals( 109 assertEquals(
88 TEST_TREE.children[0].children[1].children, store.displayedList); 110 TEST_TREE.children[0].children[1].children, store.displayedList);
89 111
90 // Selecting an item selects the default folder. 112 // Selecting an item selects the default folder.
91 store.selectedId = '5'; 113 store.selectedId = '5';
92 assertEquals(TEST_TREE.children[0].children, store.displayedList); 114 assertEquals(TEST_TREE.children[0].children, store.displayedList);
93 }); 115 });
94 116
95 test('store updates on selected event', function() { 117 test('store updates on selected event', function() {
96 // First child of root is selected by default. 118 // First child of root is selected by default.
97 assertEquals('1', store.selectedId); 119 assertEquals('1', store.selectedId);
98 assertTrue(store.idToNodeMap_['1'].isSelected); 120 assertTrue(store.idToNodeMap_['1'].isSelectedFolder);
99 121
100 // Selecting a selected folder doesn't deselect it. 122 // Selecting a selected folder doesn't deselect it.
101 store.fire('selected-folder-changed', '1'); 123 store.fire('selected-folder-changed', '1');
102 assertEquals('1', store.selectedId); 124 assertEquals('1', store.selectedId);
103 assertTrue(store.idToNodeMap_['1'].isSelected); 125 assertTrue(store.idToNodeMap_['1'].isSelectedFolder);
104 126
105 // Select a deeply nested descendant. 127 // Select a deeply nested descendant.
106 store.fire('selected-folder-changed', '3'); 128 store.fire('selected-folder-changed', '3');
107 assertEquals('3', store.selectedId); 129 assertEquals('3', store.selectedId);
108 assertTrue(store.idToNodeMap_['3'].isSelected); 130 assertTrue(store.idToNodeMap_['3'].isSelectedFolder);
109 assertFalse(store.idToNodeMap_['1'].isSelected); 131 assertFalse(store.idToNodeMap_['1'].isSelectedFolder);
110 132
111 // Select a folder in separate subtree. 133 // Select a folder in separate subtree.
112 store.fire('selected-folder-changed', '6'); 134 store.fire('selected-folder-changed', '8');
113 assertEquals('6', store.selectedId); 135 assertEquals('8', store.selectedId);
114 assertTrue(store.idToNodeMap_['6'].isSelected); 136 assertTrue(store.idToNodeMap_['8'].isSelectedFolder);
115 assertFalse(store.idToNodeMap_['3'].isSelected); 137 assertFalse(store.idToNodeMap_['3'].isSelectedFolder);
116 }); 138 });
117 139
118 test('store updates on open and close', function() { 140 test('store updates on open and close', function() {
119 // All folders are open by default. 141 // All folders are open by default.
120 for (var id in store.idToNodeMap_) { 142 for (var id in store.idToNodeMap_) {
121 if (store.idToNodeMap_[id].url) 143 if (store.idToNodeMap_[id].url)
122 continue; 144 continue;
123 145
124 assertTrue(store.idToNodeMap_[id].isOpen); 146 assertTrue(store.idToNodeMap_[id].isOpen);
125 } 147 }
126 148
127 // Closing a folder doesn't close any descendants. 149 // Closing a folder doesn't close any descendants.
128 store.fire('folder-open-changed', {id: '1', open: false}); 150 store.fire('folder-open-changed', {id: '1', open: false});
129 assertFalse(store.idToNodeMap_['1'].isOpen); 151 assertFalse(store.idToNodeMap_['1'].isOpen);
130 assertTrue(store.idToNodeMap_['3'].isOpen); 152 assertTrue(store.idToNodeMap_['3'].isOpen);
131 store.fire('folder-open-changed', {id: '1', open: true}); 153 store.fire('folder-open-changed', {id: '1', open: true});
132 154
133 // Closing an ancestor folder of a selected folder selects the ancestor. 155 // Closing an ancestor folder of a selected folder selects the ancestor.
134 store.fire('selected-folder-changed', '3'); 156 store.fire('selected-folder-changed', '3');
135 store.fire('folder-open-changed', {id: '1', open: false}); 157 store.fire('folder-open-changed', {id: '1', open: false});
136 assertFalse(store.idToNodeMap_['1'].isOpen); 158 assertFalse(store.idToNodeMap_['1'].isOpen);
137 assertEquals('1', store.selectedId); 159 assertEquals('1', store.selectedId);
138 assertTrue(store.idToNodeMap_['1'].isSelected); 160 assertTrue(store.idToNodeMap_['1'].isSelectedFolder);
139 assertFalse(store.idToNodeMap_['3'].isSelected); 161 assertFalse(store.idToNodeMap_['3'].isSelectedFolder);
140 }); 162 });
141 163
142 test('deleting a node updates the tree', function() { 164 test('deleting a node updates the tree', function() {
165 removeChild(TEST_TREE, 1);
166 overrideBookmarksGetSubTree([TEST_TREE]);
143 // Remove an empty folder/bookmark. 167 // Remove an empty folder/bookmark.
144 store.onBookmarkRemoved_('4', {parentId: '0', index: '1'}); 168 store.onBookmarkRemoved_('4', {parentId: '0', index: 1});
145 169
146 // Check the tree is correct. 170 // Check the tree is correct.
147 assertEquals('5', store.rootNode.children[1].id); 171 assertEquals('5', store.rootNode.children[1].id);
148 172
149 // idToNodeMap_ has been updated. 173 // idToNodeMap_ has been updated.
150 assertEquals(undefined, store.idToNodeMap_['4']); 174 assertEquals(undefined, store.idToNodeMap_['4']);
151 assertEquals(store.rootNode.children[1], store.idToNodeMap_['5']); 175 assertEquals(store.rootNode.children[1], store.idToNodeMap_['5']);
152 176
153 // Paths have been updated. 177 // Paths have been updated.
154 var TEST_PATHS = { 178 var TEST_PATHS = {
155 '0': 'rootNode', 179 '0': 'rootNode',
156 '1': 'rootNode.children.#0', 180 '1': 'rootNode.children.#0',
157 '2': 'rootNode.children.#0.children.#0', 181 '2': 'rootNode.children.#0.children.#0',
158 '3': 'rootNode.children.#0.children.#1', 182 '3': 'rootNode.children.#0.children.#1',
159 '5': 'rootNode.children.#1', 183 '5': 'rootNode.children.#1',
160 '6': 'rootNode.children.#2', 184 '6': 'rootNode.children.#0.children.#2',
185 '7': 'rootNode.children.#0.children.#3',
186 '8': 'rootNode.children.#2',
161 }; 187 };
162 188
163 for (var id in store.idToNodeMap_) 189 for (var id in store.idToNodeMap_)
164 assertEquals(TEST_PATHS[id], store.idToNodeMap_[id].path); 190 assertEquals(TEST_PATHS[id], store.idToNodeMap_[id].path);
165 191
166 // Remove a folder with children. 192 // Remove a folder with children.
193 removeChild(TEST_TREE, 0);
194 overrideBookmarksGetSubTree([TEST_TREE]);
195
167 store.onBookmarkRemoved_('1', {parentId: '0', index: '0'}); 196 store.onBookmarkRemoved_('1', {parentId: '0', index: '0'});
168 197
169 // Check the tree is correct. 198 // Check the tree is correct.
170 assertEquals('5', store.rootNode.children[0].id); 199 assertEquals('5', store.rootNode.children[0].id);
171 assertEquals('6', store.rootNode.children[1].id); 200 assertEquals('8', store.rootNode.children[1].id);
172 201
173 // idToNodeMap_ has been updated. 202 // idToNodeMap_ has been updated.
174 assertEquals(undefined, store.idToNodeMap_['1']); 203 assertEquals(undefined, store.idToNodeMap_['1']);
175 assertEquals(undefined, store.idToNodeMap_['2']); 204 assertEquals(undefined, store.idToNodeMap_['2']);
176 assertEquals(undefined, store.idToNodeMap_['3']); 205 assertEquals(undefined, store.idToNodeMap_['3']);
177 assertEquals(undefined, store.idToNodeMap_['4']); 206 assertEquals(undefined, store.idToNodeMap_['4']);
178 assertEquals(store.rootNode.children[0], store.idToNodeMap_['5']); 207 assertEquals(store.rootNode.children[0], store.idToNodeMap_['5']);
179 assertEquals(store.rootNode.children[1], store.idToNodeMap_['6']); 208 assertEquals(store.rootNode.children[1], store.idToNodeMap_['8']);
180 209
181 // Paths have been updated. 210 // Paths have been updated.
182 TEST_PATHS = { 211 TEST_PATHS = {
183 '0': 'rootNode', 212 '0': 'rootNode',
184 '5': 'rootNode.children.#0', 213 '5': 'rootNode.children.#0',
185 '6': 'rootNode.children.#1' 214 '8': 'rootNode.children.#1'
186 }; 215 };
187 216
188 for (var id in store.idToNodeMap_) 217 for (var id in store.idToNodeMap_)
189 assertEquals(TEST_PATHS[id], store.idToNodeMap_[id].path); 218 assertEquals(TEST_PATHS[id], store.idToNodeMap_[id].path);
190 }); 219 });
191 220
192 test('selectedId updates after removing a selected folder', function() { 221 test('selectedId updates after removing a selected folder', function() {
193 // Selected folder gets removed. 222 // Selected folder gets removed.
194 store.selectedId = '2'; 223 store.selectedId = '8';
195 store.onBookmarkRemoved_('2', {parentId: '1', index: '0'}); 224 removeChild(TEST_TREE, 3);
196 assertTrue(store.idToNodeMap_['1'].isSelected); 225 overrideBookmarksGetSubTree([TEST_TREE]);
197 assertEquals('1', store.selectedId); 226
227 store.onBookmarkRemoved_('8', {parentId:'0', index:'3'});
228 assertTrue(store.idToNodeMap_['0'].isSelectedFolder);
229 assertEquals('0', store.selectedId);
198 230
199 // A folder with selected folder in it gets removed. 231 // A folder with selected folder in it gets removed.
232 removeChild(TEST_TREE, 0);
233 overrideBookmarksGetSubTree([TEST_TREE]);
234
200 store.selectedId = '3'; 235 store.selectedId = '3';
201 store.onBookmarkRemoved_('1', {parentId: '0', index: '0'}); 236 store.onBookmarkRemoved_('1', {parentId:'0', index:'0'});
202 assertTrue(store.idToNodeMap_['0'].isSelected); 237 assertTrue(store.idToNodeMap_['0'].isSelectedFolder);
203 assertEquals('0', store.selectedId); 238 assertEquals('0', store.selectedId);
204 }); 239 });
205 240
206 test('bookmark gets updated after editing', function() { 241 test('bookmark gets updated after editing', function() {
207 // Edit title updates idToNodeMap_ properly. 242 // Edit title updates idToNodeMap_ properly.
208 store.onBookmarkChanged_('4', {'title': 'test'}); 243 store.onBookmarkChanged_('4', {'title': 'test'});
209 assertEquals('test', store.idToNodeMap_['4'].title); 244 assertEquals('test', store.idToNodeMap_['4'].title);
210 assertEquals('link4', store.idToNodeMap_['4'].url); 245 assertEquals('link4', store.idToNodeMap_['4'].url);
211 246
212 // Edit url updates idToNodeMap_ properly. 247 // Edit url updates idToNodeMap_ properly.
213 store.onBookmarkChanged_('5', {'url': 'http://www.google.com'}); 248 store.onBookmarkChanged_('5', {'url': 'http://www.google.com'});
214 assertEquals('', store.idToNodeMap_['5'].title); 249 assertEquals('', store.idToNodeMap_['5'].title);
215 assertEquals('http://www.google.com', store.idToNodeMap_['5'].url); 250 assertEquals('http://www.google.com', store.idToNodeMap_['5'].url);
216 251
217 // Edit url and title updates idToNodeMap_ properly. 252 // Edit url and title updates idToNodeMap_ properly.
218 store.onBookmarkChanged_('2', { 253 store.onBookmarkChanged_('2', {
219 'title': 'test', 254 'title': 'test',
220 'url': 'http://www.google.com', 255 'url': 'http://www.google.com',
221 }); 256 });
222 assertEquals('test', store.idToNodeMap_['2'].title); 257 assertEquals('test', store.idToNodeMap_['2'].title);
223 assertEquals('http://www.google.com', store.idToNodeMap_['2'].url); 258 assertEquals('http://www.google.com', store.idToNodeMap_['2'].url);
224 }); 259 });
225 260
226 ////////////////////////////////////////////////////////////////////////////// 261 //////////////////////////////////////////////////////////////////////////////
227 // search tests: 262 // search tests:
228 263
229 test('displayedList updates after searchTerm changes', function() { 264 test('displayedList updates after searchTerm changes', function() {
230 var SEARCH_RESULTS = [ 265 var SEARCH_RESULTS = [
231 'cat', 266 createItem('1', {title: 'cat'}),
232 'apple', 267 createItem('2', {title: 'apple'}),
233 'Paris', 268 createItem('3', {title: 'paris'}),
234 ]; 269 ];
235 overrideBookmarksSearch(SEARCH_RESULTS); 270 overrideBookmarksSearch(SEARCH_RESULTS);
236 271
237 // Search for a non-empty string. 272 // Search for a non-empty string.
238 store.searchTerm = 'a'; 273 store.searchTerm = 'a';
239 assertFalse(store.rootNode.children[0].isSelected); 274 assertFalse(store.rootNode.children[0].isSelectedFolder);
240 assertEquals(null, store.selectedId); 275 assertEquals(null, store.selectedId);
241 assertEquals(SEARCH_RESULTS, store.displayedList); 276 assertEquals(SEARCH_RESULTS, store.displayedList);
242 277
243 // Clear the searchTerm. 278 // Clear the searchTerm.
244 store.searchTerm = ''; 279 store.searchTerm = '';
245 var defaultFolder = store.rootNode.children[0]; 280 var defaultFolder = store.rootNode.children[0];
246 assertTrue(defaultFolder.isSelected); 281 assertTrue(defaultFolder.isSelectedFolder);
247 assertEquals(defaultFolder.id, store.selectedId); 282 assertEquals(defaultFolder.id, store.selectedId);
248 assertEquals(defaultFolder.children, store.displayedList); 283 assertEquals(defaultFolder.children, store.displayedList);
249 284
250 // Search with no bookmarks returned. 285 // Search with no bookmarks returned.
251 var EMPTY_RESULT = []; 286 overrideBookmarksSearch([]);
252 overrideBookmarksSearch(EMPTY_RESULT);
253 store.searchTerm = 'asdf'; 287 store.searchTerm = 'asdf';
254 assertEquals(EMPTY_RESULT, store.displayedList); 288 assertEquals(0, store.displayedList.length);
255 }); 289 });
256 290
257 ////////////////////////////////////////////////////////////////////////////// 291 //////////////////////////////////////////////////////////////////////////////
258 // router tests: 292 // router tests:
259 293
260 test('search updates from route', function() { 294 test('search updates from route', function() {
261 overrideBookmarksSearch([]); 295 overrideBookmarksSearch([]);
262 searchTerm = 'Pond'; 296 searchTerm = 'Pond';
263 navigateTo('/?q=' + searchTerm); 297 navigateTo('/?q=' + searchTerm);
264 assertEquals(searchTerm, store.searchTerm); 298 assertEquals(searchTerm, store.searchTerm);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 navigateTo('/?id=' + selectedId); 335 navigateTo('/?id=' + selectedId);
302 replaceStore(); 336 replaceStore();
303 assertEquals(selectedId, store.selectedId); 337 assertEquals(selectedId, store.selectedId);
304 }); 338 });
305 339
306 test('route updates from selectedId', function() { 340 test('route updates from selectedId', function() {
307 var selectedId = '2'; 341 var selectedId = '2';
308 store.selectedId = selectedId; 342 store.selectedId = selectedId;
309 assertEquals('chrome://bookmarks/?id=' + selectedId, window.location.href); 343 assertEquals('chrome://bookmarks/?id=' + selectedId, window.location.href);
310 }); 344 });
345
346 //////////////////////////////////////////////////////////////////////////////
347 // selection tests:
348
349 test('single select selects the correct bookmark', function() {
350 for (var id in store.idToNodeMap_)
351 assertFalse(store.idToNodeMap_[id].isSelectedItem);
352
353 store.fire('select-item', {item: store.idToNodeMap_['2']});
354 assertDeepEquals(
355 [true, false, false, false],
356 store.displayedList.map(i => i.isSelectedItem));
357 assertEquals(0, store.anchorIndex_);
358
359 // Select other item will remove the previous selection.
360 store.fire('select-item', {item: store.idToNodeMap_['3']});
361 assertDeepEquals(
362 [false, true, false, false],
363 store.displayedList.map(i => i.isSelectedItem));
364 assertEquals(1, store.anchorIndex_);
365
366 // Delete the selected item will unselect everything.
367 store.selectedId = '1';
368 store.fire('select-item', {item: store.idToNodeMap_['2']});
369 removeChild(TEST_TREE.children[0], 0);
370 overrideBookmarksGetSubTree([TEST_TREE.children[0]]);
371 store.onBookmarkRemoved_('2', {parentId: '1', index: 0});
372 assertDeepEquals(
373 [false, false, false],
374 store.displayedList.map(i => i.isSelectedItem));
375 assertEquals(null, store.anchorIndex_);
376
377 // Changing the selected folder will remove the select status of the
378 // bookmark.
379 store.selectedId = '3';
380 assertDeepEquals(
381 [false, false, false],
382 store.idToNodeMap_['1'].children.map(i => i.isSelectedItem));
383 assertEquals(null, store.anchorIndex_);
384 });
385
386 test('shift select selects the correct bookmarks', function() {
387 // When nothing has been selected, it selects a single item.
388 assertEquals(null, store.anchorIndex_);
389 store.fire('select-item', {item: store.idToNodeMap_['6'], range: true});
390 assertDeepEquals(
391 [false, false, true, false],
392 store.displayedList.map(i => i.isSelectedItem));
393 assertEquals(2, store.anchorIndex_);
394
395 // Select an item below the previous selected item.
396 store.fire('select-item', {item: store.idToNodeMap_['7'], range: true});
397 assertEquals(2, store.anchorIndex_);
398 assertDeepEquals(
399 [false, false, true, true],
400 store.displayedList.map(i => i.isSelectedItem));
401
402 // Select an item above the previous selected item.
403 store.fire('select-item', {item: store.idToNodeMap_['2'], range: true});
404 assertEquals(2, store.anchorIndex_);
405 assertDeepEquals(
406 [true, true, true, false],
407 store.displayedList.map(i => i.isSelectedItem));
408 });
409
410 test('ctrl select selects the correct bookmarks', function() {
411 // When nothing has been selected, it selects a single item.
412 assertEquals(null, store.anchorIndex_);
413 store.fire('select-item', {item: store.idToNodeMap_['6'], add: true});
414 assertDeepEquals(
415 [false, false, true, false],
416 store.displayedList.map(i => i.isSelectedItem));
417 assertEquals(2, store.anchorIndex_);
418
419 // Select a new item will not deselect the previous item, but will update
420 // anchorIndex_.
421 store.fire('select-item', {item: store.idToNodeMap_['2'], add: true});
422 assertDeepEquals(
423 [true, false, true, false],
424 store.displayedList.map(i => i.isSelectedItem));
425 assertEquals(0, store.anchorIndex_);
426 });
427
428
tsergeant 2017/02/02 04:35:21 Nit: Extra line here
jiaxi 2017/02/02 05:28:36 Done.
429 test('shift + ctrl select selects the correct bookmarks', function() {
430 store.fire('select-item', {item: store.displayedList[0]});
431 store.fire(
432 'select-item', {item: store.displayedList[2], add: true, range: false});
433 store.fire(
434 'select-item', {item: store.displayedList[3], add: true, range: true});
435 assertDeepEquals(
436 [true, false, true, true],
437 store.displayedList.map(i => i.isSelectedItem));
438 assertEquals(2, store.anchorIndex_);
439 });
440
441 test('selection in search mode', function() {
442 // Item gets unselected in search.
443 overrideBookmarksSearch([
444 createItem('4', {url: 'link4'}),
445 createItem('2', {url: 'link2'}),
446 createItem('5', {url: 'link5'}),
447 ]);
448
449 store.selectedId = '1';
450 store.fire('select-item', {item: store.idToNodeMap_['3']});
451 store.searchTerm = 'a';
452 assertFalse(store.idToNodeMap_['3'].isSelectedItem);
453 assertEquals(null, store.anchorIndex_);
454
455 // anchorIndex_ gets updated properly in single select.
456 store.fire('select-item', {item: store.displayedList[1]});
457 assertDeepEquals(
458 [false, true, false],
459 store.displayedList.map(i => i.isSelectedItem));
460 assertEquals(1, store.anchorIndex_);
461
462 // anchorIndex_ gets updated properly in ctrl select.
463 store.fire('select-item', {item: store.displayedList[0], add: true});
464 assertDeepEquals(
465 [true, true, false],
466 store.displayedList.map(i => i.isSelectedItem));
467 assertEquals(0, store.anchorIndex_);
468
469 // Delete the selected item will unselect everything.
470 store.fire('select-item', {item: store.displayedList[1]});
471 overrideBookmarksSearch([
472 createItem('4', {url: 'link4'}),
473 createItem('5', {url: 'link5'}),
474 ]);
475 removeChild(TEST_TREE.children[0], 0);
476 overrideBookmarksGetSubTree([TEST_TREE.children[0]]);
477
478 store.onBookmarkRemoved_('2', {parentId: '1', index: 0});
479 assertDeepEquals(
480 [false, false],
481 store.displayedList.map(i => i.isSelectedItem));
482 assertEquals(null, store.anchorIndex_);
483
484 // Shift+Ctrl select selects the right item.
485 overrideBookmarksSearch([
486 createItem('4', {url: 'link4'}),
487 createFolder('3', []),
488 createItem('5', {url: 'link5'}),
489 createItem('6', {url: 'link4'}),
490 createItem('7', {url: 'link5'}),
491 ]);
492 store.searchTerm = 'b';
493 store.fire('select-item', {item: store.displayedList[0]});
494 store.fire(
495 'select-item', {item: store.displayedList[2], add: true, range: false});
496 store.fire(
497 'select-item', {item: store.displayedList[4], add: true, range: true});
498 assertDeepEquals(
499 [true, false, true, true, true],
500 store.displayedList.map(i => i.isSelectedItem));
501 assertEquals(2, store.anchorIndex_);
502 });
311 }); 503 });
OLDNEW
« no previous file with comments | « chrome/test/data/webui/md_bookmarks/item_test.js ('k') | chrome/test/data/webui/md_bookmarks/test_util.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698