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

Unified Diff: chrome/test/data/webui/md_bookmarks/store_test.js

Issue 2639453002: [MD Bookmarks] Add Select for Bookmarks. (Closed)
Patch Set: fixed some comments 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 side-by-side diff with in-line comments
Download patch
« 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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 67b65c14df8e7bdc85a59b0e378c576602fd826e..3f7470cf909a51deada4933263bbc4c6a1eaadf2 100644
--- a/chrome/test/data/webui/md_bookmarks/store_test.js
+++ b/chrome/test/data/webui/md_bookmarks/store_test.js
@@ -27,6 +27,17 @@ suite('<bookmarks-store>', function() {
};
}
+ /**
+ * Overrides the chrome.bookmarks.getSubTree to pass results into the
+ * callback.
+ * @param {Array} results
+ */
+ function overrideBookmarksGetSubTree(results) {
+ chrome.bookmarks.getSubTree = function(parentId, callback) {
+ callback(results);
+ };
+ }
+
setup(function() {
TEST_TREE = createFolder('0', [
createFolder(
@@ -34,10 +45,12 @@ 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'}),
- createFolder('6', []),
+ createFolder('8', []),
]);
replaceStore();
@@ -68,7 +81,9 @@ suite('<bookmarks-store>', function() {
'3': 'rootNode.children.#0.children.#1',
'4': 'rootNode.children.#1',
'5': 'rootNode.children.#2',
- '6': 'rootNode.children.#3',
+ '6': 'rootNode.children.#0.children.#2',
+ '7': 'rootNode.children.#0.children.#3',
+ '8': 'rootNode.children.#3',
};
for (var id in store.idToNodeMap_)
@@ -95,24 +110,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', '6');
- assertEquals('6', store.selectedId);
- assertTrue(store.idToNodeMap_['6'].isSelected);
- assertFalse(store.idToNodeMap_['3'].isSelected);
+ store.fire('selected-folder-changed', '8');
+ assertEquals('8', store.selectedId);
+ assertTrue(store.idToNodeMap_['8'].isSelectedFolder);
+ assertFalse(store.idToNodeMap_['3'].isSelectedFolder);
});
test('store updates on open and close', function() {
@@ -135,13 +150,15 @@ 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() {
+ removeChild(TEST_TREE, 1);
+ overrideBookmarksGetSubTree([TEST_TREE]);
// 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);
@@ -157,18 +174,23 @@ suite('<bookmarks-store>', function() {
'2': 'rootNode.children.#0.children.#0',
'3': 'rootNode.children.#0.children.#1',
'5': 'rootNode.children.#1',
- '6': 'rootNode.children.#2',
+ '6': 'rootNode.children.#0.children.#2',
+ '7': 'rootNode.children.#0.children.#3',
+ '8': 'rootNode.children.#2',
};
for (var id in store.idToNodeMap_)
assertEquals(TEST_PATHS[id], store.idToNodeMap_[id].path);
// Remove a folder with children.
+ removeChild(TEST_TREE, 0);
+ overrideBookmarksGetSubTree([TEST_TREE]);
+
store.onBookmarkRemoved_('1', {parentId: '0', index: '0'});
// Check the tree is correct.
assertEquals('5', store.rootNode.children[0].id);
- assertEquals('6', store.rootNode.children[1].id);
+ assertEquals('8', store.rootNode.children[1].id);
// idToNodeMap_ has been updated.
assertEquals(undefined, store.idToNodeMap_['1']);
@@ -176,13 +198,13 @@ suite('<bookmarks-store>', function() {
assertEquals(undefined, store.idToNodeMap_['3']);
assertEquals(undefined, store.idToNodeMap_['4']);
assertEquals(store.rootNode.children[0], store.idToNodeMap_['5']);
- assertEquals(store.rootNode.children[1], store.idToNodeMap_['6']);
+ assertEquals(store.rootNode.children[1], store.idToNodeMap_['8']);
// Paths have been updated.
TEST_PATHS = {
'0': 'rootNode',
'5': 'rootNode.children.#0',
- '6': 'rootNode.children.#1'
+ '8': 'rootNode.children.#1'
};
for (var id in store.idToNodeMap_)
@@ -191,15 +213,21 @@ suite('<bookmarks-store>', function() {
test('selectedId updates after removing a selected folder', function() {
// Selected folder gets removed.
- store.selectedId = '2';
- store.onBookmarkRemoved_('2', {parentId: '1', index: '0'});
- assertTrue(store.idToNodeMap_['1'].isSelected);
- assertEquals('1', store.selectedId);
+ store.selectedId = '8';
+ removeChild(TEST_TREE, 3);
+ overrideBookmarksGetSubTree([TEST_TREE]);
+
+ store.onBookmarkRemoved_('8', {parentId:'0', index:'3'});
+ assertTrue(store.idToNodeMap_['0'].isSelectedFolder);
+ assertEquals('0', store.selectedId);
// A folder with selected folder in it gets removed.
store.selectedId = '3';
- store.onBookmarkRemoved_('1', {parentId: '0', index: '0'});
- assertTrue(store.idToNodeMap_['0'].isSelected);
+ removeChild(TEST_TREE, 0);
+ overrideBookmarksGetSubTree([TEST_TREE]);
+
+ store.onBookmarkRemoved_('1', {parentId:'0', index:'0'});
+ assertTrue(store.idToNodeMap_['0'].isSelectedFolder);
assertEquals('0', store.selectedId);
});
@@ -228,30 +256,29 @@ suite('<bookmarks-store>', function() {
test('displayedList updates after searchTerm changes', function() {
var SEARCH_RESULTS = [
- 'cat',
- 'apple',
- 'Paris',
+ createItem('1', {title: 'cat'}),
+ createItem('2', {title: 'apple'}),
+ createItem('3', {title: 'paris'}),
];
overrideBookmarksSearch(SEARCH_RESULTS);
// Search for a non-empty string.
store.searchTerm = 'a';
- assertFalse(store.rootNode.children[0].isSelected);
+ 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.isSelected);
+ assertTrue(defaultFolder.isSelectedFolder);
assertEquals(defaultFolder.id, store.selectedId);
assertEquals(defaultFolder.children, store.displayedList);
// Search with no bookmarks returned.
- var EMPTY_RESULT = [];
- overrideBookmarksSearch(EMPTY_RESULT);
+ overrideBookmarksSearch([]);
store.searchTerm = 'asdf';
- assertEquals(EMPTY_RESULT, store.displayedList);
+ assertEquals(0, store.displayedList.length);
});
//////////////////////////////////////////////////////////////////////////////
@@ -308,4 +335,161 @@ suite('<bookmarks-store>', function() {
store.selectedId = selectedId;
assertEquals('chrome://bookmarks/?id=' + selectedId, window.location.href);
});
+
+ //////////////////////////////////////////////////////////////////////////////
+ // selection tests:
+
+ 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_);
+
+ // Deleting the selected item will unselect everything.
+ store.selectedId = '1';
+ store.fire('select-item', {item: store.idToNodeMap_['2']});
+ removeChild(TEST_TREE.children[0], 0);
+ overrideBookmarksGetSubTree([TEST_TREE.children[0]]);
+ store.onBookmarkRemoved_('2', {parentId: '1', index: 0});
+ assertDeepEquals(
+ [false, false, false],
+ store.displayedList.map(i => i.isSelectedItem));
+ assertEquals(null, store.anchorIndex_);
+
+ // Changing the selected folder will remove the select status of the
+ // bookmark.
+ store.selectedId = '3';
+ assertDeepEquals(
+ [false, false, false],
+ store.idToNodeMap_['1'].children.map(i => i.isSelectedItem));
+ assertEquals(null, store.anchorIndex_);
+ });
+
+ test('shift select selects the correct bookmarks', function() {
+ // When nothing has been selected, it selects a single item.
+ assertEquals(null, store.anchorIndex_);
+ store.fire('select-item', {item: store.idToNodeMap_['6'], range: 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'], range: 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'], range: 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(null, store.anchorIndex_);
+ store.fire('select-item', {item: store.idToNodeMap_['6'], add: 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'], add: true});
+ assertDeepEquals(
+ [true, false, true, false],
+ store.displayedList.map(i => i.isSelectedItem));
+ assertEquals(0, store.anchorIndex_);
+ });
+
+ test('shift + ctrl select selects the correct bookmarks', function() {
+ store.fire('select-item', {item: store.displayedList[0]});
+ store.fire(
+ 'select-item', {item: store.displayedList[2], add: true, range: false});
+ store.fire(
+ 'select-item', {item: store.displayedList[3], add: true, range: true});
+ assertDeepEquals(
+ [true, false, true, true],
+ store.displayedList.map(i => i.isSelectedItem));
+ assertEquals(2, store.anchorIndex_);
+ });
+
+ test('selection in search mode', function() {
+ // Item gets unselected in search.
+ overrideBookmarksSearch([
+ createItem('4', {url: 'link4'}),
+ createItem('2', {url: 'link2'}),
+ createItem('5', {url: 'link5'}),
+ ]);
+
+ store.selectedId = '1';
+ store.fire('select-item', {item: store.idToNodeMap_['3']});
+ store.searchTerm = 'a';
+ assertFalse(store.idToNodeMap_['3'].isSelectedItem);
+ assertEquals(null, store.anchorIndex_);
+
+ // anchorIndex_ gets updated properly in single select.
+ store.fire('select-item', {item: store.displayedList[1]});
+ assertDeepEquals(
+ [false, true, false],
+ 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], add: true});
+ assertDeepEquals(
+ [true, true, false],
+ store.displayedList.map(i => i.isSelectedItem));
+ assertEquals(0, store.anchorIndex_);
+
+ // Deleting the selected item will unselect everything.
+ store.fire('select-item', {item: store.displayedList[1]});
+ overrideBookmarksSearch([
+ createItem('4', {url: 'link4'}),
+ createItem('5', {url: 'link5'}),
+ ]);
+ removeChild(TEST_TREE.children[0], 0);
+ overrideBookmarksGetSubTree([TEST_TREE.children[0]]);
+
+ store.onBookmarkRemoved_('2', {parentId: '1', index: 0});
+ assertDeepEquals(
+ [false, false],
+ store.displayedList.map(i => i.isSelectedItem));
+ assertEquals(null, store.anchorIndex_);
+
+ // Shift+Ctrl select selects the right items.
+ overrideBookmarksSearch([
+ createItem('4', {url: 'link4'}),
+ createFolder('3', []),
+ createItem('5', {url: 'link5'}),
+ createItem('6', {url: 'link4'}),
+ createItem('7', {url: 'link5'}),
+ ]);
+ store.searchTerm = 'b';
+ store.fire('select-item', {item: store.displayedList[0]});
+ store.fire(
+ 'select-item', {item: store.displayedList[2], add: true, range: false});
+ store.fire(
+ 'select-item', {item: store.displayedList[4], add: true, range: true});
+ assertDeepEquals(
+ [true, false, true, true, true],
+ store.displayedList.map(i => i.isSelectedItem));
+ assertEquals(2, store.anchorIndex_);
+ });
});
« 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