Index: LayoutTests/imported/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-close.html |
diff --git a/LayoutTests/imported/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-close.html b/LayoutTests/imported/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-close.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8ffc01c75895ef46bdb8f10aac2f318b76b6336a |
--- /dev/null |
+++ b/LayoutTests/imported/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/dialog-close.html |
@@ -0,0 +1,78 @@ |
+<!DOCTYPE html> |
+<meta charset=utf-8> |
+<title>dialog element: close()</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> |
+<dialog id="d1"> |
+ <p>foobar</p> |
+ <button>OK</button> |
+</dialog> |
+<dialog id="d2" open> |
+ <p>foobar</p> |
+ <button>OK</button> |
+</dialog> |
+<dialog id="d3" open> |
+ <p>foobar</p> |
+ <button>OK</button> |
+</dialog> |
+<dialog id="d4" open> |
+ <p>foobar</p> |
+ <button>OK</button> |
+</dialog> |
+<dialog id="d5" open> |
+ <p>foobar</p> |
+ <button>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'), |
+ t = async_test("close() fires a close event"), |
+ was_queued = false; |
+ |
+ test(function(){ |
+ assert_throws("INVALID_STATE_ERR", function() { |
+ d1.close(); |
+ }); |
+ }, "close() on a <dialog> that doesn't have an open attribute throws an InvalidStateError exception"); |
+ |
+ test(function(){ |
+ assert_true(d2.open); |
+ assert_equals(d2.returnValue, ""); |
+ d2.close("closedialog"); |
+ assert_false(d2.hasAttribute("open")); |
+ assert_equals(d2.returnValue, "closedialog"); |
+ }, "close() removes the open attribute and set the returnValue to the first argument"); |
+ |
+ test(function(){ |
+ assert_true(d3.open); |
+ assert_equals(d3.returnValue, ""); |
+ d3.returnValue = "foobar"; |
+ d3.close(); |
+ assert_false(d3.hasAttribute("open")); |
+ assert_equals(d3.returnValue, "foobar"); |
+ }, "close() without argument removes the open attribute and there's no returnValue"); |
+ |
+ d4.onclose = t.step_func_done(function(e) { |
+ assert_true(was_queued, "close event should be queued"); |
+ assert_true(e.isTrusted, "close event is trusted"); |
+ assert_false(e.bubbles, "close event doesn't bubble"); |
+ assert_false(e.cancelable, "close event is not cancelable"); |
+ }); |
+ |
+ t.step(function() { |
+ d4.close(); |
+ was_queued = true; |
+ }) |
+ |
+ test(function(){ |
+ Object.defineProperty(HTMLDialogElement.prototype, 'returnValue', { set: function(v) { assert_unreached('JS-defined setter returnValue on the prototype was invoked'); }, configurable:true }); |
+ Object.defineProperty(d5, 'returnValue', { set: function(v) { assert_unreached('JS-defined setter returnValue on the instance was invoked'); }, configurable:true }); |
+ d5.close('foo'); |
+ }, "close() should set the returnValue IDL attribute but not the JS property"); |
+</script> |