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

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

Issue 2639453002: [MD Bookmarks] Add Select for Bookmarks. (Closed)
Patch Set: some more clean up Created 3 years, 11 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
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_);
+ });
});

Powered by Google App Engine
This is Rietveld 408576698