<!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" ontoggle="handleToggleEventFromHTMLAttribute(event)">
    <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 toggleEventCountFromHTMLAttribute = 0;
var testEvent;

function handleToggleEventFromHTMLAttribute(ev) {
    testEvent = ev;
    shouldBe("testEvent.__proto__", "Event.prototype");
    shouldBeEqualToString("testEvent.type", "toggle");
    ++toggleEventCountFromHTMLAttribute;
}

function handleToggleEvent(ev) {
    testEvent = ev;
    shouldBe("testEvent.__proto__", "Event.prototype");
    shouldBeEqualToString("testEvent.type", "toggle");
    ++toggleEventCount;
}

function checkSingleToggleEvent() {
    shouldBe("toggleEventCount", "1");
    shouldBe("toggleEventCountFromHTMLAttribute", "1");
    shouldBeTrue("details.open");
    testEventsCoalesced();
}

function testToogleEventFired() {
    shouldBe("toggleEventCount", "0");
    shouldBe("toggleEventCountFromHTMLAttribute", "0");
    details.open = true;
    shouldBe("toggleEventCount", "0");
    shouldBe("toggleEventCountFromHTMLAttribute", "0");
    setTimeout(checkSingleToggleEvent, 0);
}

function checkEventsCoalesced() {
    shouldBe("toggleEventCount", "2");
    shouldBe("toggleEventCountFromHTMLAttribute", "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");
shouldBe("details.ontoggle.__proto__", "Function.prototype");
details.addEventListener("toggle", handleToggleEvent);
shouldBeFalse("details.open");
testToogleEventFired();
</script>
</body>
</html>
