// This tests that elements that are not live regions do not have the live region attrs.
no live region

// These test that they have the correct default values for aria-live.
test
test
test
test
test
// These test that elements with live regions on have the right attributes
h3

This tests that the attributes used for ARIA live regions behave correctly.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


PASS accessibilityController.focusedElement.isAttributeSupported('AXElementBusy') is true
PASS accessibilityController.focusedElement.isAttributeSupported('AXARIARelevant') is false
PASS accessibilityController.focusedElement.isAttributeSupported('AXARIAAtomic') is false
PASS accessibilityController.focusedElement.isAttributeSupported('AXARIALive') is false
PASS accessibilityController.focusedElement.stringAttributeValue('AXARIALive') is 'assertive'
PASS accessibilityController.focusedElement.stringAttributeValue('AXARIALive') is 'assertive'
PASS accessibilityController.focusedElement.stringAttributeValue('AXARIALive') is 'polite'
PASS accessibilityController.focusedElement.stringAttributeValue('AXARIALive') is 'polite'
PASS accessibilityController.focusedElement.stringAttributeValue('AXARIALive') is 'off'
PASS accessibilityController.focusedElement.stringAttributeValue('AXARIALive') is 'polite'
PASS accessibilityController.focusedElement.stringAttributeValue('AXARIARelevant') is 'additions'
PASS accessibilityController.focusedElement.boolAttributeValue('AXElementBusy') is true
PASS accessibilityController.focusedElement.isAttributeSupported('AXARIALive') is false
PASS accessibilityController.focusedElement.isAttributeSupported('AXARIARelevant') is false
PASS accessibilityController.focusedElement.boolAttributeValue('AXARIAAtomic') is true
PASS accessibilityController.focusedElement.boolAttributeValue('AXElementBusy') is false
PASS accessibilityController.focusedElement.stringAttributeValue('AXARIARelevant') is 'additions text'
PASS accessibilityController.focusedElement.stringAttributeValue('AXARIALive') is 'assertive'
PASS accessibilityController.focusedElement.boolAttributeValue('AXARIAAtomic') is true
PASS accessibilityController.focusedElement.stringAttributeValue('AXARIALive') is 'polite'
PASS accessibilityController.focusedElement.boolAttributeValue('AXARIAAtomic') is true
PASS accessibilityController.focusedElement.stringAttributeValue('AXARIALive') is 'polite'
PASS accessibilityController.focusedElement.boolAttributeValue('AXARIAAtomic') is false
PASS accessibilityController.focusedElement.isAttributeSupported('AXARIALive') is false
PASS accessibilityController.focusedElement.boolAttributeValue('AXARIAAtomic') is false
PASS accessibilityController.focusedElement.isAttributeSupported('AXARIALive') is false
PASS accessibilityController.focusedElement.boolAttributeValue('AXARIAAtomic') is false
PASS successfullyParsed is true

TEST COMPLETE

