summaryrefslogtreecommitdiffstats
path: root/accessible/tests/browser/windows/uia/head.js
diff options
context:
space:
mode:
Diffstat (limited to 'accessible/tests/browser/windows/uia/head.js')
-rw-r--r--accessible/tests/browser/windows/uia/head.js75
1 files changed, 74 insertions, 1 deletions
diff --git a/accessible/tests/browser/windows/uia/head.js b/accessible/tests/browser/windows/uia/head.js
index e659354c7c..5b453ce6fe 100644
--- a/accessible/tests/browser/windows/uia/head.js
+++ b/accessible/tests/browser/windows/uia/head.js
@@ -4,7 +4,7 @@
"use strict";
-/* exported gIsUiaEnabled, addUiaTask */
+/* exported gIsUiaEnabled, addUiaTask, definePyVar, assignPyVarToUiaWithId, setUpWaitForUiaEvent, setUpWaitForUiaPropEvent, waitForUiaEvent, testPatternAbsent, testPythonRaises */
// Load the shared-head file first.
Services.scriptloader.loadSubScript(
@@ -53,3 +53,76 @@ function addUiaTask(doc, task, options = {}) {
addTask(false);
}
}
+
+/**
+ * Define a global Python variable and assign it to a given Python expression.
+ */
+function definePyVar(varName, expression) {
+ return runPython(`
+ global ${varName}
+ ${varName} = ${expression}
+ `);
+}
+
+/**
+ * Get the UIA element with the given id and assign it to a global Python
+ * variable using the id as the variable name.
+ */
+function assignPyVarToUiaWithId(id) {
+ return definePyVar(id, `findUiaByDomId(doc, "${id}")`);
+}
+
+/**
+ * Set up to wait for a UIA event. You must await this before performing the
+ * action which fires the event.
+ */
+function setUpWaitForUiaEvent(eventName, id) {
+ return definePyVar(
+ "onEvent",
+ `WaitForUiaEvent(eventId=UIA_${eventName}EventId, match="${id}")`
+ );
+}
+
+/**
+ * Set up to wait for a UIA property change event. You must await this before
+ * performing the action which fires the event.
+ */
+function setUpWaitForUiaPropEvent(propName, id) {
+ return definePyVar(
+ "onEvent",
+ `WaitForUiaEvent(property=UIA_${propName}PropertyId, match="${id}")`
+ );
+}
+
+/**
+ * Wait for the event requested in setUpWaitForUia*Event.
+ */
+function waitForUiaEvent() {
+ return runPython(`
+ onEvent.wait()
+ `);
+}
+
+/**
+ * Verify that a UIA element does *not* support the given control pattern.
+ */
+async function testPatternAbsent(id, patternName) {
+ const hasPattern = await runPython(`
+ el = findUiaByDomId(doc, "${id}")
+ return bool(getUiaPattern(el, "${patternName}"))
+ `);
+ ok(!hasPattern, `${id} doesn't have ${patternName} pattern`);
+}
+
+/**
+ * Verify that a Python expression raises an exception.
+ */
+async function testPythonRaises(expression, message) {
+ let failed = false;
+ try {
+ await runPython(expression);
+ } catch {
+ failed = true;
+ }
+ ok(failed, message);
+}