Chromium Code Reviews| 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)); |
| }); |