| /** |
| * A helper class that listens for accessibility notifications on the |
| * |accessibilityController|, and signals that the test is complete |
| * after receiving all of the specified expected notifications. |
| */ |
| class TestAccessibilityControllerNotificationListener { |
| /** |
| * @param {Test} test A Test object from web tests testharness. |
| */ |
| constructor(test) { |
| this.test = test; |
| this.notification_queue_map = new Map(); |
| accessibilityController.addNotificationListener( |
| this.test.step_func(this.onNotificationReceived, this)); |
| } |
| |
| /** |
| * Enqueues an expected notification. |
| * Note that events are queued into buckets organized by notification. |
| * i.e. All "Focus" events are expected to fire in the order they are |
| * enqueued, but interleaved notification types have no expectation |
| * to be fired in a specific order. |
| * |
| * @param {string} notification The notification key. |
| * @param {string} expected_name Expected |element.name| when the notification is received. |
| * @param {string} expected_value_description Expected |element.valueDescription| when the notification is received. |
| * @param {string} optional_key_down_key When specified, fires a |keyDown| event after receiving the notification using the specified key. |
| */ |
| queueExpectedNotification(notification, expected_name, expected_value_description, optional_key_down_key) { |
| var queue = this.notification_queue_map.get(notification); |
| if (!queue) { |
| queue = new Array(); |
| this.notification_queue_map.set(notification, queue); |
| } |
| queue.push({name: expected_name, |
| value_description: expected_value_description, |
| key_down_key: optional_key_down_key}); |
| } |
| |
| /** |
| * Handles test expectations after receiving an accessibility notification. |
| * When all expected notifications are received, signals the test is done. |
| * |
| * @param {Element} element The element this notification is for. |
| * @param {string} notification The notification key. |
| */ |
| onNotificationReceived(element, notification) { |
| console.log(`Got ${notification} notification`); |
| var queue = this.notification_queue_map.get(notification); |
| if (!queue) |
| return; |
| |
| var next_expectation = queue.shift(); |
| if (queue.length === 0) { |
| this.notification_queue_map.delete(notification); |
| } |
| |
| assert_equals(element.name.trim(), next_expectation.name); |
| assert_equals(element.valueDescription.substr(20), |
| next_expectation.value_description); |
| if (next_expectation.key_down_key) { |
| eventSender.keyDown(next_expectation.key_down_key); |
| } |
| |
| if (this.notification_queue_map.size === 0) { |
| this.test.done(); |
| } |
| } |
| } |