gecko-dev/accessible/tests/browser/events.js
Yura Zenevich 94c96f680f Bug 1186029 - e10s compatible name caching, events and tree update tests. r=eeejay
MozReview-Commit-ID: 5Y5sYgGI2L9
---
 .eslintignore                                      |   1 -
 accessible/.eslintrc                               |  15 +
 accessible/jsat/OutputGenerator.jsm                |   7 +-
 accessible/moz.build                               |   2 +
 accessible/tests/browser/.eslintrc                 | 202 ++++++++++
 accessible/tests/browser/browser.ini               |  53 +++
 accessible/tests/browser/browser_caching_name.js   | 434 +++++++++++++++++++++
 .../tests/browser/browser_events_caretmove.js      |  21 +
 accessible/tests/browser/browser_events_hide.js    |  32 ++
 accessible/tests/browser/browser_events_show.js    |  17 +
 .../tests/browser/browser_events_statechange.js    |  60 +++
 .../tests/browser/browser_events_textchange.js     |  72 ++++
 .../tests/browser/browser_treeupdate_ariadialog.js |  42 ++
 .../tests/browser/browser_treeupdate_ariaowns.js   | 317 +++++++++++++++
 .../tests/browser/browser_treeupdate_canvas.js     |  25 ++
 .../browser/browser_treeupdate_cssoverflow.js      |  64 +++
 accessible/tests/browser/browser_treeupdate_doc.js | 303 ++++++++++++++
 .../tests/browser/browser_treeupdate_gencontent.js |  78 ++++
 .../tests/browser/browser_treeupdate_hidden.js     |  30 ++
 .../tests/browser/browser_treeupdate_imagemap.js   | 176 +++++++++
 .../tests/browser/browser_treeupdate_list.js       |  43 ++
 .../browser/browser_treeupdate_list_editabledoc.js |  39 ++
 .../tests/browser/browser_treeupdate_listener.js   |  43 ++
 .../tests/browser/browser_treeupdate_optgroup.js   |  91 +++++
 .../tests/browser/browser_treeupdate_removal.js    |  39 ++
 .../tests/browser/browser_treeupdate_table.js      |  51 +++
 .../tests/browser/browser_treeupdate_textleaf.js   |  34 ++
 .../tests/browser/browser_treeupdate_visibility.js | 196 ++++++++++
 .../tests/browser/browser_treeupdate_whitespace.js |  71 ++++
 .../tests/browser/doc_treeupdate_ariadialog.html   |  23 ++
 .../tests/browser/doc_treeupdate_ariaowns.html     |  44 +++
 .../tests/browser/doc_treeupdate_imagemap.html     |  21 +
 .../tests/browser/doc_treeupdate_removal.xhtml     |  11 +
 .../tests/browser/doc_treeupdate_visibility.html   |  78 ++++
 .../tests/browser/doc_treeupdate_whitespace.html   |  10 +
 accessible/tests/browser/events.js                 | 100 +++++
 accessible/tests/browser/head.js                   | 297 ++++++++++++++
 accessible/tests/mochitest/common.js               |  41 +-
 38 files changed, 3176 insertions(+), 7 deletions(-)
 create mode 100644 accessible/.eslintrc
 create mode 100644 accessible/tests/browser/.eslintrc
 create mode 100644 accessible/tests/browser/browser.ini
 create mode 100644 accessible/tests/browser/browser_caching_name.js
 create mode 100644 accessible/tests/browser/browser_events_caretmove.js
 create mode 100644 accessible/tests/browser/browser_events_hide.js
 create mode 100644 accessible/tests/browser/browser_events_show.js
 create mode 100644 accessible/tests/browser/browser_events_statechange.js
 create mode 100644 accessible/tests/browser/browser_events_textchange.js
 create mode 100644 accessible/tests/browser/browser_treeupdate_ariadialog.js
 create mode 100644 accessible/tests/browser/browser_treeupdate_ariaowns.js
 create mode 100644 accessible/tests/browser/browser_treeupdate_canvas.js
 create mode 100644 accessible/tests/browser/browser_treeupdate_cssoverflow.js
 create mode 100644 accessible/tests/browser/browser_treeupdate_doc.js
 create mode 100644 accessible/tests/browser/browser_treeupdate_gencontent.js
 create mode 100644 accessible/tests/browser/browser_treeupdate_hidden.js
 create mode 100644 accessible/tests/browser/browser_treeupdate_imagemap.js
 create mode 100644 accessible/tests/browser/browser_treeupdate_list.js
 create mode 100644 accessible/tests/browser/browser_treeupdate_list_editabledoc.js
 create mode 100644 accessible/tests/browser/browser_treeupdate_listener.js
 create mode 100644 accessible/tests/browser/browser_treeupdate_optgroup.js
 create mode 100644 accessible/tests/browser/browser_treeupdate_removal.js
 create mode 100644 accessible/tests/browser/browser_treeupdate_table.js
 create mode 100644 accessible/tests/browser/browser_treeupdate_textleaf.js
 create mode 100644 accessible/tests/browser/browser_treeupdate_visibility.js
 create mode 100644 accessible/tests/browser/browser_treeupdate_whitespace.js
 create mode 100644 accessible/tests/browser/doc_treeupdate_ariadialog.html
 create mode 100644 accessible/tests/browser/doc_treeupdate_ariaowns.html
 create mode 100644 accessible/tests/browser/doc_treeupdate_imagemap.html
 create mode 100644 accessible/tests/browser/doc_treeupdate_removal.xhtml
 create mode 100644 accessible/tests/browser/doc_treeupdate_visibility.html
 create mode 100644 accessible/tests/browser/doc_treeupdate_whitespace.html
 create mode 100644 accessible/tests/browser/events.js
 create mode 100644 accessible/tests/browser/head.js

