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

Side by Side Diff: chrome/browser/resources/chromeos/switch_access/tree_walker_unittest.gtestjs

Issue 2866123002: Added unit tests for tree_walker and automation_predicate. (Closed)
Patch Set: Created 3 years, 7 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
« no previous file with comments | « chrome/browser/resources/chromeos/switch_access/automation_predicate_unittest.gtestjs ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 /** 5 /**
6 * Test fixture for tree_walker.js. 6 * Test fixture for tree_walker.js.
7 * @constructor 7 * @constructor
8 * @extends {testing.Test} 8 * @extends {testing.Test}
9 */ 9 */
10 function AutomationTreeWalkerUnitTest () { 10 function AutomationTreeWalkerUnitTest () {
11 testing.Test.call(this); 11 testing.Test.call(this);
12 }; 12 };
13 13
14 AutomationTreeWalkerUnitTest.prototype = { 14 AutomationTreeWalkerUnitTest.prototype = {
15 __proto__: testing.Test.prototype, 15 __proto__: testing.Test.prototype,
16 16
17 /** @override */ 17 /** @override */
18 extraLibraries: [ 18 extraLibraries: [
19 'tree_walker.js', 19 'tree_walker.js',
20 ], 20 ],
21 21
22 /** @override */ 22 /** @override */
23 browsePreload: DUMMY_URL, 23 browsePreload: DUMMY_URL,
24 24
25 getSampleTree: function() { 25 getSampleTree: function() {
26 let loc = {left: 0, top: 0, width: 0, height: 0}; 26 let loc = {left: 0, top: 0, width: 0, height: 0};
27 // root 27 // root
28 // middle1 28 // upper1
David Tseng 2017/05/09 16:49:21 Suggestion: write a general method to create the f
elichtenberg 2017/05/09 23:35:30 I tried this, but it wasn't very readable, and it
29 // leaf1 29 // middle1
30 // leaf2 30 // lower1
31 // leaf3 31 // leaf1
32 // middle2 32 // leaf2
33 // leaf4 33 // leaf3
34 // leaf5 34 // lower2
35 // leaf4
36 // leaf5
37 // middle2
38 // lower3
39 // leaf6
40 // leaf7
41 // upper2
42 // leaf8
35 let root = {location: loc, state: {}}; 43 let root = {location: loc, state: {}};
44 let upper1 = {location: loc, state: {}};
45 let upper2 = {location: loc, state: {}};
36 let middle1 = {location: loc, state: {}}; 46 let middle1 = {location: loc, state: {}};
37 let middle2 = {location: loc, state: {}}; 47 let middle2 = {location: loc, state: {}};
48 let lower1 = {location: loc, state: {}};
49 let lower2 = {location: loc, state: {}};
50 let lower3 = {location: loc, state: {}};
38 let leaf1 = {location: loc, state: {}}; 51 let leaf1 = {location: loc, state: {}};
39 let leaf2 = {location: loc, state: {}}; 52 let leaf2 = {location: loc, state: {}};
40 let leaf3 = {location: loc, state: {}}; 53 let leaf3 = {location: loc, state: {}};
41 let leaf4 = {location: loc, state: {}}; 54 let leaf4 = {location: loc, state: {}};
42 let leaf5 = {location: loc, state: {}}; 55 let leaf5 = {location: loc, state: {}};
56 let leaf6 = {location: loc, state: {}};
57 let leaf7 = {location: loc, state: {}};
58 let leaf8 = {location: loc, state: {}};
43 59
44 root.firstChild = middle1; 60 root.firstChild = upper1;
45 root.lastChild = middle2; 61 root.lastChild = upper2;
46 62
47 middle1.parent = root; 63 upper1.parent = root;
48 middle2.parent = root; 64 upper2.parent = root;
65 upper1.nextSibling = upper2;
66 upper2.previousSibling = upper1;
67 upper1.firstChild = middle1;
68 upper1.lastChild = middle2;
69 upper2.firstChild = leaf8;
70 upper2.lastChild = leaf8;
71
72 middle1.parent = upper1;
73 middle2.parent = upper1;
49 middle1.nextSibling = middle2; 74 middle1.nextSibling = middle2;
50 middle2.previousSibling = middle1; 75 middle2.previousSibling = middle1;
51 middle1.firstChild = leaf1; 76 middle1.firstChild = lower1;
52 middle1.lastChild = leaf3; 77 middle1.lastChild = lower2;
53 middle2.firstChild = leaf4; 78 middle2.firstChild = lower3;
54 middle2.lastChild = leaf5; 79 middle2.lastChild = lower3;
55 80
56 leaf1.parent = middle1; 81 lower1.parent = middle1;
57 leaf2.parent = middle1; 82 lower2.parent = middle1;
58 leaf3.parent = middle1; 83 lower1.nextSibling = lower2;
84 lower2.previousSibling = lower1;
85 lower1.firstChild = leaf1;
86 lower1.lastChild = leaf3;
87 lower2.firstChild = leaf4;
88 lower2.lastChild = leaf5;
89
90 lower3.parent = middle2;
91 lower3.firstChild = leaf6;
92 lower3.lastChild = leaf7;
93
94 leaf1.parent = lower1;
95 leaf2.parent = lower1;
96 leaf3.parent = lower1;
59 leaf1.nextSibling = leaf2; 97 leaf1.nextSibling = leaf2;
60 leaf2.previousSibling = leaf1; 98 leaf2.previousSibling = leaf1;
61 leaf2.nextSibling = leaf3; 99 leaf2.nextSibling = leaf3;
62 leaf3.previousSibling = leaf2; 100 leaf3.previousSibling = leaf2;
63 101
64 leaf4.parent = middle2; 102 leaf4.parent = lower2;
65 leaf5.parent = middle2; 103 leaf5.parent = lower2;
66 leaf4.nextSibling = leaf5; 104 leaf4.nextSibling = leaf5;
67 leaf5.previousSibling = leaf4; 105 leaf5.previousSibling = leaf4;
68 106
107 leaf6.parent = lower3;
108 leaf7.parent = lower3;
109 leaf6.nextSibling = leaf7;
110 leaf7.previousSibling = leaf6;
111
112 leaf8.parent = upper2;
113
69 return { 114 return {
70 root: root, 115 root: root,
116 upper1: upper1,
117 upper2: upper2,
71 middle1: middle1, 118 middle1: middle1,
72 middle2: middle2, 119 middle2: middle2,
120 lower1: lower1,
121 lower2: lower2,
122 lower3: lower3,
73 leaf1: leaf1, 123 leaf1: leaf1,
74 leaf2: leaf2, 124 leaf2: leaf2,
75 leaf3: leaf3, 125 leaf3: leaf3,
76 leaf4: leaf4, 126 leaf4: leaf4,
77 leaf5: leaf5 127 leaf5: leaf5,
128 leaf6: leaf6,
129 leaf7: leaf7,
130 leaf8: leaf8
78 }; 131 };
79 }, 132 },
80 133
81 getDefaultRestrictions: function() { 134 getDefaultRestrictions: function() {
82 return { 135 return {
83 leaf: function(node) { 136 leaf: function(node) {
84 return false; 137 return false;
85 }, 138 },
86 visit: function(node) { 139 visit: function(node) {
87 return node.state.focusable === true; 140 return node.state.focusable === true;
88 }, 141 },
89 } 142 }
143 },
144
145 getSubtreeRestrictions: function() {
146 return {
147 leaf: function(node) {
148 return node.state.leaf === true;
149 },
150 visit: function(node) {
151 return node.state.focusable === true;
152 },
153 }
90 } 154 }
91 }; 155 };
92 156
93 TEST_F('AutomationTreeWalkerUnitTest', 'MoveToNode', function() { 157 TEST_F('AutomationTreeWalkerUnitTest', 'MoveToNodeWholeTree', function() {
94 chrome.automation = { 158 let t = this.getSampleTree();
95 RoleType: {DESKTOP: 'desktop', TAB: 'tab', TAB_LIST: 'tabList'}, 159 let treeWalker = new AutomationTreeWalker(
96 StateType: {FOCUSABLE: 'focusable', OFFSCREEN: 'offscreen'} 160 t.root, t.root, this.getDefaultRestrictions());
97 };
98 161
99 let t = this.getSampleTree(); 162 t.root.state['focusable'] = true;
100 let treeWalker = 163 t.middle1.state['focusable'] = true;
101 new AutomationTreeWalker(t.root, t.root, this.getDefaultRestrictions()); 164 t.leaf1.state['focusable'] = true;
102 165 t.leaf2.state['focusable'] = true;
103 let interesting = {focusable: true}; 166 t.leaf5.state['focusable'] = true;
104 t.leaf1.state = interesting; 167 t.lower3.state['focusable'] = true;
105 t.leaf2.state = interesting; 168 t.leaf6.state['focusable'] = true;
106 t.middle2.state = interesting; 169 t.upper2.state['focusable'] = true;
107 t.leaf5.state = interesting; 170 t.leaf8.state['focusable'] = true;
108 171
109 // Move to next node. 172 // Move to next node.
173 assertEquals(t.middle1, treeWalker.moveToNode(true));
110 assertEquals(t.leaf1, treeWalker.moveToNode(true)); 174 assertEquals(t.leaf1, treeWalker.moveToNode(true));
111 assertEquals(t.leaf2, treeWalker.moveToNode(true)); 175 assertEquals(t.leaf2, treeWalker.moveToNode(true));
112 assertEquals(t.middle2, treeWalker.moveToNode(true));
113 assertEquals(t.leaf5, treeWalker.moveToNode(true)); 176 assertEquals(t.leaf5, treeWalker.moveToNode(true));
114 assertEquals(t.leaf1, treeWalker.moveToNode(true)); 177 assertEquals(t.lower3, treeWalker.moveToNode(true));
178 assertEquals(t.leaf6, treeWalker.moveToNode(true));
179 assertEquals(t.upper2, treeWalker.moveToNode(true));
180 assertEquals(t.leaf8, treeWalker.moveToNode(true));
181 assertEquals(t.root, treeWalker.moveToNode(true));
182 assertEquals(t.middle1, treeWalker.moveToNode(true));
115 183
116 // Move to previous node. 184 // Move to previous node.
185 assertEquals(t.root, treeWalker.moveToNode(false));
186 assertEquals(t.leaf8, treeWalker.moveToNode(false));
187 assertEquals(t.upper2, treeWalker.moveToNode(false));
188 assertEquals(t.leaf6, treeWalker.moveToNode(false));
189 assertEquals(t.lower3, treeWalker.moveToNode(false));
117 assertEquals(t.leaf5, treeWalker.moveToNode(false)); 190 assertEquals(t.leaf5, treeWalker.moveToNode(false));
118 assertEquals(t.middle2, treeWalker.moveToNode(false));
119 assertEquals(t.leaf2, treeWalker.moveToNode(false)); 191 assertEquals(t.leaf2, treeWalker.moveToNode(false));
120 assertEquals(t.leaf1, treeWalker.moveToNode(false)); 192 assertEquals(t.leaf1, treeWalker.moveToNode(false));
121 assertEquals(t.leaf5, treeWalker.moveToNode(false)); 193 assertEquals(t.middle1, treeWalker.moveToNode(false));
194 });
195
196 TEST_F('AutomationTreeWalkerUnitTest', 'MoveToNodeInSubtree', function() {
197 let t = this.getSampleTree();
198 let treeWalker = new AutomationTreeWalker(
199 t.upper1, t.upper1, this.getSubtreeRestrictions());
200
201 t.lower2.state['leaf'] = true;
202 t.lower3.state['leaf'] = true;
203
204 t.root.state['focusable'] = true;
205 t.middle1.state['focusable'] = true;
206 t.leaf1.state['focusable'] = true;
207 t.leaf2.state['focusable'] = true;
208 t.leaf5.state['focusable'] = true;
209 t.lower3.state['focusable'] = true;
210 t.leaf6.state['focusable'] = true;
211 t.upper2.state['focusable'] = true;
212 t.leaf8.state['focusable'] = true;
213
214 // Move to next node.
215 assertEquals(t.middle1, treeWalker.moveToNode(true));
216 assertEquals(t.leaf1, treeWalker.moveToNode(true));
217 assertEquals(t.leaf2, treeWalker.moveToNode(true));
218 assertEquals(t.lower3, treeWalker.moveToNode(true));
219 assertEquals(t.middle1, treeWalker.moveToNode(true));
220
221 // Move to previous node.
222 assertEquals(t.lower3, treeWalker.moveToNode(false));
223 assertEquals(t.leaf2, treeWalker.moveToNode(false));
224 assertEquals(t.leaf1, treeWalker.moveToNode(false));
225 assertEquals(t.middle1, treeWalker.moveToNode(false));
226 assertEquals(t.lower3, treeWalker.moveToNode(false));
122 }); 227 });
123 228
124 TEST_F('AutomationTreeWalkerUnitTest', 'GetNextNode', function() { 229 TEST_F('AutomationTreeWalkerUnitTest', 'GetNextNode', function() {
125 let t = this.getSampleTree(); 230 let t = this.getSampleTree();
126 let treeWalker = 231 let treeWalker =
127 new AutomationTreeWalker(t.root, t.root, this.getDefaultRestrictions()); 232 new AutomationTreeWalker(t.middle1, t.middle1, this.getDefaultRestrictions ());
128 233
129 let order = 234 let order =
130 [t.root, t.middle1, t.leaf1, t.leaf2, t.leaf3, 235 [t.middle1, t.lower1, t.leaf1, t.leaf2, t.leaf3,
131 t.middle2, t.leaf4, t.leaf5]; 236 t.lower2, t.leaf4, t.leaf5];
132 let node = t.root; 237 let node = t.middle1;
133 for (let i = 0; i < order.length; i++) { 238 for (let i = 0; i < order.length; i++) {
134 assertEquals(order[i], node); 239 assertEquals(order[i], node);
135 node = treeWalker.getNextNode_(node); 240 node = treeWalker.getNextNode_(node);
136 } 241 }
137 assertEquals(undefined, node); 242 assertEquals(undefined, node);
138 }); 243 });
139 244
140 TEST_F('AutomationTreeWalkerUnitTest', 'GetPreviousNode', function() { 245 TEST_F('AutomationTreeWalkerUnitTest', 'GetPreviousNode', function() {
141 let t = this.getSampleTree(); 246 let t = this.getSampleTree();
142 let treeWalker = 247 let treeWalker =
143 new AutomationTreeWalker(t.root, t.root, this.getDefaultRestrictions()); 248 new AutomationTreeWalker(t.leaf5, t.middle1, this.getDefaultRestrictions() );
144 249
145 let order = 250 let order =
146 [t.leaf5, t.leaf4, t.middle2, t.leaf3, t.leaf2, 251 [t.leaf5, t.leaf4, t.lower2, t.leaf3, t.leaf2,
147 t.leaf1, t.middle1, t.root]; 252 t.leaf1, t.lower1, t.middle1];
148 let node = t.leaf5; 253 let node = t.leaf5;
149 for (let i = 0; i < order.length; i++) { 254 for (let i = 0; i < order.length; i++) {
150 assertEquals(order[i], node); 255 assertEquals(order[i], node);
151 node = treeWalker.getPreviousNode_(node); 256 node = treeWalker.getPreviousNode_(node);
152 } 257 }
153 assertEquals(undefined, node); 258 assertEquals(undefined, node);
154 }); 259 });
155 260
156 TEST_F('AutomationTreeWalkerUnitTest', 'GetYoungestDescendant', function() { 261 TEST_F('AutomationTreeWalkerUnitTest', 'GetYoungestDescendant', function() {
157 let t = this.getSampleTree(); 262 let t = this.getSampleTree();
158 let treeWalker = 263 let treeWalker =
159 new AutomationTreeWalker(t.root, t.root, this.getDefaultRestrictions()); 264 new AutomationTreeWalker(t.root, t.root, this.getDefaultRestrictions());
160 265
161 assertEquals(t.leaf5, treeWalker.getYoungestDescendant_(t.root)); 266 assertEquals(t.leaf8, treeWalker.getYoungestDescendant_(t.root));
162 assertEquals(t.leaf3, treeWalker.getYoungestDescendant_(t.middle1)); 267 assertEquals(t.leaf7, treeWalker.getYoungestDescendant_(t.upper1));
163 assertEquals(t.leaf5, treeWalker.getYoungestDescendant_(t.middle2)); 268 assertEquals(t.leaf8, treeWalker.getYoungestDescendant_(t.upper2));
269 assertEquals(t.leaf5, treeWalker.getYoungestDescendant_(t.middle1));
270 assertEquals(t.leaf7, treeWalker.getYoungestDescendant_(t.middle2));
271 assertEquals(t.leaf3, treeWalker.getYoungestDescendant_(t.lower1));
272 assertEquals(t.leaf5, treeWalker.getYoungestDescendant_(t.lower2));
273 assertEquals(t.leaf7, treeWalker.getYoungestDescendant_(t.lower3));
164 assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf1)); 274 assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf1));
165 assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf2)); 275 assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf2));
166 assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf3)); 276 assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf3));
167 assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf4)); 277 assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf4));
168 assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf5)); 278 assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf5));
279 assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf6));
280 assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf7));
281 assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf8));
169 }); 282 });
OLDNEW
« no previous file with comments | « chrome/browser/resources/chromeos/switch_access/automation_predicate_unittest.gtestjs ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698