accessible/tests/mochitest/attributes/test_obj.html
author David Bolter <dbolter@mozilla.com>
Sun, 12 Jun 2011 23:54:36 -0700
changeset 70954 4436b2bc5f648cec9f2d11c84a00ccc4e31f7373
parent 61469 d55f25baadb30b3d1ca14a169462210374252e36
child 74312 67f6f1908b0f4cb8c00d3de763787fdb8fe8eeeb
permissions -rw-r--r--
Bug 663136 - Add test coverage for tablist as implicit live region. r=MarcoZ

<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=475006
https://bugzilla.mozilla.org/show_bug.cgi?id=391829
https://bugzilla.mozilla.org/show_bug.cgi?id=581952
https://bugzilla.mozilla.org/show_bug.cgi?id=558036
-->
<head>
  <title>Group attributes tests</title>
  <link rel="stylesheet" type="text/css"
        href="chrome://mochikit/content/tests/SimpleTest/test.css" />

  <script type="application/javascript"
          src="chrome://mochikit/content/MochiKit/packed.js"></script>
  <script type="application/javascript"
          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>

  <script type="application/javascript"
          src="../common.js"></script>
  <script type="application/javascript"
          src="../attributes.js"></script>

  <script type="application/javascript">
    function doTest()
    {
      // aria
      testAttrs("atomic", {"atomic" : "true"}, true);
      testAttrs("autocomplete", {"autocomplete" : "true"}, true);
      testAttrs("checkbox", {"checkable" : "true"}, true); 
      testAttrs("checkedCheckbox", {"checkable" : "true"}, true); 
      testAttrs("checkedMenuitem", {"checkable" : "true"}, true); 
      testAttrs("checkedOption", {"checkable" : "true"}, true); 
      testAttrs("checkedRadio", {"checkable" : "true"}, true); 
      testAttrs("checkedTreeitem", {"checkable" : "true"}, true); 
      testAttrs("dropeffect", {"dropeffect" : "copy"}, true);
      testAttrs("grabbed", {"grabbed" : "true"}, true);
      testAttrs("hidden", {"hidden" : "true"}, true);
      testAttrs("sortAscending", {"sort" : "ascending"}, true);
      testAttrs("sortDescending", {"sort" : "descending"}, true);
      testAttrs("sortNone", {"sort" : "none"}, true);
      testAttrs("sortOther", {"sort" : "other"}, true);

      // live object attribute
      
      // HTML
      testAttrs("output", {"live" : "polite"}, true);

      // ARIA
      testAttrs("live", {"live" : "polite"}, true);
      testAttrs("live2", {"live" : "polite"}, true);
      testAbsentAttrs("live3", {"live" : ""});
      testAttrs("log", {"live" : "polite"}, true);
      testAttrs("logAssertive", {"live" : "assertive"}, true);
      testAttrs("marquee", {"live" : "off"}, true);
      testAttrs("status", {"live" : "polite"}, true);
      testAttrs("tablist", {"live" : "polite"}, true);
      testAttrs("timer", {"live" : "off"}, true);

      // container-live object attribute
      testAttrs("liveChild", {"container-live" : "polite"}, true);
      testAttrs("live2Child", {"container-live" : "polite"}, true);
      testAttrs("logChild", {"container-live" : "polite"}, true);
      testAttrs("logAssertiveChild", {"container-live" : "assertive"}, true);
      testAttrs("marqueeChild", {"container-live" : "off"}, true);
      testAttrs("statusChild", {"container-live" : "polite"}, true);
      testAttrs("tablistChild", {"container-live" : "polite"}, true);
      testAttrs("timerChild", {"container-live" : "off"}, true);

      // container-live-role object attribute
      testAttrs("log", {"container-live-role" : "log"}, true);
      testAttrs("logAssertive", {"container-live-role" : "log"}, true);
      testAttrs("marquee", {"container-live-role" : "marquee"}, true);
      testAttrs("status", {"container-live-role" : "status"}, true);
      testAttrs("timer", {"container-live-role" : "timer"}, true);
      testAttrs("logChild", {"container-live-role" : "log"}, true);
      testAttrs("logAssertive", {"container-live-role" : "log"}, true);
      testAttrs("logAssertiveChild", {"container-live-role" : "log"}, true);
      testAttrs("marqueeChild", {"container-live-role" : "marquee"}, true);
      testAttrs("statusChild", {"container-live-role" : "status"}, true);
      testAttrs("tablistChild", {"container-live-role" : "tablist"}, true);
      testAttrs("timerChild", {"container-live-role" : "timer"}, true);

      // absent aria-label and aria-labelledby object attribute
      testAbsentAttrs("label", {"label" : "foo"});
      testAbsentAttrs("labelledby", {"labelledby" : "label"});

      // container that has no default live attribute
      testAttrs("liveGroup", {"live" : "polite"}, true);
      testAttrs("liveGroupChild", {"container-live" : "polite"}, true);
      testAttrs("liveGroup", {"container-live-role" : "group"}, true);
      testAttrs("liveGroupChild", {"container-live-role" : "group"}, true);

      // html
      testAttrs("radio", {"checkable" : "true"}, true); 
      testAttrs("checkbox", {"checkable" : "true"}, true); 
      testAttrs("draggable", {"draggable" : "true"}, true); 

      SimpleTest.finish();
    }

    SimpleTest.waitForExplicitFinish();
    addA11yLoadEvent(doTest);
  </script>
