blob: 08d49c9bb9aa3f024de7b570ca4bed2f7440fed5 [file] [log] [blame]
<!DOCTYPE html>
<meta charset=utf-8>
<title>The details element</title>
<link rel="author" title="Denis Ah-Kang" href="mailto:denis@w3.org">
<link rel=help href="https://html.spec.whatwg.org/multipage/#the-details-element">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<details id=details1>
<summary>Lorem ipsum</summary>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
</details>
<details id=details2 open>
<summary>Lorem ipsum</summary>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
</details>
<details id=details3 style="display:none;">
<summary>Lorem ipsum</summary>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
</details>
<details id=details4>
</details>
<details id=details6>
<summary>Lorem ipsum</summary>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
</details>
<script>
var t1 = async_test("Adding open to 'details' should fire a toggle event at the 'details' element"),
t2 = async_test("Removing open from 'details' should fire a toggle event at the 'details' element"),
t3 = async_test("Adding open to 'details' (display:none) should fire a toggle event at the 'details' element"),
t4 = async_test("Adding open from 'details' (no children) should fire a toggle event at the 'details' element"),
t6 = async_test("Calling open twice on 'details' fires only one toggle event"),
details1 = document.getElementById('details1'),
details2 = document.getElementById('details2'),
details3 = document.getElementById('details3'),
details4 = document.getElementById('details4'),
details6 = document.getElementById('details6'),
loop=false;
function testEvent(evt) {
assert_true(evt.isTrusted, "event is trusted");
assert_false(evt.bubbles, "event doesn't bubble");
assert_false(evt.cancelable, "event is not cancelable");
assert_equals(Object.getPrototypeOf(evt), Event.prototype, "Prototype of toggle event is Event.prototype");
}
details1.ontoggle = t1.step_func_done(function(evt) {
assert_true(details1.open);
testEvent(evt)
});
details1.open = true; // opens details1
details2.ontoggle = t2.step_func_done(function(evt) {
assert_false(details2.open);
testEvent(evt);
});
details2.open = false; // closes details2
details3.ontoggle = t3.step_func_done(function(evt) {
assert_true(details3.open);
testEvent(evt);
});
details3.open = true; // opens details3
details4.ontoggle = t4.step_func_done(function(evt) {
assert_true(details4.open);
testEvent(evt);
});
details4.open = true; // opens details4
async_test(function(t) {
var details5 = document.createElement("details");
details5.ontoggle = t.step_func_done(function(evt) {
assert_true(details5.open);
testEvent(evt);
})
details5.open = true;
}, "Adding open to 'details' (not in the document) should fire a toggle event at the 'details' element");
details6.open = true;
details6.open = false;
details6.ontoggle = t6.step_func(function() {
if (loop) {
assert_unreached("toggle event fired twice");
} else {
loop = true;
}
});
setTimeout(t6.step_func(function() {
assert_true(loop);
t6.done();
}), 0);
</script>