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

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

Issue 2645273002: [MD Bookmarks] Modify search to retain the previously selected folder. (Closed)
Patch Set: Rebase and update test to use selectFolder. 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
« no previous file with comments | « chrome/test/data/webui/md_bookmarks/sidebar_test.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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');
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 '8': 'rootNode.children.#3', 86 '8': 'rootNode.children.#3',
87 }; 87 };
88 88
89 for (var id in store.idToNodeMap_) 89 for (var id in store.idToNodeMap_)
90 assertEquals(TEST_PATHS[id], store.idToNodeMap_[id].path); 90 assertEquals(TEST_PATHS[id], store.idToNodeMap_[id].path);
91 }); 91 });
92 92
93 ////////////////////////////////////////////////////////////////////////////// 93 //////////////////////////////////////////////////////////////////////////////
94 // editing bookmarks tree tests: 94 // editing bookmarks tree tests:
95 95
96 test('changing selectedId changes the displayedList', function() {
97 store.selectedId = '0';
98 assertEquals(TEST_TREE.children, store.displayedList);
99 store.selectedId = '1';
100 assertEquals(TEST_TREE.children[0].children, store.displayedList);
101 store.selectedId = '3';
102 assertEquals(
103 TEST_TREE.children[0].children[1].children, store.displayedList);
104
105 // Selecting an item selects the default folder.
106 store.selectedId = '5';
107 assertEquals(TEST_TREE.children[0].children, store.displayedList);
108 });
109
110 test('store updates on selected event', function() { 96 test('store updates on selected event', function() {
111 // First child of root is selected by default. 97 // First child of root is selected by default.
112 assertEquals('1', store.selectedId); 98 assertEquals('1', store.selectedId);
113 assertTrue(store.idToNodeMap_['1'].isSelectedFolder); 99 assertTrue(store.idToNodeMap_['1'].isSelectedFolder);
114 100
115 // Selecting a selected folder doesn't deselect it. 101 // Selecting a selected folder doesn't deselect it.
116 store.fire('selected-folder-changed', '1'); 102 store.fire('selected-folder-changed', {id: '1', clearSearch: true});
117 assertEquals('1', store.selectedId); 103 assertEquals('1', store.selectedId);
118 assertTrue(store.idToNodeMap_['1'].isSelectedFolder); 104 assertTrue(store.idToNodeMap_['1'].isSelectedFolder);
119 105
120 // Select a deeply nested descendant. 106 // Select a deeply nested descendant.
121 store.fire('selected-folder-changed', '3'); 107 store.fire('selected-folder-changed', {id: '3', clearSearch: true});
122 assertEquals('3', store.selectedId); 108 assertEquals('3', store.selectedId);
123 assertTrue(store.idToNodeMap_['3'].isSelectedFolder); 109 assertTrue(store.idToNodeMap_['3'].isSelectedFolder);
124 assertFalse(store.idToNodeMap_['1'].isSelectedFolder); 110 assertFalse(store.idToNodeMap_['1'].isSelectedFolder);
125 111
126 // Select a folder in separate subtree. 112 // Select a folder in separate subtree.
127 store.fire('selected-folder-changed', '8'); 113 store.fire('selected-folder-changed', {id: '8', clearSearch: true});
128 assertEquals('8', store.selectedId); 114 assertEquals('8', store.selectedId);
129 assertTrue(store.idToNodeMap_['8'].isSelectedFolder); 115 assertTrue(store.idToNodeMap_['8'].isSelectedFolder);
130 assertFalse(store.idToNodeMap_['3'].isSelectedFolder); 116 assertFalse(store.idToNodeMap_['3'].isSelectedFolder);
131 }); 117 });
132 118
133 test('store updates on open and close', function() { 119 test('store updates on open and close', function() {
134 // All folders are open by default. 120 // All folders are open by default.
135 for (var id in store.idToNodeMap_) { 121 for (var id in store.idToNodeMap_) {
136 if (store.idToNodeMap_[id].url) 122 if (store.idToNodeMap_[id].url)
137 continue; 123 continue;
138 124
139 assertTrue(store.idToNodeMap_[id].isOpen); 125 assertTrue(store.idToNodeMap_[id].isOpen);
140 } 126 }
141 127
142 // Closing a folder doesn't close any descendants. 128 // Closing a folder doesn't close any descendants.
143 store.fire('folder-open-changed', {id: '1', open: false}); 129 store.fire('folder-open-changed', {id: '1', open: false});
144 assertFalse(store.idToNodeMap_['1'].isOpen); 130 assertFalse(store.idToNodeMap_['1'].isOpen);
145 assertTrue(store.idToNodeMap_['3'].isOpen); 131 assertTrue(store.idToNodeMap_['3'].isOpen);
146 store.fire('folder-open-changed', {id: '1', open: true}); 132 store.fire('folder-open-changed', {id: '1', open: true});
147 133
148 // Closing an ancestor folder of a selected folder selects the ancestor. 134 // Closing an ancestor folder of a selected folder selects the ancestor.
149 store.fire('selected-folder-changed', '3'); 135 store.selectFolder('3');
150 store.fire('folder-open-changed', {id: '1', open: false}); 136 store.fire('folder-open-changed', {id: '1', open: false});
151 assertFalse(store.idToNodeMap_['1'].isOpen); 137 assertFalse(store.idToNodeMap_['1'].isOpen);
152 assertEquals('1', store.selectedId); 138 assertEquals('1', store.selectedId);
153 assertTrue(store.idToNodeMap_['1'].isSelectedFolder); 139 assertTrue(store.idToNodeMap_['1'].isSelectedFolder);
154 assertFalse(store.idToNodeMap_['3'].isSelectedFolder); 140 assertFalse(store.idToNodeMap_['3'].isSelectedFolder);
155 }); 141 });
156 142
157 test('parent folder opens when descendant folder is selected', function() { 143 test('parent folder opens when descendant folder is selected', function() {
158 store.idToNodeMap_['0'].isOpen = false; 144 store.idToNodeMap_['0'].isOpen = false;
159 store.idToNodeMap_['1'].isOpen = false; 145 store.idToNodeMap_['1'].isOpen = false;
160 store.idToNodeMap_['3'].isOpen = false; 146 store.idToNodeMap_['3'].isOpen = false;
161 store.fire('selected-folder-changed', '3'); 147 store.selectFolder('3');
162 assertTrue(store.idToNodeMap_['0'].isOpen);
163 assertTrue(store.idToNodeMap_['1'].isOpen); 148 assertTrue(store.idToNodeMap_['1'].isOpen);
164 assertFalse(store.idToNodeMap_['3'].isOpen); 149 assertFalse(store.idToNodeMap_['3'].isOpen);
165 }); 150 });
166 151
167 test('deleting a node updates the tree', function() { 152 test('deleting a node updates the tree', function() {
168 removeChild(TEST_TREE, 1); 153 removeChild(TEST_TREE, 1);
169 overrideBookmarksGetSubTree([TEST_TREE]); 154 overrideBookmarksGetSubTree([TEST_TREE]);
170 // Remove an empty folder/bookmark. 155 // Remove an empty folder/bookmark.
171 store.onBookmarkRemoved_('4', {parentId: '0', index: 1}); 156 store.onBookmarkRemoved_('4', {parentId: '0', index: 1});
172 157
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 '5': 'rootNode.children.#0', 201 '5': 'rootNode.children.#0',
217 '8': 'rootNode.children.#1' 202 '8': 'rootNode.children.#1'
218 }; 203 };
219 204
220 for (var id in store.idToNodeMap_) 205 for (var id in store.idToNodeMap_)
221 assertEquals(TEST_PATHS[id], store.idToNodeMap_[id].path); 206 assertEquals(TEST_PATHS[id], store.idToNodeMap_[id].path);
222 }); 207 });
223 208
224 test('selectedId updates after removing a selected folder', function() { 209 test('selectedId updates after removing a selected folder', function() {
225 // Selected folder gets removed. 210 // Selected folder gets removed.
226 store.selectedId = '8'; 211 store.selectFolder('8');
227 removeChild(TEST_TREE, 3); 212 removeChild(TEST_TREE, 3);
228 overrideBookmarksGetSubTree([TEST_TREE]); 213 overrideBookmarksGetSubTree([TEST_TREE]);
229 214
230 store.onBookmarkRemoved_('8', {parentId:'0', index:'3'}); 215 store.onBookmarkRemoved_('8', {parentId:'0', index:'3'});
231 assertTrue(store.idToNodeMap_['0'].isSelectedFolder); 216 assertTrue(store.idToNodeMap_['0'].isSelectedFolder);
232 assertEquals('0', store.selectedId); 217 assertEquals('0', store.selectedId);
233 218
234 // A folder with selected folder in it gets removed. 219 // A folder with selected folder in it gets removed.
235 store.selectedId = '3'; 220 store.selectFolder('3');
236 removeChild(TEST_TREE, 0); 221 removeChild(TEST_TREE, 0);
237 overrideBookmarksGetSubTree([TEST_TREE]); 222 overrideBookmarksGetSubTree([TEST_TREE]);
238 223
239 store.onBookmarkRemoved_('1', {parentId:'0', index:'0'}); 224 store.onBookmarkRemoved_('1', {parentId:'0', index:'0'});
240 assertTrue(store.idToNodeMap_['0'].isSelectedFolder); 225 assertTrue(store.idToNodeMap_['0'].isSelectedFolder);
241 assertEquals('0', store.selectedId); 226 assertEquals('0', store.selectedId);
242 }); 227 });
243 228
244 test('bookmark gets updated after editing', function() { 229 test('bookmark gets updated after editing', function() {
245 // Edit title updates idToNodeMap_ properly. 230 // Edit title updates idToNodeMap_ properly.
(...skipping 24 matching lines...) Expand all
270 ////////////////////////////////////////////////////////////////////////////// 255 //////////////////////////////////////////////////////////////////////////////
271 // search tests: 256 // search tests:
272 257
273 test('displayedList updates after searchTerm changes', function() { 258 test('displayedList updates after searchTerm changes', function() {
274 var SEARCH_RESULTS = [ 259 var SEARCH_RESULTS = [
275 createItem('1', {title: 'cat'}), 260 createItem('1', {title: 'cat'}),
276 createItem('2', {title: 'apple'}), 261 createItem('2', {title: 'apple'}),
277 createItem('3', {title: 'paris'}), 262 createItem('3', {title: 'paris'}),
278 ]; 263 ];
279 overrideBookmarksSearch(SEARCH_RESULTS); 264 overrideBookmarksSearch(SEARCH_RESULTS);
265 var prevFolder = store.idToNodeMap_[store.selectedId];
280 266
281 // Search for a non-empty string. 267 // Search for a non-empty string.
282 store.searchTerm = 'a'; 268 store.searchTerm = 'a';
283 assertFalse(store.rootNode.children[0].isSelectedFolder); 269 assertFalse(prevFolder.isSelectedFolder);
284 assertEquals(null, store.selectedId); 270 assertEquals(prevFolder.id, store.selectedId);
285 assertEquals(SEARCH_RESULTS, store.displayedList); 271 assertEquals(SEARCH_RESULTS, store.displayedList);
286 272
287 // Clear the searchTerm. 273 // Clearing search sets the displayed list to the previous folder.
288 store.searchTerm = ''; 274 store.searchTerm = '';
289 var defaultFolder = store.rootNode.children[0]; 275 assertTrue(prevFolder.isSelectedFolder);
290 assertTrue(defaultFolder.isSelectedFolder); 276 assertEquals(prevFolder.id, store.selectedId);
291 assertEquals(defaultFolder.id, store.selectedId); 277 assertEquals(prevFolder.children, store.displayedList);
292 assertEquals(defaultFolder.children, store.displayedList);
293 278
294 // Search with no bookmarks returned. 279 // Search with no bookmarks returned.
295 overrideBookmarksSearch([]); 280 overrideBookmarksSearch([]);
296 store.searchTerm = 'asdf'; 281 store.searchTerm = 'asdf';
297 assertEquals(0, store.displayedList.length); 282 assertEquals(0, store.displayedList.length);
298 }); 283 });
299 284
300 ////////////////////////////////////////////////////////////////////////////// 285 //////////////////////////////////////////////////////////////////////////////
301 // router tests: 286 // router tests:
302 287
303 test('search updates from route', function() { 288 test('search updates from route', function() {
304 overrideBookmarksSearch([]); 289 overrideBookmarksSearch([]);
290
291 // Route with basic search.
305 searchTerm = 'Pond'; 292 searchTerm = 'Pond';
306 navigateTo('/?q=' + searchTerm); 293 navigateTo('/?q=' + searchTerm);
307 assertEquals(searchTerm, store.searchTerm); 294 assertEquals(searchTerm, store.searchTerm);
295 assertEquals(store.rootNode.children[0].id, store.selectedId);
296
297 // Route with selected folder and search.
298 var selectedId = '3';
299 searchTerm = 'Fish';
300 navigateTo('/?id=' + selectedId + '&q=' + searchTerm);
301 assertEquals(searchTerm, store.searchTerm);
302 assertEquals(selectedId, store.selectedId);
303
304 // Route with invalid selected folder and search.
305 selectedId = 'bar';
306 searchTerm = 'foo';
307 navigateTo('/?q=' + searchTerm + '&id=' + selectedId);
308 assertEquals(searchTerm, store.searchTerm);
309 assertEquals(store.rootNode.children[0].id, store.selectedId);
308 }); 310 });
309 311
310 test('search updates from route on setup', function() { 312 test('search updates from route on setup', function() {
311 overrideBookmarksSearch([]); 313 overrideBookmarksSearch([]);
312 var searchTerm = 'Boat24'; 314 var searchTerm = 'Boat24';
313 navigateTo('/?q=' + searchTerm); 315 navigateTo('/?q=' + searchTerm);
314 replaceStore(); 316 replaceStore();
315 assertEquals(searchTerm, store.searchTerm); 317 assertEquals(searchTerm, store.searchTerm);
316 }); 318 });
317 319
318 test('route updates from search', function() { 320 test('route updates from search', function() {
319 overrideBookmarksSearch([]); 321 overrideBookmarksSearch([]);
322 var prevFolderId = '3';
323 store.selectFolder(prevFolderId);
324
325 // Searching sets the previous folder and searchTerm as the URL parameters.
320 var searchTerm = 'Boat24'; 326 var searchTerm = 'Boat24';
321 store.searchTerm = searchTerm; 327 store.searchTerm = searchTerm;
322 assertEquals('chrome://bookmarks/?q=' + searchTerm, window.location.href); 328 assertEquals(
329 'chrome://bookmarks/?id=' + prevFolderId + '&q=' + searchTerm,
330 window.location.href);
331
332 // Search parameter is removed from the URL when search is cleared.
333 searchTerm = '';
334 store.searchTerm = searchTerm;
335 assertEquals(
336 'chrome://bookmarks/?id=' + prevFolderId, window.location.href);
323 }); 337 });
324 338
325 test('selectedId updates from route', function() { 339 test('selectedId updates from route', function() {
326 // Folder id routes to the corresponding folder. 340 // Folder id routes to the corresponding folder.
327 var selectedId = '3'; 341 var selectedId = '3';
328 navigateTo('/?id=' + selectedId); 342 navigateTo('/?id=' + selectedId);
329 assertEquals(selectedId, store.selectedId); 343 assertEquals(selectedId, store.selectedId);
330 344
331 // Bookmark id routes to the default Bookmarks Bar. 345 // Bookmark id routes to the default Bookmarks Bar.
332 var selectedId = '2'; 346 var selectedId = '2';
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 assertEquals(0, store.anchorIndex_); 380 assertEquals(0, store.anchorIndex_);
367 381
368 // Select other item will remove the previous selection. 382 // Select other item will remove the previous selection.
369 store.fire('select-item', {item: store.idToNodeMap_['3']}); 383 store.fire('select-item', {item: store.idToNodeMap_['3']});
370 assertDeepEquals( 384 assertDeepEquals(
371 [false, true, false, false], 385 [false, true, false, false],
372 store.displayedList.map(i => i.isSelectedItem)); 386 store.displayedList.map(i => i.isSelectedItem));
373 assertEquals(1, store.anchorIndex_); 387 assertEquals(1, store.anchorIndex_);
374 388
375 // Deleting the selected item will unselect everything. 389 // Deleting the selected item will unselect everything.
376 store.selectedId = '1'; 390 store.selectFolder('1');
377 store.fire('select-item', {item: store.idToNodeMap_['2']}); 391 store.fire('select-item', {item: store.idToNodeMap_['2']});
378 removeChild(TEST_TREE.children[0], 0); 392 removeChild(TEST_TREE.children[0], 0);
379 overrideBookmarksGetSubTree([TEST_TREE.children[0]]); 393 overrideBookmarksGetSubTree([TEST_TREE.children[0]]);
380 store.onBookmarkRemoved_('2', {parentId: '1', index: 0}); 394 store.onBookmarkRemoved_('2', {parentId: '1', index: 0});
381 assertDeepEquals( 395 assertDeepEquals(
382 [false, false, false], 396 [false, false, false],
383 store.displayedList.map(i => i.isSelectedItem)); 397 store.displayedList.map(i => i.isSelectedItem));
384 assertEquals(null, store.anchorIndex_); 398 assertEquals(null, store.anchorIndex_);
385 399
386 // Changing the selected folder will remove the select status of the 400 // Changing the selected folder will remove the select status of the
387 // bookmark. 401 // bookmark.
388 store.selectedId = '3'; 402 store.selectFolder('3');
389 assertDeepEquals( 403 assertDeepEquals(
390 [false, false, false], 404 [false, false, false],
391 store.idToNodeMap_['1'].children.map(i => i.isSelectedItem)); 405 store.idToNodeMap_['1'].children.map(i => i.isSelectedItem));
392 assertEquals(null, store.anchorIndex_); 406 assertEquals(null, store.anchorIndex_);
393 }); 407 });
394 408
395 test('shift select selects the correct bookmarks', function() { 409 test('shift select selects the correct bookmarks', function() {
396 // When nothing has been selected, it selects a single item. 410 // When nothing has been selected, it selects a single item.
397 assertEquals(null, store.anchorIndex_); 411 assertEquals(null, store.anchorIndex_);
398 store.fire('select-item', {item: store.idToNodeMap_['6'], range: true}); 412 store.fire('select-item', {item: store.idToNodeMap_['6'], range: true});
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 }); 461 });
448 462
449 test('selection in search mode', function() { 463 test('selection in search mode', function() {
450 // Item gets unselected in search. 464 // Item gets unselected in search.
451 overrideBookmarksSearch([ 465 overrideBookmarksSearch([
452 createItem('4', {url: 'link4'}), 466 createItem('4', {url: 'link4'}),
453 createItem('2', {url: 'link2'}), 467 createItem('2', {url: 'link2'}),
454 createItem('5', {url: 'link5'}), 468 createItem('5', {url: 'link5'}),
455 ]); 469 ]);
456 470
457 store.selectedId = '1'; 471 store.selectFolder('1');
458 store.fire('select-item', {item: store.idToNodeMap_['3']}); 472 store.fire('select-item', {item: store.idToNodeMap_['3']});
459 store.searchTerm = 'a'; 473 store.searchTerm = 'a';
460 assertFalse(store.idToNodeMap_['3'].isSelectedItem); 474 assertFalse(store.idToNodeMap_['3'].isSelectedItem);
461 assertEquals(null, store.anchorIndex_); 475 assertEquals(null, store.anchorIndex_);
462 476
463 // anchorIndex_ gets updated properly in single select. 477 // anchorIndex_ gets updated properly in single select.
464 store.fire('select-item', {item: store.displayedList[1]}); 478 store.fire('select-item', {item: store.displayedList[1]});
465 assertDeepEquals( 479 assertDeepEquals(
466 [false, true, false], 480 [false, true, false],
467 store.displayedList.map(i => i.isSelectedItem)); 481 store.displayedList.map(i => i.isSelectedItem));
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 store.fire( 516 store.fire(
503 'select-item', {item: store.displayedList[2], add: true, range: false}); 517 'select-item', {item: store.displayedList[2], add: true, range: false});
504 store.fire( 518 store.fire(
505 'select-item', {item: store.displayedList[4], add: true, range: true}); 519 'select-item', {item: store.displayedList[4], add: true, range: true});
506 assertDeepEquals( 520 assertDeepEquals(
507 [true, false, true, true, true], 521 [true, false, true, true, true],
508 store.displayedList.map(i => i.isSelectedItem)); 522 store.displayedList.map(i => i.isSelectedItem));
509 assertEquals(2, store.anchorIndex_); 523 assertEquals(2, store.anchorIndex_);
510 }); 524 });
511 }); 525 });
OLDNEW
« no previous file with comments | « chrome/test/data/webui/md_bookmarks/sidebar_test.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698