Chromium Code Reviews| Index: chrome/test/data/webui/md_bookmarks/store_test.js |
| diff --git a/chrome/test/data/webui/md_bookmarks/store_test.js b/chrome/test/data/webui/md_bookmarks/store_test.js |
| index a1cf7e0e42cf12e54260a79b23a8a7a35bce2eaf..bc89c57a047bdca6af78558a0b2fc40610da95fc 100644 |
| --- a/chrome/test/data/webui/md_bookmarks/store_test.js |
| +++ b/chrome/test/data/webui/md_bookmarks/store_test.js |
| @@ -13,6 +13,8 @@ suite('<bookmarks-store>', function() { |
| [ |
| createItem('2', {url: 'link2'}), |
| createFolder('3', []), |
| + createItem('6', {url: 'link4'}), |
| + createItem('7', {url: 'link5'}), |
| ]), |
| createItem('4', {url: 'link4'}), |
| createItem('5', {url: 'link5'}), |
| @@ -57,6 +59,8 @@ suite('<bookmarks-store>', function() { |
| '3': 'rootNode.children.#0.children.#1', |
| '4': 'rootNode.children.#1', |
| '5': 'rootNode.children.#2', |
| + '6': 'rootNode.children.#0.children.#2', |
| + '7': 'rootNode.children.#0.children.#3', |
| }; |
| for (var id in store.idToNodeMap_) |
| @@ -66,24 +70,24 @@ suite('<bookmarks-store>', function() { |
| test('store updates on selected event', function() { |
| // First child of root is selected by default. |
| assertEquals('1', store.selectedId); |
| - assertTrue(store.idToNodeMap_['1'].isSelected); |
| + assertTrue(store.idToNodeMap_['1'].isSelectedFolder); |
| // Selecting a selected folder doesn't deselect it. |
| store.fire('selected-folder-changed', '1'); |
| assertEquals('1', store.selectedId); |
| - assertTrue(store.idToNodeMap_['1'].isSelected); |
| + assertTrue(store.idToNodeMap_['1'].isSelectedFolder); |
| // Select a deeply nested descendant. |
| store.fire('selected-folder-changed', '3'); |
| assertEquals('3', store.selectedId); |
| - assertTrue(store.idToNodeMap_['3'].isSelected); |
| - assertFalse(store.idToNodeMap_['1'].isSelected); |
| + assertTrue(store.idToNodeMap_['3'].isSelectedFolder); |
| + assertFalse(store.idToNodeMap_['1'].isSelectedFolder); |
| // Select a folder in separate subtree. |
| store.fire('selected-folder-changed', '5'); |
| assertEquals('5', store.selectedId); |
| - assertTrue(store.idToNodeMap_['5'].isSelected); |
| - assertFalse(store.idToNodeMap_['3'].isSelected); |
| + assertTrue(store.idToNodeMap_['5'].isSelectedFolder); |
| + assertFalse(store.idToNodeMap_['3'].isSelectedFolder); |
| }); |
| test('store updates on open and close', function() { |
| @@ -106,13 +110,27 @@ suite('<bookmarks-store>', function() { |
| store.fire('folder-open-changed', {id: '1', open: false}); |
| assertFalse(store.idToNodeMap_['1'].isOpen); |
| assertEquals('1', store.selectedId); |
| - assertTrue(store.idToNodeMap_['1'].isSelected); |
| - assertFalse(store.idToNodeMap_['3'].isSelected); |
| + assertTrue(store.idToNodeMap_['1'].isSelectedFolder); |
| + assertFalse(store.idToNodeMap_['3'].isSelectedFolder); |
| }); |
| test('deleting a node updates the tree', function() { |
| + var DELETE_RESULTS = [createFolder('0', [ |
| + createFolder( |
| + '1', |
| + [ |
| + createItem('2', {url: 'link2'}), |
| + createFolder('3', []), |
| + createItem('6', {url: 'link4'}), |
| + createItem('7', {url: 'link5'}), |
| + ]), |
| + createItem('5', {url: 'link5'}), |
| + ])]; |
| + chrome.bookmarks.getSubTree = function(parentId, callback) { |
| + callback(DELETE_RESULTS); |
| + } |
| // Remove an empty folder/bookmark. |
| - store.onBookmarkRemoved_('4', {parentId: '0', index: '1'}); |
| + store.onBookmarkRemoved_('4', {parentId: '0', index: 1}); |
| // Check the tree is correct. |
| assertEquals('5', store.rootNode.children[1].id); |
| @@ -128,12 +146,18 @@ suite('<bookmarks-store>', function() { |
| '2': 'rootNode.children.#0.children.#0', |
| '3': 'rootNode.children.#0.children.#1', |
| '5': 'rootNode.children.#1', |
| + '6': 'rootNode.children.#0.children.#2', |
| + '7': 'rootNode.children.#0.children.#3', |
| }; |
| for (var id in store.idToNodeMap_) |
| assertEquals(TEST_PATHS[id], store.idToNodeMap_[id].path); |
| // Remove a folder with children. |
| + DELETE_RESULTS = [createFolder('0', [ |
|
tsergeant
2017/01/25 06:02:13
Overwriting this is a bit strange -- the ALLCAPS_N
jiaxi
2017/01/30 03:28:59
Done.
|
| + createItem('5', {url: 'link5'}), |
| + ])]; |
| + |
| store.onBookmarkRemoved_('1', {parentId: '0', index: '0'}); |
| // Check the tree is correct. |
| @@ -159,48 +183,60 @@ suite('<bookmarks-store>', function() { |
| test('selectedId updates after removing a selected folder', function() { |
| // Selected folder gets removed. |
| store.selectedId = '2'; |
| + var DELETE_RESULTS = [createFolder('1', [ |
| + createFolder('3', []), |
| + createItem('6', {url: 'link4'}), |
| + createItem('7', {url: 'link5'}), |
| + ])]; |
| + chrome.bookmarks.getSubTree = function(parentId, callback) { |
| + callback(DELETE_RESULTS); |
| + } |
| + |
| store.onBookmarkRemoved_('2', {parentId:'1', index:'0'}); |
| - assertTrue(store.idToNodeMap_['1'].isSelected); |
| + assertTrue(store.idToNodeMap_['1'].isSelectedFolder); |
| assertEquals('1', store.selectedId); |
| // A folder with selected folder in it gets removed. |
| + DELETE_RESULTS = [createFolder('0', [ |
| + createItem('4', {url: 'link4'}), |
| + createItem('5', {url: 'link5'}), |
| + ])]; |
| + |
| store.selectedId = '3'; |
| store.onBookmarkRemoved_('1', {parentId:'0', index:'0'}); |
| - assertTrue(store.idToNodeMap_['0'].isSelected); |
| + assertTrue(store.idToNodeMap_['0'].isSelectedFolder); |
| assertEquals('0', store.selectedId); |
| }); |
| test('displayedList updates after searchTerm changes', function() { |
| - var SEARCH_RESULTS = [ |
| - 'cat', |
| - 'apple', |
| - 'Paris', |
| - ]; |
| - |
| - chrome.bookmarks.search = function(searchTerm, callback) { |
| - callback(SEARCH_RESULTS); |
| - }; |
| - |
| - // Search for a non-empty string. |
| - store.searchTerm = 'a'; |
| - assertFalse(store.rootNode.children[0].isSelected); |
| - assertEquals(null, store.selectedId); |
| - assertEquals(SEARCH_RESULTS, store.displayedList); |
| - |
| - // Clear the searchTerm. |
| - store.searchTerm = ''; |
| - var defaultFolder = store.rootNode.children[0]; |
| - assertTrue(defaultFolder.isSelected); |
| - assertEquals(defaultFolder.id, store.selectedId); |
| - assertEquals(defaultFolder.children, store.displayedList); |
| - |
| - // Search with no bookmarks returned. |
| - var EMPTY_RESULT = []; |
| - chrome.bookmarks.search = function(searchTerm, callback) { |
| - callback(EMPTY_RESULT); |
| - }; |
| - store.searchTerm = 'asdf'; |
| - assertEquals(EMPTY_RESULT, store.displayedList); |
| + var SEARCH_RESULTS = [ |
| + createItem('1', {title: 'cat'}), |
| + createItem('2', {title: 'apple'}), |
| + createItem('3', {title: 'paris'}), |
| + ]; |
| + chrome.bookmarks.search = function(searchTerm, callback) { |
|
tsergeant
2017/01/25 06:02:13
You're gonna need to rebase to pick up Angela's ch
jiaxi
2017/01/30 03:28:59
I've merged Angela's patch and it took a while to
|
| + callback(SEARCH_RESULTS); |
| + }; |
| + |
| + // Search for a non-empty string. |
| + store.searchTerm = 'a'; |
| + assertFalse(store.rootNode.children[0].isSelectedFolder); |
| + assertEquals(null, store.selectedId); |
| + assertEquals(SEARCH_RESULTS, store.displayedList); |
| + |
| + // Clear the searchTerm. |
| + store.searchTerm = ''; |
| + var defaultFolder = store.rootNode.children[0]; |
| + assertTrue(defaultFolder.isSelectedFolder); |
| + assertEquals(defaultFolder.id, store.selectedId); |
| + assertEquals(defaultFolder.children, store.displayedList); |
| + |
| + // Search with no bookmarks returned. |
| + chrome.bookmarks.search = function(searchTerm, callback) { |
| + callback([]); |
| + }; |
| + store.searchTerm = 'asdf'; |
| + assertEquals(0, store.displayedList.length); |
| }); |
| test('bookmark gets updated after editing', function() { |
| @@ -222,4 +258,179 @@ suite('<bookmarks-store>', function() { |
| assertEquals('test', store.idToNodeMap_['2'].title); |
| assertEquals('http://www.google.com', store.idToNodeMap_['2'].url); |
| }); |
| + |
| + test('single select selects the correct bookmark', function() { |
| + for (var id in store.idToNodeMap_) { |
| + assertFalse(store.idToNodeMap_[id].isSelectedItem); |
| + } |
| + |
| + store.fire('select-item', {item: store.idToNodeMap_['2']}); |
| + assertDeepEquals( |
| + [true, false, false, false], |
| + store.displayedList.map(i => i.isSelectedItem)); |
| + assertEquals(0, store.anchorIndex_); |
| + |
| + // Select other item will remove the previous selection. |
| + store.fire('select-item', {item: store.idToNodeMap_['3']}); |
| + assertDeepEquals( |
| + [false, true, false, false], |
| + store.displayedList.map(i => i.isSelectedItem)); |
| + assertEquals(1, store.anchorIndex_); |
| + |
| + // Delete the selected item will select the next item. |
| + store.fire('select-item', {item: store.idToNodeMap_['2']}); |
| + var DELETE_RESULTS = [createFolder('1', [ |
| + createFolder('3', []), |
| + createItem('6', {url: 'link4'}), |
| + createItem('7', {url: 'link5'}), |
| + ])]; |
| + chrome.bookmarks.getSubTree = function(parentId, callback) { |
| + callback(DELETE_RESULTS); |
| + } |
| + store.onBookmarkRemoved_('2', {parentId: '1', index: 0}); |
| + assertDeepEquals( |
| + [true, false, false], |
| + store.displayedList.map(i => i.isSelectedItem)); |
| + assertEquals(0, store.anchorIndex_); |
| + |
| + // Delete the selected item at the end of the list will select the previous |
| + // item. |
| + store.fire('select-item', {item: store.idToNodeMap_['7']}); |
| + DELETE_RESULTS = [createFolder('1', [ |
| + createFolder('3', []), |
| + createItem('6', {url: 'link4'}), |
| + ])]; |
| + store.onBookmarkRemoved_('7', {parentId: '1', index: 2}); |
| + assertDeepEquals( |
| + [false, true], |
| + store.displayedList.map(i => i.isSelectedItem)); |
| + assertEquals(1, store.anchorIndex_); |
| + |
| + // Changing the selected folder will remove the select status of the |
| + // bookmark. |
| + store.selectedId = '3'; |
| + assertDeepEquals( |
| + [false, false], |
| + store.idToNodeMap_['1'].children.map(i => i.isSelectedItem)); |
| + assertEquals(undefined, store.anchorIndex_); |
| + }); |
| + |
| + test('shift select selects the correct bookmarks', function() { |
| + // When nothing has been selected, it selects a single item. |
| + assertEquals(undefined, store.anchorIndex_); |
| + store.fire('select-item', {item: store.idToNodeMap_['6'], shiftKey: true}); |
| + assertDeepEquals( |
| + [false, false, true, false], |
| + store.displayedList.map(i => i.isSelectedItem)); |
| + assertEquals(2, store.anchorIndex_); |
| + |
| + // Select an item below the previous selected item. |
| + store.fire('select-item', {item: store.idToNodeMap_['7'], shiftKey: true}); |
| + assertEquals(2, store.anchorIndex_); |
| + assertDeepEquals( |
| + [false, false, true, true], |
| + store.displayedList.map(i => i.isSelectedItem)); |
| + |
| + // Select an item above the previous selected item. |
| + store.fire('select-item', {item: store.idToNodeMap_['2'], shiftKey: true}); |
| + assertEquals(2, store.anchorIndex_); |
| + assertDeepEquals( |
| + [true, true, true, false], |
| + store.displayedList.map(i => i.isSelectedItem)); |
| + }); |
| + |
| + test('ctrl select selects the correct bookmarks', function() { |
| + // When nothing has been selected, it selects a single item. |
| + assertEquals(undefined, store.anchorIndex_); |
| + store.fire('select-item', {item: store.idToNodeMap_['6'], ctrlKey: true}); |
| + assertDeepEquals( |
| + [false, false, true, false], |
| + store.displayedList.map(i => i.isSelectedItem)); |
| + assertEquals(2, store.anchorIndex_); |
| + |
| + // Select a new item will not deselect the previous item, but will update |
| + // anchorIndex_. |
| + store.fire('select-item', {item: store.idToNodeMap_['2'], ctrlKey: true}); |
| + assertDeepEquals( |
| + [true, false, true, false], |
| + store.displayedList.map(i => i.isSelectedItem)); |
| + assertEquals(0, store.anchorIndex_); |
| + }); |
| + |
| + test('selection in search mode', function() { |
| + // Item gets unselected in search. |
| + var SEARCH_RESULTS = [ |
| + createItem('4', {url: 'link4'}), |
| + createItem('2', {url: 'link2'}), |
| + createItem('5', {url: 'link5'}), |
| + ]; |
| + chrome.bookmarks.search = function(searchTerm, callback) { |
| + callback(SEARCH_RESULTS); |
| + }; |
| + |
| + store.selectedId = '1'; |
| + store.fire('select-item', {item: store.idToNodeMap_['3']}); |
| + store.searchTerm = 'a'; |
| + assertFalse(store.idToNodeMap_['3'].isSelectedItem); |
| + assertEquals(undefined, store.anchorIndex_); |
| + |
| + // anchorIndex_ gets updated properly in single select. |
| + store.fire('select-item', {item: store.displayedList[1]}); |
| + assertDeepEquals( |
| + [undefined, true, undefined], |
| + store.displayedList.map(i => i.isSelectedItem)); |
| + assertEquals(1, store.anchorIndex_); |
| + |
| + // anchorIndex_ gets updated properly in ctrl select. |
| + store.fire('select-item', {item: store.displayedList[0], ctrlKey: true}); |
| + assertDeepEquals( |
| + [true, true, undefined], |
| + store.displayedList.map(i => i.isSelectedItem)); |
| + assertEquals(0, store.anchorIndex_); |
| + |
| + // Delete the selected item will select the next item. |
| + store.fire('select-item', {item: store.displayedList[1]}); |
| + SEARCH_RESULTS = [ |
| + createItem('4', {url: 'link4'}), |
| + createItem('5', {url: 'link5'}), |
| + ]; |
| + var DELETE_RESULTS = [createFolder('1', [ |
| + createFolder('3', []), |
| + createItem('6', {url: 'link4'}), |
| + createItem('7', {url: 'link5'}), |
| + ])]; |
| + chrome.bookmarks.getSubTree = function(parentId, callback) { |
| + callback(DELETE_RESULTS); |
| + } |
| + |
| + store.onBookmarkRemoved_('2', {parentId: '1', index: 0}); |
| + assertDeepEquals( |
| + [undefined, true], |
| + store.displayedList.map(i => i.isSelectedItem)); |
| + assertEquals(1, store.anchorIndex_); |
| + |
| + // Delete the selected item at the end of the list will select the previous |
| + // item. |
| + store.fire('select-item', {item: store.displayedList[1]}); |
| + SEARCH_RESULTS = [ |
| + createItem('4', {url: 'link4'}), |
| + createItem('2', {url: 'link2'}), |
| + ]; |
| + DELETE_RESULTS = [createFolder('0', [ |
| + createFolder( |
| + '1', |
| + [ |
| + createItem('2', {url: 'link2'}), |
| + createFolder('3', []), |
| + createItem('6', {url: 'link4'}), |
| + createItem('7', {url: 'link5'}), |
| + ]), |
| + createItem('4', {url: 'link4'}), |
| + ])]; |
| + |
| + assertDeepEquals( |
| + [undefined, true], |
| + store.displayedList.map(i => i.isSelectedItem)); |
| + assertEquals(1, store.anchorIndex_); |
| + }); |
| }); |