1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/accessible/tests/mochitest/events/test_aria_menu.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,282 @@ 1.4 +<html> 1.5 + 1.6 +<head> 1.7 + <title>ARIA menu events testing</title> 1.8 + 1.9 + <link rel="stylesheet" type="text/css" 1.10 + href="chrome://mochikit/content/tests/SimpleTest/test.css" /> 1.11 + 1.12 + <script type="application/javascript" 1.13 + src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> 1.14 + <script type="application/javascript" 1.15 + src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script> 1.16 + 1.17 + <script type="application/javascript" 1.18 + src="../common.js"></script> 1.19 + <script type="application/javascript" 1.20 + src="../role.js"></script> 1.21 + <script type="application/javascript" 1.22 + src="../states.js"></script> 1.23 + <script type="application/javascript" 1.24 + src="../events.js"></script> 1.25 + 1.26 + <script type="application/javascript"> 1.27 + const kViaDisplayStyle = 0; 1.28 + const kViaVisibilityStyle = 1; 1.29 + 1.30 + function focusMenu(aMenuBarID, aMenuID, aActiveMenuBarID) 1.31 + { 1.32 + this.eventSeq = []; 1.33 + 1.34 + if (aActiveMenuBarID) { 1.35 + this.eventSeq.push(new invokerChecker(EVENT_MENU_END, 1.36 + getNode(aActiveMenuBarID))); 1.37 + } 1.38 + 1.39 + this.eventSeq.push(new invokerChecker(EVENT_MENU_START, getNode(aMenuBarID))); 1.40 + this.eventSeq.push(new invokerChecker(EVENT_FOCUS, getNode(aMenuID))); 1.41 + 1.42 + this.invoke = function focusMenu_invoke() 1.43 + { 1.44 + getNode(aMenuID).focus(); 1.45 + } 1.46 + 1.47 + this.getID = function focusMenu_getID() 1.48 + { 1.49 + return "focus menu '" + aMenuID + "'"; 1.50 + } 1.51 + } 1.52 + 1.53 + function showMenu(aMenuID, aParentMenuID, aHow) 1.54 + { 1.55 + this.menuNode = getNode(aMenuID); 1.56 + 1.57 + this.eventSeq = [ 1.58 + new invokerChecker(EVENT_SHOW, this.menuNode), 1.59 + new invokerChecker(EVENT_MENUPOPUP_START, this.menuNode), 1.60 + new invokerChecker(EVENT_REORDER, getNode(aParentMenuID)) 1.61 + ]; 1.62 + 1.63 + this.invoke = function showMenu_invoke() 1.64 + { 1.65 + if (aHow == kViaDisplayStyle) 1.66 + this.menuNode.style.display = "block"; 1.67 + else 1.68 + this.menuNode.style.visibility = "visible"; 1.69 + }; 1.70 + 1.71 + this.getID = function showMenu_getID() 1.72 + { 1.73 + return "Show ARIA menu '" + aMenuID + "' by " + 1.74 + (aHow == kViaDisplayStyle ? "display" : "visibility") + 1.75 + " style tricks"; 1.76 + }; 1.77 + } 1.78 + 1.79 + function closeMenu(aMenuID, aParentMenuID, aHow) 1.80 + { 1.81 + this.menuNode = getNode(aMenuID); 1.82 + this.menu = null; 1.83 + 1.84 + this.eventSeq = [ 1.85 + new invokerChecker(EVENT_MENUPOPUP_END, getMenu, this), 1.86 + new invokerChecker(EVENT_HIDE, getMenu, this), 1.87 + new invokerChecker(EVENT_REORDER, getNode(aParentMenuID)) 1.88 + ]; 1.89 + 1.90 + this.invoke = function closeMenu_invoke() 1.91 + { 1.92 + // Store menu accessible reference while menu is still open. 1.93 + this.menu = getAccessible(this.menuNode); 1.94 + 1.95 + // Hide menu. 1.96 + if (aHow == kViaDisplayStyle) 1.97 + this.menuNode.style.display = "none"; 1.98 + else 1.99 + this.menuNode.style.visibility = "hidden"; 1.100 + } 1.101 + 1.102 + this.getID = function closeMenu_getID() 1.103 + { 1.104 + return "Close ARIA menu " + aMenuID + " by " + 1.105 + (aHow == kViaDisplayStyle ? "display" : "visibility") + 1.106 + " style tricks"; 1.107 + } 1.108 + 1.109 + function getMenu(aThisObj) 1.110 + { 1.111 + return aThisObj.menu; 1.112 + } 1.113 + } 1.114 + 1.115 + function focusInsideMenu(aMenuID, aMenuBarID) 1.116 + { 1.117 + this.eventSeq = [ 1.118 + new invokerChecker(EVENT_FOCUS, getNode(aMenuID)) 1.119 + ]; 1.120 + 1.121 + this.unexpectedEventSeq = [ 1.122 + new invokerChecker(EVENT_MENU_END, getNode(aMenuBarID)) 1.123 + ]; 1.124 + 1.125 + this.invoke = function focusInsideMenu_invoke() 1.126 + { 1.127 + getNode(aMenuID).focus(); 1.128 + } 1.129 + 1.130 + this.getID = function focusInsideMenu_getID() 1.131 + { 1.132 + return "focus menu '" + aMenuID + "'"; 1.133 + } 1.134 + } 1.135 + 1.136 + function blurMenu(aMenuBarID) 1.137 + { 1.138 + var eventSeq = [ 1.139 + new invokerChecker(EVENT_MENU_END, getNode(aMenuBarID)), 1.140 + new invokerChecker(EVENT_FOCUS, getNode("outsidemenu")) 1.141 + ]; 1.142 + 1.143 + this.__proto__ = new synthClick("outsidemenu", eventSeq); 1.144 + 1.145 + this.getID = function blurMenu_getID() 1.146 + { 1.147 + return "blur menu"; 1.148 + } 1.149 + } 1.150 + 1.151 + //////////////////////////////////////////////////////////////////////////// 1.152 + // Do tests 1.153 + 1.154 + var gQueue = null; 1.155 + 1.156 + //gA11yEventDumpToConsole = true; // debuging 1.157 + 1.158 + function doTests() 1.159 + { 1.160 + gQueue = new eventQueue(); 1.161 + 1.162 + gQueue.push(new focusMenu("menubar2", "menu-help")); 1.163 + gQueue.push(new focusMenu("menubar", "menu-file", "menubar2")); 1.164 + gQueue.push(new showMenu("menupopup-file", "menu-file", kViaDisplayStyle)); 1.165 + gQueue.push(new closeMenu("menupopup-file", "menu-file", kViaDisplayStyle)); 1.166 + gQueue.push(new showMenu("menupopup-edit", "menu-edit", kViaVisibilityStyle)); 1.167 + gQueue.push(new closeMenu("menupopup-edit", "menu-edit", kViaVisibilityStyle)); 1.168 + gQueue.push(new focusInsideMenu("menu-edit", "menubar")); 1.169 + gQueue.push(new blurMenu("menubar")); 1.170 + 1.171 + gQueue.push(new focusMenu("menubar3", "mb3-mi-outside")); 1.172 + gQueue.push(new showMenu("mb4-menu", document, kViaDisplayStyle)); 1.173 + gQueue.push(new focusMenu("menubar4", "mb4-item1")); 1.174 + gQueue.push(new focusMenu("menubar5", "mb5-mi")); 1.175 + 1.176 + gQueue.push(new synthFocus("mi6")); 1.177 + 1.178 + gQueue.invoke(); // Will call SimpleTest.finish(); 1.179 + } 1.180 + 1.181 + SimpleTest.waitForExplicitFinish(); 1.182 + addA11yLoadEvent(doTests); 1.183 + </script> 1.184 +</head> 1.185 + 1.186 +<body> 1.187 + 1.188 + <a target="_blank" 1.189 + href="https://bugzilla.mozilla.org/show_bug.cgi?id=606207" 1.190 + title="Dojo dropdown buttons are broken"> 1.191 + Bug 606207 1.192 + </a> 1.193 + <a target="_blank" 1.194 + href="https://bugzilla.mozilla.org/show_bug.cgi?id=614829" 1.195 + title="Menupopup end event isn't fired for ARIA menus"> 1.196 + Bug 614829 1.197 + </a> 1.198 + <a target="_blank" 1.199 + href="https://bugzilla.mozilla.org/show_bug.cgi?id=615189" 1.200 + title="Clean up FireAccessibleFocusEvent"> 1.201 + Bug 615189 1.202 + </a> 1.203 + <a target="_blank" 1.204 + href="https://bugzilla.mozilla.org/show_bug.cgi?id=673958" 1.205 + title="Rework accessible focus handling"> 1.206 + Bug 673958 1.207 + </a> 1.208 + <a target="_blank" 1.209 + href="https://bugzilla.mozilla.org/show_bug.cgi?id=933322" 1.210 + title="menustart/end events are missing when aria-owns makes a menu hierarchy"> 1.211 + Bug 933322 1.212 + </a> 1.213 + <a target="_blank" 1.214 + href="https://bugzilla.mozilla.org/show_bug.cgi?id=934460" 1.215 + title="menustart/end events may be missed when top level menuitem is focused"> 1.216 + Bug 934460 1.217 + </a> 1.218 + <a target="_blank" 1.219 + href="https://bugzilla.mozilla.org/show_bug.cgi?id=970005" 1.220 + title="infinite long loop in a11y:FocusManager::ProcessFocusEvent"> 1.221 + Bug 970005 1.222 + </a> 1.223 + 1.224 + <p id="display"></p> 1.225 + <div id="content" style="display: none"></div> 1.226 + <pre id="test"> 1.227 + </pre> 1.228 + 1.229 + <div id="menubar" role="menubar"> 1.230 + <div id="menu-file" role="menuitem" tabindex="0"> 1.231 + File 1.232 + <div id="menupopup-file" role="menu" style="display: none;"> 1.233 + <div id="menuitem-newtab" role="menuitem" tabindex="0">New Tab</div> 1.234 + <div id="menuitem-newwindow" role="menuitem" tabindex="0">New Window</div> 1.235 + </div> 1.236 + </div> 1.237 + <div id="menu-edit" role="menuitem" tabindex="0"> 1.238 + Edit 1.239 + <div id="menupopup-edit" role="menu" style="visibility: hidden;"> 1.240 + <div id="menuitem-undo" role="menuitem" tabindex="0">Undo</div> 1.241 + <div id="menuitem-redo" role="menuitem" tabindex="0">Redo</div> 1.242 + </div> 1.243 + </div> 1.244 + </div> 1.245 + <div id="menubar2" role="menubar"> 1.246 + <div id="menu-help" role="menuitem" tabindex="0"> 1.247 + Help 1.248 + <div id="menupopup-help" role="menu" style="display: none;"> 1.249 + <div id="menuitem-about" role="menuitem" tabindex="0">About</div> 1.250 + </div> 1.251 + </div> 1.252 + </div> 1.253 + <div tabindex="0" id="outsidemenu">outsidemenu</div> 1.254 + 1.255 + <!-- aria-owns relations --> 1.256 + <div id="menubar3" role="menubar" aria-owns="mb3-mi-outside"></div> 1.257 + <div id="mb3-mi-outside" role="menuitem" tabindex="0">Outside</div> 1.258 + 1.259 + <div id="menubar4" role="menubar"> 1.260 + <div role="menuitem" aria-haspopup="true" aria-owns="mb4-menu">Item</div> 1.261 + </div> 1.262 + <div id="mb4-menu" role="menu" style="display:none;"> 1.263 + <div role="menuitem" id="mb4-item1" tabindex="0">Item 1.1</div> 1.264 + <div role="menuitem" tabindex="0">Item 1.2</div> 1.265 + </div> 1.266 + 1.267 + <!-- focus top-level menu item having haspopup --> 1.268 + <div id="menubar5" role="menubar"> 1.269 + <div role="menuitem" aria-haspopup="true" id="mb5-mi" tabindex="0"> 1.270 + Item 1.271 + <div role="menu" style="display:none;"> 1.272 + <div role="menuitem" tabindex="0">Item 1.1</div> 1.273 + <div role="menuitem" tabindex="0">Item 1.2</div> 1.274 + </div> 1.275 + </div> 1.276 + </div> 1.277 + 1.278 + <!-- other aria-owns relations --> 1.279 + <div id="mi6" tabindex="0" role="menuitem">aria-owned item</div> 1.280 + <div aria-owns="mi6">Obla</div> 1.281 + 1.282 + <div id="eventdump"></div> 1.283 + 1.284 +</body> 1.285 +</html>