<!DOCTYPE HTML>
<html>
<head>
<script src="../resources/js-test.js"></script>
</head>
<body>

<div id="container">
  <button id="aria-label" aria-label="Aria Label">Content</button>
  <button id="title" title="Title">Content</button>
  <button id="labelledby" aria-labelledby="label1">Content</button>
  <button id="labeled">Content</button>

  <label id="label1">Label1</label>
  <label id="label2">Label2</label>
</div>

<div id="console"></div>
<script>
description("This test ensures that a change to an element's accessible text, even if indirect, sends a notification.");
window.jsTestIsAsync = true;

if (window.testRunner && window.accessibilityController) {
    testRunner.dumpAsText();

    function accessibleElementById(id) {
        return accessibilityController.accessibleElementById(id);
    }

    window.successCount = 0;
    function gotSuccessfulNotification() {
        successCount++;
        if (successCount != 4)
            return;

        debug('All notifications received successfully.');
        accessibleElementById('aria-label').removeNotificationListener();
        accessibleElementById('title').removeNotificationListener();
        accessibleElementById('labelledby').removeNotificationListener();
        accessibleElementById('labeled').removeNotificationListener();

        document.getElementById('container').hidden = true;
        finishJSTest();
    }

    accessibleElementById('aria-label').addNotificationListener(function(notification) {
        debug('Got ' + notification + ' notification on aria-label');
        gotSuccessfulNotification();
    });
    document.getElementById('aria-label').setAttribute('aria-label', 'New aria-label');

    accessibleElementById('title').addNotificationListener(function(notification) {
        debug('Got ' + notification + ' notification on title');
        gotSuccessfulNotification();
    });
    document.getElementById('title').title = 'New title';

    accessibleElementById('labelledby').addNotificationListener(function(notification) {
        debug('Got ' + notification + ' notification on labelledby');
        gotSuccessfulNotification();
    });
    document.getElementById('labelledby').setAttribute('aria-labelledby', 'label2');

    accessibleElementById('labeled').addNotificationListener(function(notification) {
        debug('Got ' + notification + ' notification on labeled');
        gotSuccessfulNotification();
    });
    document.getElementById('label1').setAttribute('for', 'labeled');

    debug('');
}

</script>

</body>
</html>
