<!doctype html>
<title>Selection Document.open() tests</title>
<div id=log></div>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
"use strict";

const iframe = document.createElement("iframe");
async_test(t => {
  iframe.onload = t.step_func_done(() => {
    const originalSelection = iframe.contentWindow.getSelection();
    assert_equals(originalSelection.rangeCount, 0, "rangeCount must initially be 0");
    iframe.contentDocument.body.appendChild(iframe.contentDocument.createTextNode("foo"));
    const range = iframe.contentDocument.createRange();
    range.selectNodeContents(iframe.contentDocument.body);
    iframe.contentWindow.getSelection().addRange(range);
    assert_equals(originalSelection.rangeCount, 1, "rangeCount must be 1 after adding a range");

    iframe.contentDocument.open();

    assert_equals(iframe.contentWindow.getSelection(), originalSelection, "After document.open(), the Selection object must be the same");
    assert_equals(iframe.contentWindow.getSelection().rangeCount, 1, "After document.open(), rangeCount must still be 1");
    document.body.removeChild(iframe);
  });
  document.body.appendChild(iframe);
}, "Selection must not be replaced with a new object after document.open()");
</script>
