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

Side by Side Diff: chrome/test/data/webui/md_bookmarks/folder_node_test.js

Issue 2820153003: [MD Bookmarks] Add keyboard navigation to sidebar. (Closed)
Patch Set: Created 3 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 suite('<bookmarks-folder-node>', function() { 5 suite('<bookmarks-folder-node>', function() {
6 var rootNode; 6 var rootNode;
7 var store; 7 var store;
8 var focusedNode;
9
10 function getFolderNode(id) {
11 return findFolderNode(rootNode, id);
12 }
8 13
9 setup(function() { 14 setup(function() {
10 store = new bookmarks.TestStore({ 15 store = new bookmarks.TestStore({
11 nodes: testTree( 16 nodes: testTree(
12 createFolder( 17 createFolder(
13 '1', 18 '1',
14 [ 19 [
15 createFolder( 20 createFolder(
16 '2', 21 '2',
17 [ 22 [
18 createFolder('3', []), 23 createFolder('3', []),
19 createFolder('4', []), 24 createFolder('4', []),
20 ]), 25 ]),
21 createItem('5'), 26 createItem('5'),
22 ]), 27 ]),
23 createFolder('7', [])), 28 createFolder('7', [])),
29 selectedFolder: '1',
24 }); 30 });
25 bookmarks.Store.instance_ = store; 31 bookmarks.Store.instance_ = store;
26 32
27 rootNode = document.createElement('bookmarks-folder-node'); 33 rootNode = document.createElement('bookmarks-folder-node');
28 rootNode.itemId = '0'; 34 rootNode.itemId = '0';
29 rootNode.depth = -1; 35 rootNode.depth = -1;
36 rootNode.addEventListener('folder-node-focus-changed', (e) => {
37 focusedNode = e.detail;
38 });
30 replaceBody(rootNode); 39 replaceBody(rootNode);
31 Polymer.dom.flush(); 40 Polymer.dom.flush();
32 }); 41 });
33 42
34 test('selecting and deselecting folders dispatches action', function() { 43 test('selecting and deselecting folders dispatches action', function() {
35 var rootFolders = rootNode.root.querySelectorAll('bookmarks-folder-node'); 44 var rootFolders = rootNode.root.querySelectorAll('bookmarks-folder-node');
36 var firstGen = rootFolders[0].$['descendants'].querySelectorAll( 45 var firstGen = rootFolders[0].$['descendants'].querySelectorAll(
37 'bookmarks-folder-node'); 46 'bookmarks-folder-node');
38 var secondGen = 47 var secondGen =
39 firstGen[0].$['descendants'].querySelectorAll('bookmarks-folder-node'); 48 firstGen[0].$['descendants'].querySelectorAll('bookmarks-folder-node');
(...skipping 28 matching lines...) Expand all
68 }); 77 });
69 Array.prototype.forEach.call(secondGen, function(f) { 78 Array.prototype.forEach.call(secondGen, function(f) {
70 assertEquals(2, f.depth); 79 assertEquals(2, f.depth);
71 assertEquals('2', f.style.getPropertyValue('--node-depth')); 80 assertEquals('2', f.style.getPropertyValue('--node-depth'));
72 }); 81 });
73 }); 82 });
74 83
75 test('doesn\'t highlight selected folder while searching', function() { 84 test('doesn\'t highlight selected folder while searching', function() {
76 var rootFolders = rootNode.root.querySelectorAll('bookmarks-folder-node'); 85 var rootFolders = rootNode.root.querySelectorAll('bookmarks-folder-node');
77 86
78 store.data.selectedFolder = '1';
79 store.notifyObservers();
80
81 assertEquals('1', rootFolders['0'].itemId); 87 assertEquals('1', rootFolders['0'].itemId);
82 assertTrue(rootFolders['0'].isSelectedFolder_); 88 assertTrue(rootFolders['0'].isSelectedFolder_);
83 89
84 store.data.search = { 90 store.data.search = {
85 term: 'test', 91 term: 'test',
86 inProgress: false, 92 inProgress: false,
87 results: ['3'], 93 results: ['3'],
88 }; 94 };
89 store.notifyObservers(); 95 store.notifyObservers();
90 96
91 assertFalse(rootFolders['0'].isSelectedFolder_); 97 assertFalse(rootFolders['0'].isSelectedFolder_);
92 }); 98 });
99
100 test('last visible descendant', function() {
101 assertEquals('7', rootNode.getLastVisibleDescendant_().itemId);
102 assertEquals('4', getFolderNode('1').getLastVisibleDescendant_().itemId);
103
104 store.data.closedFolders = new Set('2');
105 store.notifyObservers();
106
107 assertEquals('2', getFolderNode('1').getLastVisibleDescendant_().itemId);
108 });
109
110 test('next/previous folder nodes', function() {
111 function getNextVisibleFolderNode(parentId, targetId, reverse) {
112 return getFolderNode(parentId).getNextVisibleFolderNode_(
113 reverse, getFolderNode(targetId));
114 }
115
116 // Forwards.
117 assertEquals('2', getNextVisibleFolderNode('1', '1', false).itemId);
118 assertEquals('4', getNextVisibleFolderNode('2', '3', false).itemId);
119 assertEquals(null, getNextVisibleFolderNode('2', '4', false));
120
121 // Backwards.
122 assertEquals('1', getNextVisibleFolderNode('1', '2', true).itemId);
123 assertEquals('3', getNextVisibleFolderNode('2', '4', true).itemId);
124 assertEquals('4', getNextVisibleFolderNode('0', '7', true).itemId);
125
126 // Skips closed folders.
127 store.data.closedFolders = new Set('2');
128 store.notifyObservers();
129
130 assertEquals(null, getNextVisibleFolderNode('1', '2', false));
131 assertEquals(null, getNextVisibleFolderNode('2', '2', false));
132 assertEquals('2', getNextVisibleFolderNode('0', '7', true).itemId);
133 });
134
135 test('keyboard selection', function() {
136 var focusedId;
137
138 function changeKeyboardFocus(direction, targetId, activeElementId) {
139 return getFolderNode(targetId ? targetId : focusedId)
140 .changeKeyboardSelection_(
141 direction,
142 activeElementId ? getFolderNode(activeElementId) :
143 getFolderNode(focusedId).$.container);
144 }
145
146 store.data.closedFolders = new Set('2');
147 store.notifyObservers();
148
149 // The selected folder is focus enabled on attach.
150 focusedId = '1';
151 assertEquals(focusedId, focusedNode.itemId);
152
153 // Move down into child.
154 assertTrue(changeKeyboardFocus(1));
155 focusedId = '2';
156 assertEquals(focusedId, focusedNode.itemId);
157
158 // Move down past closed folders.
159 assertFalse(changeKeyboardFocus(1));
160 assertFalse(changeKeyboardFocus(1, '1', '2'));
161 assertTrue(changeKeyboardFocus(1, '0', '1'));
162 focusedId = '7';
163 assertEquals(focusedId, focusedNode.itemId);
164
165 // Move down past end of list.
166 assertFalse(changeKeyboardFocus(1));
167 assertFalse(changeKeyboardFocus(1, '0', '7'));
168 focusedId = '7';
169 assertEquals(focusedId, focusedNode.itemId);
170
171 // Move up past closed folders.
172 assertFalse(changeKeyboardFocus(-1));
173 assertTrue(changeKeyboardFocus(-1, '0', '7'));
174 focusedId = '2';
175 assertEquals(focusedId, focusedNode.itemId);
176
177 // Move up into parent.
178 assertFalse(changeKeyboardFocus(-1));
179 assertTrue(changeKeyboardFocus(-1, '1', '2'));
180 focusedId = '1';
181 assertEquals(focusedId, focusedNode.itemId);
182
183 // Move up past start of list.
184 assertFalse(changeKeyboardFocus(-1));
185 assertTrue(changeKeyboardFocus(-1, '0', '1'));
186 focusedId = '1';
187 assertEquals(focusedId, focusedNode.itemId);
188 });
93 }); 189 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698