</head>
<body>
  <a target="_blank"
     href="https://bugzilla.mozilla.org/show_bug.cgi?id=475006"
     title="Extend nsARIAMap to capture ARIA attribute characteristics">
    Mozilla Bug 475006
  </a>
  <a target="_blank"
     href="https://bugzilla.mozilla.org/show_bug.cgi?id=391829"
     title="Add support for container-live-role to object attributes">
    Mozilla Bug 391829
  </a>
  <a target="_blank"
     href="https://bugzilla.mozilla.org/show_bug.cgi?id=581952"
     title="Make explicit that aria-label is not an object attribute">
    Mozilla Bug 475006
  </a>
  <a target="_blank"
     href="https://bugzilla.mozilla.org/show_bug.cgi?id=558036"
     title="make HTML <output> accessible">
    Mozilla Bug 558036
  </a>
  <a target="_blank"
     href="https://bugzilla.mozilla.org/show_bug.cgi?id=663136"
     title="Add test coverage for tablist as implicit live region">
    Mozilla Bug 663136
  </a>
  <p id="display"></p>
  <div id="content" style="display: none"></div>
  <pre id="test">
  </pre>

  <!-- aria -->
  <div id="atomic" aria-atomic="true"></div>
  <div id="autocomplete" role="textbox" aria-autocomplete="true"></div>
  <div id="checkbox" role="checkbox"></div>
  <div id="checkedCheckbox" role="checkbox" aria-checked="true"></div>
  <div id="checkedMenuitem" role="menuitem" aria-checked="true"></div>
  <div id="checkedOption" role="option" aria-checked="true"></div>
  <div id="checkedRadio" role="radio" aria-checked="true"></div>
  <div id="checkedTreeitem" role="treeitem" aria-checked="true"></div>
  <div id="dropeffect" aria-dropeffect="copy"></div>
  <div id="grabbed" aria-grabbed="true"></div>
  <div id="hidden" aria-hidden="true"></div>
  <div id="sortAscending" role="columnheader" aria-sort="ascending"></div>
  <div id="sortDescending" role="columnheader" aria-sort="descending"></div>
  <div id="sortNone" role="columnheader" aria-sort="none"></div>
  <div id="sortOther" role="columnheader" aria-sort="other"></div>

  <!-- html -->
  <output id="output"></output>

  <!-- back to aria -->
  <div id="live" aria-live="polite">excuse <div id="liveChild">me</div></div>
  <div id="live2" role="marquee" aria-live="polite">excuse <div id="live2Child">me</div></div>
  <div id="live3" role="region">excuse</div>
  <div id="log" role="log">excuse <div id="logChild">me</div></div>
  <div id="logAssertive" role="log" aria-live="assertive">excuse <div id="logAssertiveChild">me</div></div>
  <div id="marquee" role="marquee">excuse <div id="marqueeChild">me</div></div>
  <div id="status" role="status">excuse <div id="statusChild">me</div></div>
  <div id="tablist" role="tablist">tablist <div id="tablistChild">tab</div></div>
  <div id="timer" role="timer">excuse <div id="timerChild">me</div></div>

  <!-- aria-label[ledby] should not be an object attribute -->
  <div id="label" role="checkbox" aria-label="foo"></div>
  <div id="labelledby" role="checkbox" aria-labelledby="label"></div>

  <!-- unusual live case -->
  <div id="liveGroup" role="group" aria-live="polite">
    excuse <div id="liveGroupChild">me</div>
  </div>

  <!-- html -->
  <input id="radio" type="radio"/>
  <input id="checkbox" type="checkbox"/>
  <div id="draggable" draggable="true">Draggable div</div>
</body>
</html>