<!DOCTYPE html>
<title>Page load processing model for text files</title>
<link rel="author" title="Ms2ger" href="ms2ger@gmail.com">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#read-text">
<link rel="stylesheet" href="/resources/testharness.css">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
var t = async_test("Checking document metadata for text file");
var tD = async_test("Checking DOM for text file");
var tC = async_test("Checking contents for text file");
var iframe = document.body.appendChild(document.createElement("iframe"));
iframe.onload = function(e) {
  var doc = iframe.contentDocument;
  t.step(function() {
    assert_equals(doc.compatMode, "BackCompat");
    assert_equals(doc.contentType, "text/plain");
    assert_equals(doc.doctype, null);
    t.done();
  })
  tD.step(function() {
    assert_equals(doc.childNodes.length, 1, "Document should have 1 child")
    assert_equals(doc.documentElement.tagName, "HTML");
    assert_equals(doc.documentElement.childNodes.length, 2,
                  "Root element should have 2 children")
    assert_equals(doc.documentElement.firstChild.tagName, "HEAD");
    assert_equals(doc.documentElement.lastChild.tagName, "BODY");
    assert_equals(doc.documentElement.lastChild.childNodes.length, 1,
                  "Body element should have 1 child")
    assert_equals(doc.documentElement.lastChild.firstChild.tagName, "PRE");
    tD.done();
  })
  tC.step(function() {
    assert_equals(doc.documentElement.lastChild.firstChild.firstChild.data,
                  "This is a sample text/plain document.\n\nThis is not an HTML document.\n\n");
    tC.done();
  })
};
iframe.src = "../../../../common/text-plain.txt";
</script>