--HG--
extra : rebase_source : c742ebc96467872847e0a82c6ff87b964fafb5b2
2016-05-02 11:09:28 -04:00

101 lines
3.9 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
/* global nsIAccessibleEvent, nsIAccessibleDocument,
nsIAccessibleStateChangeEvent, nsIAccessibleTextChangeEvent */
/* exported EVENT_REORDER, EVENT_SHOW, EVENT_TEXT_INSERTED, EVENT_TEXT_REMOVED,
EVENT_DOCUMENT_LOAD_COMPLETE, EVENT_HIDE, EVENT_TEXT_CARET_MOVED,
EVENT_STATE_CHANGE, waitForEvent, waitForMultipleEvents */
const EVENT_DOCUMENT_LOAD_COMPLETE = nsIAccessibleEvent.EVENT_DOCUMENT_LOAD_COMPLETE;
const EVENT_HIDE = nsIAccessibleEvent.EVENT_HIDE;
const EVENT_REORDER = nsIAccessibleEvent.EVENT_REORDER;
const EVENT_SHOW = nsIAccessibleEvent.EVENT_SHOW;
const EVENT_STATE_CHANGE = nsIAccessibleEvent.EVENT_STATE_CHANGE;
const EVENT_TEXT_CARET_MOVED = nsIAccessibleEvent.EVENT_TEXT_CARET_MOVED;
const EVENT_TEXT_INSERTED = nsIAccessibleEvent.EVENT_TEXT_INSERTED;
const EVENT_TEXT_REMOVED = nsIAccessibleEvent.EVENT_TEXT_REMOVED;
/**
* Describe an event in string format.
* @param {nsIAccessibleEvent} event event to strigify
*/
function eventToString(event) {
let type = eventTypeToString(event.eventType);
let info = `Event type: ${type}`;
if (event instanceof nsIAccessibleStateChangeEvent) {
let stateStr = statesToString(event.isExtraState ? 0 : event.state,
event.isExtraState ? event.state : 0);
info += `, state: ${stateStr}, is enabled: ${event.isEnabled}`;
} else if (event instanceof nsIAccessibleTextChangeEvent) {
let tcType = event.isInserted ? 'inserted' : 'removed';
info += `, start: ${event.start}, length: ${event.length}, ${tcType} text: ${event.modifiedText}`;
}
info += `. Target: ${prettyName(event.accessible)}`;
return info;
}
/**
* A helper function that waits for an accessible event of certain type that
* belongs to a certain DOMNode (defined by its id).
* @param {String} id expected content element id for the event
* @param {Number} eventType expected accessible event type
* @return {Promise} promise that resolves to an event
*/
function waitForEvent(eventType, id) {
return new Promise(resolve => {
let eventObserver = {
observe(subject, topic, data) {
if (topic !== 'accessible-event') {
return;
}
let event = subject.QueryInterface(nsIAccessibleEvent);
Logger.log(eventToString(event));
let domID = getAccessibleDOMNodeID(event.accessible);
// If event's accessible does not match expected event type or DOMNode
// id, skip thie event.
if (domID === id && event.eventType === eventType) {
Logger.log(`Correct event DOMNode id: ${id}`);
Logger.log(`Correct event type: ${eventTypeToString(eventType)}`);
ok(event.accessibleDocument instanceof nsIAccessibleDocument,
'Accessible document present.');
Services.obs.removeObserver(this, 'accessible-event');
resolve(event);
}
}
};
Services.obs.addObserver(eventObserver, 'accessible-event', false);
});
}
/**
* A helper function that waits for a sequence of accessible events in
* specified order.
* @param {Array} events a list of events to wait (same format as
* waitForEvent arguments)
*/
function waitForMultipleEvents(events) {
// Next expected event index.
let currentIdx = 0;
return Promise.all(events.map(({ eventType, id }, idx) =>
// In addition to waiting for an event, attach an order checker for the
// event.
waitForEvent(eventType, id).then(resolvedEvent => {
// Verify that event happens in order and increment expected index.
is(idx, currentIdx++,
`Unexpected event order: ${eventToString(resolvedEvent)}`);
return resolvedEvent;
})
));
}