gecko-dev/accessible/tests/mochitest/jsat/test_content_integration.html
Eitan Isaacson 9ddc3e7c1a Bug 1570523 - Move browser/events.js to mochitest/promisified-events.js r=yzen
Also reworked test_recreation.html to test/demo how these ergonomics
would work.

Differential Revision: https://phabricator.services.mozilla.com/D40124

--HG--
rename : accessible/tests/browser/events.js => accessible/tests/mochitest/promisified-events.js
extra : moz-landing-system : lando
2019-08-02 20:40:25 +00:00

484 lines
20 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<title>Tests AccessFu content integration</title>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js">
</script>
<script src="chrome://mochikit/content/chrome-harness.js">
</script>
<script type="application/javascript" src="../common.js"></script>
<script type="application/javascript" src="../browser.js"></script>
<script type="application/javascript" src="../promisified-events.js"></script>
<script type="application/javascript" src="../role.js"></script>
<script type="application/javascript" src="../states.js"></script>
<script type="application/javascript" src="../layout.js"></script>
<script type="application/javascript" src="jsatcommon.js"></script>
<script type="application/javascript">
async function testSimpleNavigation(doc, runner) {
let evt;
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Traversal Rule test document", "Phone status bar"]);
runner.isFocused("html");
evt = await runner.movePrevious("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
is(evt.exitView, "movePrevious");
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Back", "button"]);
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["such app", "wow", "heading level 1"]);
runner.isFocused("iframe");
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventInfoMatches(evt, { checked: false });
runner.eventTextMatches(evt, ["many option", "check button", "First item", "list", "1 item"]);
evt = await runner.activateCurrent(0,
AndroidEvents.VIEW_CLICKED);
is(evt.checked, true, "checkbox is checked");
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["many option"]);
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["much range", "label"]);
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["much range", "5", "slider"]);
expectedMsg = runner.androidEvent("todo.value-changed");
runner.androidScrollBackward();
evt = await expectedMsg;
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Home", "button"]);
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["apple", "button"]);
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventInfoMatches(evt, { checked: false });
runner.eventTextMatches(evt, ["Light", "switch"]);
evt = await runner.activateCurrent(0,
AndroidEvents.VIEW_CLICKED);
is(evt.checked, true, "checkbox is checked");
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["slider", "0", "slider", "live"]);
evt = await runner.movePrevious("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventInfoMatches(evt, { checked: true });
runner.eventTextMatches(evt, ["Light", "switch"]);
evt = await runner.activateCurrent(0,
AndroidEvents.VIEW_CLICKED);
is(evt.checked, false, "checkbox is checked");
evt = await runner.movePrevious("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["apple", "button"]);
evt = await runner.movePrevious("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Home", "button"]);
evt = await runner.movePrevious("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["such app", "much range", "4", "slider"]);
expectedMsg = runner.androidEvent("todo.value-changed");
runner.androidScrollForward();
evt = await expectedMsg;
expectedMsg = runner.androidEvent("todo.value-changed");
runner.androidScrollBackward();
evt = await expectedMsg;
evt = await runner.movePrevious("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["much range", "label"]);
evt = await runner.movePrevious("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["many option", "label", "First item", "list", "1 item"]);
evt = await runner.movePrevious("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventInfoMatches(evt, { checked: true });
runner.eventTextMatches(evt, ["many option", "check button"]);
evt = await runner.activateCurrent(0,
AndroidEvents.VIEW_CLICKED);
is(evt.checked, false, "checkbox is checked");
evt = await runner.movePrevious("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["wow", "heading level 1"]);
evt = await runner.movePrevious("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Back", "button"]);
evt = await runner.movePrevious("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Phone status bar"]);
// Reached top
evt = await runner.movePrevious("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
is(evt.exitView, "movePrevious");
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Back", "button"]);
// Moving to the absolute last item from an embedded document
// fails. Bug 972035.
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["such app", "wow", "heading level 1"]);
// Move from an inner frame to the last element in the parent doc
evt = await runner.moveLast("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["much range", "4", "slider"]);
await runner.clearCursor();
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Traversal Rule test document", "Phone status bar"]);
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Back", "button"]);
evt = await runner.moveNext("FormElement",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventInfoMatches(evt, { checked: false });
runner.eventTextMatches(evt, ["such app", "many option", "check button", "First item", "list", "1 item"]);
evt = await runner.moveNext("FormElement",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["much range", "4", "slider"]);
evt = await runner.movePrevious("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["much range", "label"]);
evt = await runner.movePrevious("FormElement",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventInfoMatches(evt, { checked: false });
runner.eventTextMatches(evt, ["many option", "check button", "First item", "list", "1 item"]);
evt = await runner.movePrevious("FormElement",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Back", "button"]);
await runner.clearCursor();
// Moving to the absolute first item from an embedded document
// fails. Bug 972035.
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Traversal Rule test document", "Phone status bar"]);
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Back", "button"]);
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["such app", "wow", "heading level 1"]);
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventInfoMatches(evt, { checked: false });
runner.eventTextMatches(evt, ["many option", "check button", "First item", "list", "1 item"]);
evt = await runner.moveFirst("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
todo_is(evt.text[0], "Phone status bar");
await runner.clearCursor();
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Traversal Rule test document", "Phone status bar"]);
evt = await runner.focusSelector("button#fruit",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["apple", "button"]);
// Current virtual cursor's position's name changes
expectedMsg = runner.androidEvent("todo.name-changed");
doc.getElementById("fruit").setAttribute("aria-label", "banana");
evt = await expectedMsg;
// Name and value changes inside a live-region (no cursor present)
expectedMsg = runner.androidEvent("todo.name-changed");
doc.getElementById("slider").setAttribute("aria-label", "mover");
evt = await expectedMsg;
expectedMsg = runner.androidEvent("todo.value-changed");
doc.getElementById("slider").setAttribute("aria-valuenow", "5");
doc.getElementById("slider").setAttribute("aria-valuetext", "medium");
evt = await expectedMsg;
// Blur button and reset cursor
runner.blur();
await runner.clearCursor();
// Move cursor with focus in outside document
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Traversal Rule test document", "Phone status bar"]);
evt = await runner.focusSelector("button#home",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Home", "button"]);
// Blur button and reset cursor
runner.blur();
await runner.clearCursor();
// Set focus on element outside of embedded frame while cursor is in frame
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Traversal Rule test document", "Phone status bar"]);
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Back", "button"]);
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["such app", "wow", "heading level 1"]);
evt = await runner.focusSelector("button#home",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Home", "button"]);
// Blur button and reset cursor
runner.blur();
await runner.clearCursor();
// XXX: Set focus on iframe itself.
// XXX: Set focus on element in iframe when cursor is outside of it.
// XXX: Set focus on element in iframe when cursor is in iframe.
// aria-hidden element that the virtual cursor is positioned on
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Traversal Rule test document", "Phone status bar"]);
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Back", "button"]);
evt = await runner.expectAndroidEvents(() => {
doc.getElementById("back").setAttribute("aria-hidden", true);
}, AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["such app", "wow", "heading level 1"]);
// Changing aria-hidden attribute twice and making sure that the event
// is fired only once when the actual change happens.
doc.getElementById("back").setAttribute("aria-hidden", true);
let onShow = waitForEvent(EVENT_SHOW, doc.getElementById("back"));
doc.getElementById("back").setAttribute("aria-hidden", false);
await onShow;
evt = await runner.movePrevious("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Back", "button"]);
await runner.clearCursor();
// aria-hidden on the iframe that has the vc.
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Traversal Rule test document", "Phone status bar"]);
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Back", "button"]);
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["such app", "wow", "heading level 1"]);
evt = await runner.expectAndroidEvents(() => {
doc.getElementById("iframe").setAttribute("aria-hidden", true);
}, AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Traversal Rule test document", "Home", "button"]);
onShow = waitForEvent(EVENT_SHOW, doc.getElementById("iframe"));
doc.getElementById("iframe").setAttribute("aria-hidden", false);
await onShow;
await runner.clearCursor();
// aria-hidden element and auto Move
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Traversal Rule test document", "Phone status bar"]);
doc.getElementById("back").setAttribute("aria-hidden", true);
evt = await runner.focusSelector("button#back",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["such app", "wow", "heading level 1"]);
onShow = waitForEvent(EVENT_SHOW, doc.getElementById("back"));
doc.getElementById("back").setAttribute("aria-hidden", false);
await onShow;
runner.blur();
await runner.clearCursor();
// Open dialog in outer doc, while cursor is also in outer doc
evt = await runner.moveLast("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Traversal Rule test document", "mover", "medium", "slider", "live"]);
evt = await runner.expectAndroidEvents(() => {
doc.getElementById("alert").hidden = false;
}, AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["This is an alert!", "heading level 1", "dialog"]);
evt = await runner.expectAndroidEvents(() => {
doc.getElementById("alert").hidden = true;
}, AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Traversal Rule test document", "mover", "medium", "slider", "live"]);
await runner.clearCursor();
// Open dialog in outer doc, while cursor is in inner frame
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Traversal Rule test document", "Phone status bar"]);
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Back", "button"]);
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["such app", "wow", "heading level 1"]);
evt = await runner.expectAndroidEvents(() => {
doc.getElementById("alert").hidden = false;
}, AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["This is an alert!", "heading level 1", "dialog"]);
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Do you agree?"]);
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Yes", "button"]);
evt = await runner.activateCurrent(0,
AndroidEvents.VIEW_CLICKED,
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt[1], ["such app", "wow", "heading level 1"]);
await runner.clearCursor();
// Open dialog, then focus on something when closing
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Traversal Rule test document", "Phone status bar"]);
evt = await runner.expectAndroidEvents(() => {
doc.getElementById("alert").hidden = false;
}, AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["This is an alert!", "heading level 1", "dialog"]);
evt = await runner.expectAndroidEvents(() => {
doc.getElementById("alert").hidden = true;
doc.querySelector("button#home").focus();
}, AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["Traversal Rule test document", "Home", "button"]);
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["banana", "button"]);
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventInfoMatches(evt, { checked: false });
runner.eventTextMatches(evt, ["Light", "switch"]);
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
runner.eventTextMatches(evt, ["mover", "medium", "slider", "live"]);
evt = await runner.moveNext("Simple",
AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
is(evt.exitView, "moveNext", "Reached end of content");
}
function doTest() {
var doc = currentTabDocument();
var iframe = doc.createElement("iframe");
iframe.id = "iframe";
iframe.mozbrowser = true;
iframe.addEventListener("mozbrowserloadend", function() {
addA11yLoadEvent(async function() {
let runner = new AccessFuContentTestRunner();
await runner.start();
await testSimpleNavigation(doc, runner);
runner.finish();
closeBrowserWindow();
SimpleTest.finish();
}, doc.defaultView);
});
iframe.src = "data:text/html;charset=utf-8," + doc.defaultView.frameContents;
doc.getElementById("appframe").appendChild(iframe);
}
SimpleTest.waitForExplicitFinish();
addLoadEvent(
function() {
openBrowserWindow(
function() {
SpecialPowers.pushPrefEnv({
"set": [
// TODO: remove this as part of bug 820712
["network.disable.ipc.security", true],
["dom.ipc.browser_frames.oop_by_default", true],
["dom.mozBrowserFramesEnabled", true],
["browser.pagethumbnails.capturing_disabled", true],
],
}, doTest);
},
getRootDirectory(window.location.href) + "doc_content_integration.html");
});
</script>
</head>
<body id="body">
<a target="_blank"
title="Add tests for OOP message handling and general integration"
href="https://bugzilla.mozilla.org/show_bug.cgi?id=1459677">Mozilla Bug 1459677</a>
<p id="display"></p>
<div id="content" style="display: none"></div>
<pre id="test">
</pre>
</body>
</html>