<!doctype html>
<title>The dialog element</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<style>
 #ref-element {
   padding-top: 1em;
   background-color: white;
   color: black;
   border: solid;
 }
</style>
<!--
HTML used to have a style rule with `@media screen and (max-width: 540px)`.
That was removed in https://github.com/whatwg/html/pull/2459
-->
<div><iframe style="width: 540px" src="support/dialog-framed.html"></iframe></div>
<div><iframe style="width: 538px" src="support/dialog-framed.html"></iframe></div>
<div id=ref-element></div>
<script>
setup(() => {
  const refStyle = getComputedStyle(document.getElementById('ref-element'));
  window.ref1em = refStyle.paddingTop;
  window.refWhite = refStyle.backgroundColor;
  window.refBlack = refStyle.color;
  window.refMediumBorder = refStyle.borderTopWidth;
  window.iframeHeight = 150;
  const bodyTopMargin = 8;
  window.dialogSize = parseFloat(ref1em) * 2 + parseFloat(refMediumBorder) * 2;
  window.normalBottomDistance = iframeHeight - bodyTopMargin - dialogSize;
}, {explicit_done: true});

onload = () => {
  for (let iframe of document.querySelectorAll('iframe')) {
    const win = iframe.contentWindow;
    const styleAttr = iframe.getAttribute('style');
    const iframeWidth = parseInt(styleAttr.split(' ')[1]);
    const horizontalDistance = iframeWidth / 2 - dialogSize / 2;
    const verticalDistance = iframeHeight / 2 - dialogSize / 2;
    test(() => {
      const style = win.getComputedStyle(win.dialogClosed);
      assert_equals(style.position, 'absolute', 'position');
      assert_equals(style.display, 'none', 'display');
      assert_equals(style.overflow, 'visible', 'overflow');
      assert_equals(style.top, 'auto', 'top');
      assert_equals(style.right, '0px', 'right');
      assert_equals(style.bottom, 'auto', 'bottom');
      assert_equals(style.left, '0px', 'left');
      assert_equals(style.width, 'fit-content', 'width');
      assert_equals(style.height, 'fit-content', 'height');
      assert_equals(style.maxWidth, 'none', 'max-width');
      assert_equals(style.maxHeight, 'none', 'max-height');
      assert_equals(style.marginTop, 'auto', 'marginTop');
      assert_equals(style.marginRight, 'auto', 'marginRight');
      assert_equals(style.marginBottom, 'auto', 'marginBottom');
      assert_equals(style.marginLeft, 'auto', 'marginLeft');
      assertCommon(style);
    }, `Closed dialog in ${styleAttr} iframe`);

    test(() => {
      const style = win.getComputedStyle(win.dialogOpen);
      assert_equals(style.position, 'absolute', 'position');
      assert_equals(style.display, 'block', 'display');
      assert_equals(style.overflow, 'visible', 'overflow');
      assert_equals(style.top, '8px', 'top');
      assert_equals(style.right, '0px', 'right');
      assert_equals(style.bottom, normalBottomDistance + 'px', 'bottom');
      assert_equals(style.left, '0px', 'left');
      assert_equals(style.width, '0px', 'width');
      assert_equals(style.height, '0px', 'height');
      assert_equals(style.maxWidth, 'none', 'max-width');
      assert_equals(style.maxHeight, 'none', 'max-height');
      assert_equals(style.marginTop, '0px', 'marginTop');
      assert_equals(style.marginRight, horizontalDistance + 'px', 'marginRight');
      assert_equals(style.marginBottom, '0px', 'marginBottom');
      assert_equals(style.marginLeft, horizontalDistance + 'px', 'marginLeft');
      assertCommon(style);
    }, `Open dialog in ${styleAttr} iframe`);

    test(() => {
      const style = win.getComputedStyle(win.dialogModal);
      assert_equals(style.position, 'fixed', 'position');
      assert_equals(style.display, 'block', 'display');
      assert_equals(style.overflow, 'auto', 'overflow');
      assert_equals(style.top, '0px', 'top');
      assert_equals(style.right, '0px', 'right');
      assert_equals(style.bottom, '0px', 'bottom');
      assert_equals(style.left, '0px', 'left');
      assert_equals(style.width, '0px', 'width');
      assert_equals(style.height, '0px', 'height');
      assert_equals(style.maxWidth, 'calc(100% - 38px)', 'max-width');
      assert_equals(style.maxHeight, 'calc(100% - 38px)', 'max-height');
      assert_equals(style.marginTop, verticalDistance + 'px', 'marginTop');
      assert_equals(style.marginRight, horizontalDistance + 'px', 'marginRight');
      assert_equals(style.marginBottom, verticalDistance + 'px', 'marginBottom');
      assert_equals(style.marginLeft, horizontalDistance + 'px', 'marginLeft');
      assertCommon(style);
    }, `Modal dialog in ${styleAttr} iframe`);
  }
  done();
};

function assertCommon(style) {
  assert_equals(style.borderTopStyle, 'solid', 'borderTopStyle');
  assert_equals(style.borderRightStyle, 'solid', 'borderRightStyle');
  assert_equals(style.borderBottomStyle, 'solid', 'borderBottomStyle');
  assert_equals(style.borderLeftStyle, 'solid', 'borderLeftStyle');
  assert_equals(style.paddingTop, ref1em, 'paddingTop');
  assert_equals(style.paddingRight, ref1em, 'paddingRight');
  assert_equals(style.paddingBottom, ref1em, 'paddingBottom');
  assert_equals(style.paddingLeft, ref1em, 'paddingLeft');
  assert_equals(style.backgroundColor, refWhite, 'backgroundColor');
  assert_equals(style.color, refBlack, 'color');
}
</script>
