| <!DOCTYPE html> |
| <meta charset=utf-8> |
| <title>dialog element: showModal()</title> |
| <link rel="author" title="Denis Ah-Kang" href="mailto:denis@w3.org"> |
| <link rel=help href="https://html.spec.whatwg.org/multipage/#the-dialog-element"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <div id="log"></div> |
| <button id="b0">OK</button> |
| <dialog id="d1"> |
| <p>foobar</p> |
| <button id="b1">OK</button> |
| </dialog> |
| <dialog id="d2" open> |
| <p>foobar</p> |
| <button>OK</button> |
| </dialog> |
| <dialog id="d3"> |
| <p>foobar</p> |
| <button id="b3">OK</button> |
| </dialog> |
| <dialog id="d4"> |
| <p>foobar</p> |
| <button id="b4">OK</button> |
| </dialog> |
| <dialog id="d5"> |
| <p>foobar</p> |
| <button id="b5">OK</button> |
| </dialog> |
| <dialog id="d6"></dialog> |
| <dialog id="d7"> |
| <input id="i71" value="foobar"> |
| <input id="i72" value="foobar"> |
| <button id="b7">OK</button> |
| </dialog> |
| <dialog id="d8"> |
| <input id="i81" value="foobar"> |
| <input id="i82" value="foobar" autofocus> |
| <button id="b8">OK</button> |
| </dialog> |
| <script> |
| var d1 = document.getElementById('d1'), |
| d2 = document.getElementById('d2'), |
| d3 = document.getElementById('d3'), |
| d4 = document.getElementById('d4'), |
| d5 = document.getElementById('d5'), |
| d6 = document.getElementById('d6'), |
| d7 = document.getElementById('d7'), |
| d8 = document.getElementById('d8'), |
| b0 = document.getElementById('b0'), |
| b1 = document.getElementById('b1'), |
| b3 = document.getElementById('b3'), |
| b4 = document.getElementById('b4'), |
| b5 = document.getElementById('b5'); |
| |
| test(function(){ |
| assert_false(d1.open); |
| assert_false(b0.commandDisabled); |
| d1.showModal(); |
| this.add_cleanup(function() { d1.close(); }); |
| assert_true(d1.open); |
| assert_true(b0.commandDisabled); |
| assert_equals(document.activeElement, b1); |
| }); |
| |
| test(function(){ |
| assert_throws("INVALID_STATE_ERR", function() { |
| d2.showModal(); |
| this.add_cleanup(function() { d2.close(); }); |
| }); |
| }, "showModal() on a <dialog> that already has an open attribute throws an InvalidStateError exception"); |
| |
| test(function(){ |
| var d = document.createElement("dialog"); |
| assert_throws("INVALID_STATE_ERR", function() { |
| d.showModal(); |
| this.add_cleanup(function() { d.close(); }); |
| }); |
| }, "showModal() on a <dialog> not in a Document throws an InvalidStateError exception"); |
| |
| test(function(){ |
| assert_false(d3.open); |
| assert_false(b3.commandDisabled); |
| assert_false(d4.open); |
| assert_false(b4.commandDisabled); |
| assert_false(d5.open); |
| assert_false(b5.commandDisabled); |
| d3.showModal(); |
| this.add_cleanup(function() { d3.close(); }); |
| d4.showModal(); |
| this.add_cleanup(function() { d4.close(); }); |
| d5.showModal(); |
| this.add_cleanup(function() { d5.close(); }); |
| assert_true(d3.open); |
| assert_true(b3.commandDisabled); |
| assert_true(d4.open); |
| assert_true(b4.commandDisabled); |
| assert_true(d5.open); |
| assert_false(b5.commandDisabled); |
| }, "when opening multiple dialogs, only the newest one is non-inert"); |
| |
| test(function(){ |
| assert_false(d6.open); |
| d6.showModal(); |
| this.add_cleanup(function() { d6.close(); }); |
| assert_true(d6.open); |
| assert_equals(document.activeElement, d6); |
| }, "opening dialog without focusable children"); |
| |
| test(function(){ |
| assert_false(d7.open); |
| d7.showModal(); |
| this.add_cleanup(function() { d7.close(); }); |
| assert_true(d7.open); |
| assert_equals(document.activeElement, document.getElementById("i71")); |
| }, "opening dialog with multiple focusable children"); |
| |
| test(function(){ |
| assert_false(d8.open); |
| d8.showModal(); |
| this.add_cleanup(function() { d8.close(); }); |
| assert_true(d8.open); |
| assert_equals(document.activeElement, document.getElementById("i82")); |
| }, "opening dialog with multiple focusable children, one having the autofocus attribute"); |
| </script> |