Index: LayoutTests/fast/html/details-open-toggle-event.html |
diff --git a/LayoutTests/fast/html/details-open-toggle-event.html b/LayoutTests/fast/html/details-open-toggle-event.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f086cb8ae6bc8cd40201f0d29331ffd131d84a12 |
--- /dev/null |
+++ b/LayoutTests/fast/html/details-open-toggle-event.html |
@@ -0,0 +1,61 @@ |
+<!DOCTYPE html> |
+<html> |
+<head> |
+<link rel="help" href="http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#attr-details-open"> |
+<script src="../../resources/js-test.js"></script> |
+</head> |
+<body> |
+<details id="details"> |
+ <summary>details</summary> |
+ <input> |
+</details> |
+<script> |
+description("Tests that a 'toggle' event is fired asynchronously whenever the open attribute is added to or removed from a details element."); |
+window.jsTestIsAsync = true; |
+ |
+var toggleEventCount = 0; |
+var testEvent; |
+ |
+function handleToggleEvent(ev) { |
+ testEvent = ev; |
+ shouldBe("testEvent.__proto__", "Event.prototype"); |
+ shouldBeEqualToString("testEvent.type", "toggle"); |
+ ++toggleEventCount; |
+} |
+ |
+function checkSingleToggleEvent() { |
+ shouldBe("toggleEventCount", "1"); |
+ shouldBeTrue("details.open"); |
+ testEventsCoalesced(); |
+} |
+ |
+function testToogleEventFired() { |
+ shouldBe("toggleEventCount", "0"); |
+ details.open = true; |
+ shouldBe("toggleEventCount", "0"); |
+ setTimeout(checkSingleToggleEvent, 0); |
+} |
+ |
+function checkEventsCoalesced() { |
+ shouldBe("toggleEventCount", "2"); |
+ shouldBeFalse("details.open"); |
+ finishJSTest(); |
+} |
+ |
+function testEventsCoalesced() { |
+ // When the open attribute is toggled several times in succession, |
+ // these steps essentially get coalesced so that only one event is |
+ // fired. |
+ details.open = false; |
+ details.open = true; |
+ details.open = false; |
+ setTimeout(checkEventsCoalesced, 0); |
+} |
+ |
+var details = document.getElementById("details"); |
+details.addEventListener("toggle", handleToggleEvent); |
+shouldBeFalse("details.open"); |
+testToogleEventFired(); |
+</script> |
+</body> |
+</html> |