| <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| <html> |
| <head> |
| <script src="../../resources/js-test.js"></script> |
| <script src="../../resources/accessibility-helper.js"></script> |
| </head> |
| <body id="body"> |
| |
| <div id="content"> |
| <details open id="details1"> |
| <summary id="summary1">Some open info</summary> |
| <p>Details about the open topic.</p> |
| </details> |
| |
| <details id="details2"> |
| <summary>Some open info</summary> |
| <p>Details about the open topic.</p> |
| </details> |
| |
| <details open id="details3" role="group"> |
| <summary>Some open info</summary> |
| <p>Details about the open topic.</p> |
| </details> |
| </div> |
| |
| <script> |
| var output = "This tests some basic attributes about the details element.\n"; |
| |
| if (window.accessibilityController) { |
| window.jsTestIsAsync = true; |
| |
| var body = accessibilityController.rootElement.childAtIndex(0); |
| body.addNotificationListener(function(notification) { |
| if (notification == "AXExpandedChanged") |
| output += `Received ${notification} notification\n`; |
| }); |
| |
| var details1 = accessibilityController.accessibleElementById("details1"); |
| var summary1 = accessibilityController.accessibleElementById("summary1"); |
| output += expect("details1.role", "'AXRole: AXGroup'"); |
| output += expect("details1.subrole", "'AXSubrole: AXDetails'"); |
| output += expect("details1.isExpanded", "true"); |
| output += expect("summary1.role", "'AXRole: AXButton'"); |
| output += expect("summary1.subrole", "'AXSubrole: AXSummary'"); |
| output += expect("summary1.title", "'AXTitle: Some open info'"); |
| output += expect("details1.isAttributeSettable('AXExpanded')", "true"); |
| |
| // Toggle the expanded state. |
| details1.setBoolAttributeValue("AXExpanded", false); |
| |
| // After toggling the expanded state on a <details> element, the underlying HTMLDetailsElement goes away and it is replaced by a new object. |
| // Thus, we need to retrieve the corresponding accessible object again since the current one becomes defunct. |
| // See HTMLDetailsElement::toggleOpen(). |
| setTimeout(async function() { |
| await waitFor(() => { |
| details1 = accessibilityController.accessibleElementById("details1"); |
| return details1 && !details1.isExpanded; |
| }); |
| summary1 = accessibilityController.accessibleElementById("summary1"); |
| output += expect("details1.isExpanded", "false"); |
| output += expect("summary1.isExpanded", "false"); |
| |
| // Give it the same value to make sure we don't expand. |
| details1.setBoolAttributeValue("AXExpanded", false); |
| await waitFor(() => { |
| details1 = accessibilityController.accessibleElementById("details1"); |
| return details1 && !details1.isExpanded; |
| }); |
| summary1 = accessibilityController.accessibleElementById("summary1"); |
| output += expect("details1.isExpanded", "false"); |
| output += expect("summary1.isExpanded", "false"); |
| |
| // Set to expand again. |
| details1.setBoolAttributeValue("AXExpanded", true); |
| await waitFor(() => { |
| details1 = accessibilityController.accessibleElementById("details1"); |
| return details1 && details1.isExpanded; |
| }); |
| summary1 = accessibilityController.accessibleElementById("summary1"); |
| output += expect("details1.isExpanded", "true"); |
| output += expect("summary1.isExpanded", "true"); |
| |
| // And duplicate the true state to make sure it doesn't toggle off. |
| details1.setBoolAttributeValue("AXExpanded", true); |
| await waitFor(() => { |
| details1 = accessibilityController.accessibleElementById("details1"); |
| return details1 && details1.isExpanded; |
| }); |
| summary1 = accessibilityController.accessibleElementById("summary1"); |
| output += expect("details1.isExpanded", "true"); |
| output += expect("summary1.isExpanded", "true"); |
| |
| details2 = accessibilityController.accessibleElementById("details2"); |
| output += expect("details2.subrole", "'AXSubrole: AXDetails'"); |
| output += expect("details2.isExpanded", "false"); |
| |
| // Expanded status should be correct when detail has group role |
| details3 = accessibilityController.accessibleElementById("details3"); |
| output += expect("details3.subrole", "'AXSubrole: AXApplicationGroup'"); |
| output += expect("details3.isExpanded", "true"); |
| |
| debug(output); |
| document.getElementById("content").style.visibility = "hidden"; |
| finishJSTest(); |
| }, 0); |
| } |
| </script> |
| </body> |
| </html> |