Index: chrome/browser/resources/chromeos/switch_access/tree_walker_unittest.gtestjs |
diff --git a/chrome/browser/resources/chromeos/switch_access/tree_walker_unittest.gtestjs b/chrome/browser/resources/chromeos/switch_access/tree_walker_unittest.gtestjs |
index ba095e0fdf34419e2761480c8c97e241dd0ac19b..9b8dee1d198df019504976ab05476b8fde8de4e3 100644 |
--- a/chrome/browser/resources/chromeos/switch_access/tree_walker_unittest.gtestjs |
+++ b/chrome/browser/resources/chromeos/switch_access/tree_walker_unittest.gtestjs |
@@ -25,56 +25,109 @@ AutomationTreeWalkerUnitTest.prototype = { |
getSampleTree: function() { |
let loc = {left: 0, top: 0, width: 0, height: 0}; |
// root |
- // middle1 |
- // leaf1 |
- // leaf2 |
- // leaf3 |
- // middle2 |
- // leaf4 |
- // leaf5 |
+ // 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
|
+ // middle1 |
+ // lower1 |
+ // leaf1 |
+ // leaf2 |
+ // leaf3 |
+ // lower2 |
+ // leaf4 |
+ // leaf5 |
+ // middle2 |
+ // lower3 |
+ // leaf6 |
+ // leaf7 |
+ // upper2 |
+ // leaf8 |
let root = {location: loc, state: {}}; |
+ let upper1 = {location: loc, state: {}}; |
+ let upper2 = {location: loc, state: {}}; |
let middle1 = {location: loc, state: {}}; |
let middle2 = {location: loc, state: {}}; |
+ let lower1 = {location: loc, state: {}}; |
+ let lower2 = {location: loc, state: {}}; |
+ let lower3 = {location: loc, state: {}}; |
let leaf1 = {location: loc, state: {}}; |
let leaf2 = {location: loc, state: {}}; |
let leaf3 = {location: loc, state: {}}; |
let leaf4 = {location: loc, state: {}}; |
let leaf5 = {location: loc, state: {}}; |
+ let leaf6 = {location: loc, state: {}}; |
+ let leaf7 = {location: loc, state: {}}; |
+ let leaf8 = {location: loc, state: {}}; |
- root.firstChild = middle1; |
- root.lastChild = middle2; |
+ root.firstChild = upper1; |
+ root.lastChild = upper2; |
- middle1.parent = root; |
- middle2.parent = root; |
+ upper1.parent = root; |
+ upper2.parent = root; |
+ upper1.nextSibling = upper2; |
+ upper2.previousSibling = upper1; |
+ upper1.firstChild = middle1; |
+ upper1.lastChild = middle2; |
+ upper2.firstChild = leaf8; |
+ upper2.lastChild = leaf8; |
+ |
+ middle1.parent = upper1; |
+ middle2.parent = upper1; |
middle1.nextSibling = middle2; |
middle2.previousSibling = middle1; |
- middle1.firstChild = leaf1; |
- middle1.lastChild = leaf3; |
- middle2.firstChild = leaf4; |
- middle2.lastChild = leaf5; |
- |
- leaf1.parent = middle1; |
- leaf2.parent = middle1; |
- leaf3.parent = middle1; |
+ middle1.firstChild = lower1; |
+ middle1.lastChild = lower2; |
+ middle2.firstChild = lower3; |
+ middle2.lastChild = lower3; |
+ |
+ lower1.parent = middle1; |
+ lower2.parent = middle1; |
+ lower1.nextSibling = lower2; |
+ lower2.previousSibling = lower1; |
+ lower1.firstChild = leaf1; |
+ lower1.lastChild = leaf3; |
+ lower2.firstChild = leaf4; |
+ lower2.lastChild = leaf5; |
+ |
+ lower3.parent = middle2; |
+ lower3.firstChild = leaf6; |
+ lower3.lastChild = leaf7; |
+ |
+ leaf1.parent = lower1; |
+ leaf2.parent = lower1; |
+ leaf3.parent = lower1; |
leaf1.nextSibling = leaf2; |
leaf2.previousSibling = leaf1; |
leaf2.nextSibling = leaf3; |
leaf3.previousSibling = leaf2; |
- leaf4.parent = middle2; |
- leaf5.parent = middle2; |
+ leaf4.parent = lower2; |
+ leaf5.parent = lower2; |
leaf4.nextSibling = leaf5; |
leaf5.previousSibling = leaf4; |
+ leaf6.parent = lower3; |
+ leaf7.parent = lower3; |
+ leaf6.nextSibling = leaf7; |
+ leaf7.previousSibling = leaf6; |
+ |
+ leaf8.parent = upper2; |
+ |
return { |
root: root, |
+ upper1: upper1, |
+ upper2: upper2, |
middle1: middle1, |
middle2: middle2, |
+ lower1: lower1, |
+ lower2: lower2, |
+ lower3: lower3, |
leaf1: leaf1, |
leaf2: leaf2, |
leaf3: leaf3, |
leaf4: leaf4, |
- leaf5: leaf5 |
+ leaf5: leaf5, |
+ leaf6: leaf6, |
+ leaf7: leaf7, |
+ leaf8: leaf8 |
}; |
}, |
@@ -87,49 +140,101 @@ AutomationTreeWalkerUnitTest.prototype = { |
return node.state.focusable === true; |
}, |
} |
+ }, |
+ |
+ getSubtreeRestrictions: function() { |
+ return { |
+ leaf: function(node) { |
+ return node.state.leaf === true; |
+ }, |
+ visit: function(node) { |
+ return node.state.focusable === true; |
+ }, |
+ } |
} |
}; |
-TEST_F('AutomationTreeWalkerUnitTest', 'MoveToNode', function() { |
- chrome.automation = { |
- RoleType: {DESKTOP: 'desktop', TAB: 'tab', TAB_LIST: 'tabList'}, |
- StateType: {FOCUSABLE: 'focusable', OFFSCREEN: 'offscreen'} |
- }; |
- |
+TEST_F('AutomationTreeWalkerUnitTest', 'MoveToNodeWholeTree', function() { |
let t = this.getSampleTree(); |
- let treeWalker = |
- new AutomationTreeWalker(t.root, t.root, this.getDefaultRestrictions()); |
+ let treeWalker = new AutomationTreeWalker( |
+ t.root, t.root, this.getDefaultRestrictions()); |
- let interesting = {focusable: true}; |
- t.leaf1.state = interesting; |
- t.leaf2.state = interesting; |
- t.middle2.state = interesting; |
- t.leaf5.state = interesting; |
+ t.root.state['focusable'] = true; |
+ t.middle1.state['focusable'] = true; |
+ t.leaf1.state['focusable'] = true; |
+ t.leaf2.state['focusable'] = true; |
+ t.leaf5.state['focusable'] = true; |
+ t.lower3.state['focusable'] = true; |
+ t.leaf6.state['focusable'] = true; |
+ t.upper2.state['focusable'] = true; |
+ t.leaf8.state['focusable'] = true; |
// Move to next node. |
+ assertEquals(t.middle1, treeWalker.moveToNode(true)); |
assertEquals(t.leaf1, treeWalker.moveToNode(true)); |
assertEquals(t.leaf2, treeWalker.moveToNode(true)); |
- assertEquals(t.middle2, treeWalker.moveToNode(true)); |
assertEquals(t.leaf5, treeWalker.moveToNode(true)); |
- assertEquals(t.leaf1, treeWalker.moveToNode(true)); |
+ assertEquals(t.lower3, treeWalker.moveToNode(true)); |
+ assertEquals(t.leaf6, treeWalker.moveToNode(true)); |
+ assertEquals(t.upper2, treeWalker.moveToNode(true)); |
+ assertEquals(t.leaf8, treeWalker.moveToNode(true)); |
+ assertEquals(t.root, treeWalker.moveToNode(true)); |
+ assertEquals(t.middle1, treeWalker.moveToNode(true)); |
// Move to previous node. |
+ assertEquals(t.root, treeWalker.moveToNode(false)); |
+ assertEquals(t.leaf8, treeWalker.moveToNode(false)); |
+ assertEquals(t.upper2, treeWalker.moveToNode(false)); |
+ assertEquals(t.leaf6, treeWalker.moveToNode(false)); |
+ assertEquals(t.lower3, treeWalker.moveToNode(false)); |
assertEquals(t.leaf5, treeWalker.moveToNode(false)); |
- assertEquals(t.middle2, treeWalker.moveToNode(false)); |
assertEquals(t.leaf2, treeWalker.moveToNode(false)); |
assertEquals(t.leaf1, treeWalker.moveToNode(false)); |
- assertEquals(t.leaf5, treeWalker.moveToNode(false)); |
+ assertEquals(t.middle1, treeWalker.moveToNode(false)); |
+}); |
+ |
+TEST_F('AutomationTreeWalkerUnitTest', 'MoveToNodeInSubtree', function() { |
+ let t = this.getSampleTree(); |
+ let treeWalker = new AutomationTreeWalker( |
+ t.upper1, t.upper1, this.getSubtreeRestrictions()); |
+ |
+ t.lower2.state['leaf'] = true; |
+ t.lower3.state['leaf'] = true; |
+ |
+ t.root.state['focusable'] = true; |
+ t.middle1.state['focusable'] = true; |
+ t.leaf1.state['focusable'] = true; |
+ t.leaf2.state['focusable'] = true; |
+ t.leaf5.state['focusable'] = true; |
+ t.lower3.state['focusable'] = true; |
+ t.leaf6.state['focusable'] = true; |
+ t.upper2.state['focusable'] = true; |
+ t.leaf8.state['focusable'] = true; |
+ |
+ // Move to next node. |
+ assertEquals(t.middle1, treeWalker.moveToNode(true)); |
+ assertEquals(t.leaf1, treeWalker.moveToNode(true)); |
+ assertEquals(t.leaf2, treeWalker.moveToNode(true)); |
+ assertEquals(t.lower3, treeWalker.moveToNode(true)); |
+ assertEquals(t.middle1, treeWalker.moveToNode(true)); |
+ |
+ // Move to previous node. |
+ assertEquals(t.lower3, treeWalker.moveToNode(false)); |
+ assertEquals(t.leaf2, treeWalker.moveToNode(false)); |
+ assertEquals(t.leaf1, treeWalker.moveToNode(false)); |
+ assertEquals(t.middle1, treeWalker.moveToNode(false)); |
+ assertEquals(t.lower3, treeWalker.moveToNode(false)); |
}); |
TEST_F('AutomationTreeWalkerUnitTest', 'GetNextNode', function() { |
let t = this.getSampleTree(); |
let treeWalker = |
- new AutomationTreeWalker(t.root, t.root, this.getDefaultRestrictions()); |
+ new AutomationTreeWalker(t.middle1, t.middle1, this.getDefaultRestrictions()); |
let order = |
- [t.root, t.middle1, t.leaf1, t.leaf2, t.leaf3, |
- t.middle2, t.leaf4, t.leaf5]; |
- let node = t.root; |
+ [t.middle1, t.lower1, t.leaf1, t.leaf2, t.leaf3, |
+ t.lower2, t.leaf4, t.leaf5]; |
+ let node = t.middle1; |
for (let i = 0; i < order.length; i++) { |
assertEquals(order[i], node); |
node = treeWalker.getNextNode_(node); |
@@ -140,11 +245,11 @@ TEST_F('AutomationTreeWalkerUnitTest', 'GetNextNode', function() { |
TEST_F('AutomationTreeWalkerUnitTest', 'GetPreviousNode', function() { |
let t = this.getSampleTree(); |
let treeWalker = |
- new AutomationTreeWalker(t.root, t.root, this.getDefaultRestrictions()); |
+ new AutomationTreeWalker(t.leaf5, t.middle1, this.getDefaultRestrictions()); |
let order = |
- [t.leaf5, t.leaf4, t.middle2, t.leaf3, t.leaf2, |
- t.leaf1, t.middle1, t.root]; |
+ [t.leaf5, t.leaf4, t.lower2, t.leaf3, t.leaf2, |
+ t.leaf1, t.lower1, t.middle1]; |
let node = t.leaf5; |
for (let i = 0; i < order.length; i++) { |
assertEquals(order[i], node); |
@@ -158,12 +263,20 @@ TEST_F('AutomationTreeWalkerUnitTest', 'GetYoungestDescendant', function() { |
let treeWalker = |
new AutomationTreeWalker(t.root, t.root, this.getDefaultRestrictions()); |
- assertEquals(t.leaf5, treeWalker.getYoungestDescendant_(t.root)); |
- assertEquals(t.leaf3, treeWalker.getYoungestDescendant_(t.middle1)); |
- assertEquals(t.leaf5, treeWalker.getYoungestDescendant_(t.middle2)); |
+ assertEquals(t.leaf8, treeWalker.getYoungestDescendant_(t.root)); |
+ assertEquals(t.leaf7, treeWalker.getYoungestDescendant_(t.upper1)); |
+ assertEquals(t.leaf8, treeWalker.getYoungestDescendant_(t.upper2)); |
+ assertEquals(t.leaf5, treeWalker.getYoungestDescendant_(t.middle1)); |
+ assertEquals(t.leaf7, treeWalker.getYoungestDescendant_(t.middle2)); |
+ assertEquals(t.leaf3, treeWalker.getYoungestDescendant_(t.lower1)); |
+ assertEquals(t.leaf5, treeWalker.getYoungestDescendant_(t.lower2)); |
+ assertEquals(t.leaf7, treeWalker.getYoungestDescendant_(t.lower3)); |
assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf1)); |
assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf2)); |
assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf3)); |
assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf4)); |
assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf5)); |
+ assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf6)); |
+ assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf7)); |
+ assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf8)); |
}); |