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

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

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

Powered by Google App Engine
This is Rietveld 408576698