Commit 4e615223 authored by Josiah K's avatar Josiah K Committed by Commit Bot

Fix flaky fullscreen magnifier tests

Utilize getNextMagnifierBounds for better end-to-end testing approach.

Fixed: 1139939
Change-Id: I65665dcb655f0bf948a36f28c4e5ba396010fbf7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2533678Reviewed-by: default avatarDavid Tseng <dtseng@chromium.org>
Commit-Queue: Josiah Krutz <josiahk@google.com>
Cr-Commit-Position: refs/heads/master@{#827128}
parent d48ffa42
...@@ -12,19 +12,18 @@ GEN_INCLUDE(['../../common/rect_util.js']); ...@@ -12,19 +12,18 @@ GEN_INCLUDE(['../../common/rect_util.js']);
MagnifierE2ETest = class extends E2ETestBase { MagnifierE2ETest = class extends E2ETestBase {
constructor() { constructor() {
super(); super();
this.mockAccessibilityPrivate = MockAccessibilityPrivate;
chrome.accessibilityPrivate = this.mockAccessibilityPrivate;
window.RoleType = chrome.automation.RoleType; window.RoleType = chrome.automation.RoleType;
window.getNextMagnifierLocation = this.getNextMagnifierLocation;
// Re-initialize AccessibilityCommon with mock AccessibilityPrivate API.
window.accessibilityCommon = new AccessibilityCommon();
} }
async getNextMagnifierLocation() { async getNextMagnifierBounds() {
return new Promise(resolve => { return new Promise(resolve => {
chrome.accessibilityPrivate.registerMoveMagnifierToRectCallback(resolve); const listener = (magnifierBounds) => {
chrome.accessibilityPrivate.onMagnifierBoundsChanged.removeListener(
listener);
resolve(magnifierBounds);
};
chrome.accessibilityPrivate.onMagnifierBoundsChanged.addListener(
listener);
}); });
} }
...@@ -51,29 +50,32 @@ MagnifierE2ETest = class extends E2ETestBase { ...@@ -51,29 +50,32 @@ MagnifierE2ETest = class extends E2ETestBase {
} }
}; };
// Disabled - flaky: https://crbug.com/1139939 TEST_F('MagnifierE2ETest', 'MovesScreenMagnifierToFocusedElement', function() {
TEST_F( const site = `
'MagnifierE2ETest', 'DISABLED_MovesScreenMagnifierToFocusedElement', <button id="apple">Apple</button><br />
function() { <button id="banana" style="margin-top: 400px">Banana</button>
const site = `
<button id="apple">Apple</button>
<button id="banana">Banana</button>
`; `;
this.runWithLoadedTree(site, async function(root) { this.runWithLoadedTree(site, async function(root) {
// Validate magnifier wants to move to root. const apple = root.find({attributes: {name: 'Apple'}});
const rootLocation = await getNextMagnifierLocation(); const banana = root.find({attributes: {name: 'Banana'}});
assertTrue(RectUtil.equal(rootLocation, root.location));
// Focus banana node. // Focus and move magnifier to apple.
const banana = apple.focus();
root.find({role: RoleType.BUTTON, attributes: {name: 'Banana'}});
banana.focus();
// Validate magnifier wants to move to banana. // Verify magnifier bounds contains apple, but not banana.
const bananaLocation = await getNextMagnifierLocation(); let bounds = await this.getNextMagnifierBounds();
assertTrue(RectUtil.equal(bananaLocation, banana.location)); assertTrue(RectUtil.contains(bounds, apple.location));
}); assertFalse(RectUtil.contains(bounds, banana.location));
});
// Focus and move magnifier to banana.
banana.focus();
// Verify magnifier bounds contains banana, but not apple.
bounds = await this.getNextMagnifierBounds();
assertFalse(RectUtil.contains(bounds, apple.location));
assertTrue(RectUtil.contains(bounds, banana.location));
});
});
// Disabled - flaky: https://crbug.com/1145612 // Disabled - flaky: https://crbug.com/1145612
TEST_F( TEST_F(
...@@ -116,33 +118,39 @@ TEST_F( ...@@ -116,33 +118,39 @@ TEST_F(
}); });
// Disabled - flaky: https://crbug.com/1139939
TEST_F( TEST_F(
'MagnifierE2ETest', 'DISABLED_MovesScreenMagnifierToActiveDescendant', 'MagnifierE2ETest', 'MovesScreenMagnifierToActiveDescendant', function() {
function() {
const site = ` const site = `
<div role="group" id="parent" aria-activedescendant="apple"> <span tabindex="1">Top</span>
<div id="group" role="group" style="width: 200px"
aria-activedescendant="apple">
<div id="apple" role="treeitem">Apple</div> <div id="apple" role="treeitem">Apple</div>
<div id="banana" role="treeitem">Banana</div> <div id="banana" role="treeitem" style="margin-top: 400px">Banana</div>
</div> </div>
<script> <script>
const parent = document.getElementById('parent'); const group = document.getElementById('group');
parent.addEventListener('click', function() { group.addEventListener('click', function() {
parent.setAttribute('aria-activedescendant', 'banana'); group.setAttribute('aria-activedescendant', 'banana');
}); });
</script> </script>
`; `;
this.runWithLoadedTree(site, async function(root) { this.runWithLoadedTree(site, async function(root) {
// Click parent to change active descendant from apple to banana. const top = root.find({attributes: {name: 'Top'}});
const parent = root.find({role: RoleType.GROUP}); const banana = root.find({attributes: {name: 'Banana'}});
parent.doDefault(); const group = root.find({role: RoleType.GROUP});
// Register and wait for rect from magnifier. // Focus and move magnifier to top.
const rect = await getNextMagnifierLocation(); top.focus();
// Validate rect from magnifier is rect of banana. // Verify magnifier bounds don't contain banana.
const bananaNode = let bounds = await this.getNextMagnifierBounds();
root.find({role: RoleType.TREE_ITEM, attributes: {name: 'Banana'}}); assertFalse(RectUtil.contains(bounds, banana.location));
assertTrue(RectUtil.equal(rect, bananaNode.location));
// Click group to change active descendant to banana.
group.doDefault();
// Verify magnifier bounds contain banana.
bounds = await this.getNextMagnifierBounds();
assertTrue(RectUtil.contains(bounds, banana.location));
}); });
}); });
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment