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_); |
+ }); |
}); |