<!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>
