| 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..643d9ec8c8cf00d5ca88d39dab298b2517664396 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', [
|
| + 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) {
|
| + 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', {id: '2'});
|
| + assertDeepEquals(
|
| + [true, false, false, false],
|
| + store.displayedList.map(i => i.isSelectedItem));
|
| + assertEquals(0, store.prevSelectedItemIndex_);
|
| +
|
| + // Select other item will remove the previous selection.
|
| + store.fire('select-item', {id: '3'});
|
| + assertDeepEquals(
|
| + [false, true, false, false],
|
| + store.displayedList.map(i => i.isSelectedItem));
|
| + assertEquals(1, store.prevSelectedItemIndex_);
|
| +
|
| + // Delete the selected item will select the next item.
|
| + store.fire('select-item', {id: '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.prevSelectedItemIndex_);
|
| +
|
| + // Delete the selected item at the end of the list will select the previous
|
| + // item.
|
| + store.fire('select-item', {id: '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.prevSelectedItemIndex_);
|
| +
|
| + // 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.prevSelectedItemIndex_);
|
| + });
|
| +
|
| + test('shift select selects the correct bookmarks', function() {
|
| + // When nothing has been selected, it selects a single item.
|
| + assertEquals(undefined, store.prevSelectedItemIndex_);
|
| + store.fire('select-item', {id: '6', shiftKey: true});
|
| + assertDeepEquals(
|
| + [false, false, true, false],
|
| + store.displayedList.map(i => i.isSelectedItem));
|
| + assertEquals(2, store.prevSelectedItemIndex_);
|
| +
|
| + // Select an item below the previous selected item.
|
| + store.fire('select-item', {id: '7', shiftKey: true});
|
| + assertEquals(2, store.prevSelectedItemIndex_);
|
| + assertDeepEquals(
|
| + [false, false, true, true],
|
| + store.displayedList.map(i => i.isSelectedItem));
|
| +
|
| + // Select an item above the previous selected item.
|
| + store.fire('select-item', {id: '2', shiftKey: true});
|
| + assertEquals(2, store.prevSelectedItemIndex_);
|
| + 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.prevSelectedItemIndex_);
|
| + store.fire('select-item', {id: '6', ctrlKey: true});
|
| + assertDeepEquals(
|
| + [false, false, true, false],
|
| + store.displayedList.map(i => i.isSelectedItem));
|
| + assertEquals(2, store.prevSelectedItemIndex_);
|
| +
|
| + // Select a new item will not deselect the previous item, but will update
|
| + // prevSelectedItemIndex_.
|
| + store.fire('select-item', {id: '2', ctrlKey: true});
|
| + assertDeepEquals(
|
| + [true, false, true, false],
|
| + store.displayedList.map(i => i.isSelectedItem));
|
| + assertEquals(0, store.prevSelectedItemIndex_);
|
| + });
|
| +
|
| + 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', {id: '2'});
|
| + store.searchTerm = 'a';
|
| + assertFalse(store.idToNodeMap_['3'].isSelectedItem);
|
| + assertEquals(undefined, store.prevSelectedItemIndex_);
|
| +
|
| + // prevSelectedItemIndex_ gets updated properly in single select.
|
| + store.fire('select-item', {id: '2'});
|
| + assertDeepEquals(
|
| + [undefined, true, undefined],
|
| + store.displayedList.map(i => i.isSelectedItem));
|
| + assertEquals(1, store.prevSelectedItemIndex_);
|
| +
|
| + // prevSelectedItemIndex_ gets updated properly in ctrl select.
|
| + store.fire('select-item', {id: '4', ctrlKey: true});
|
| + assertDeepEquals(
|
| + [true, true, undefined],
|
| + store.displayedList.map(i => i.isSelectedItem));
|
| + assertEquals(0, store.prevSelectedItemIndex_);
|
| +
|
| + // Delete the selected item will select the next item.
|
| + store.fire('select-item', {id: '2'});
|
| + 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.prevSelectedItemIndex_);
|
| +
|
| + // Delete the selected item at the end of the list will select the previous
|
| + // item.
|
| + store.fire('select-item', {id: '5'});
|
| + 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.prevSelectedItemIndex_);
|
| + });
|
| });
|
|
|