<!doctype html>
<meta charset=utf-8>
<title>The end</title>
<link rel=help href="https://html.spec.whatwg.org/multipage/#the-end">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
async_test(function() {
  document.addEventListener("DOMContentLoaded", this.step_func_done(function(e) {
    assert_equals(e.type, "DOMContentLoaded");
    assert_true(e.bubbles, "bubbles should be true");
    assert_false(e.cancelable, "cancelable should be false");
    assert_equals(e.target, document, "target should be document");
    assert_true(e.isTrusted, "isTrusted should be true");
    assert_class_string(e, "Event");
  }));
}, "DOMContentLoaded");

async_test(function() {
  window.addEventListener("load", this.step_func_done(function(e) {
    assert_equals(e.type, "load");
    assert_false(e.bubbles, "bubbles should be false");
    assert_false(e.cancelable, "cancelable should be false");
    assert_equals(e.target, document, "target should be document");
    assert_true(e.isTrusted, "isTrusted should be true");
    assert_class_string(e, "Event");
  }));
}, "load");

async_test(function() {
  var seen = false;
  document.addEventListener("DOMContentLoaded", this.step_func(function() {
    seen = true;
  }));
  window.addEventListener("load", this.step_func_done(function() {
    assert_true(seen, "DOMContentLoaded should be fired before load");
  }));
}, "order");
</script>
