<!doctype html>
<title>Async Script Execution Order (wrt possibly deferred Synchronous Script)</title>
<html>
<head>
    <meta charset="utf-8">
    <script src="../resources/testharness.js"></script>
    <script src="../resources/testharnessreport.js"></script>
</head>
<body>
  <pre id="scriptlog"></pre>
  <script>
  setup({single_test: true});

  function log(msg) {
    document.getElementById("scriptlog").textContent += msg + ";";
  }
  function checkIfReachedBodyEnd() {
    const endelement = document.getElementById("bodyend");
    if (endelement && endelement.textContent === "End") {
      log("EndOfBody");
      endelement.textContent = "Detected";
    }
  }
  function logScript(msg) {
    checkIfReachedBodyEnd();
    log(msg);
  }
  function finish() {
    const actual = document.getElementById("scriptlog").textContent;
    const normal = "Inline1;Sync1;EndOfBody;DOMContentLoaded;Async1;";
    <!-- Force defer order would be: "EndOfBody;Inline1;Sync1;DOMContentLoaded;Async1;" -->
    assert_equals(actual, normal, "Normal script execution order comparison");
    done();
  }
  logScript("Inline1");
  window.addEventListener("load", finish);
  document.addEventListener("DOMContentLoaded", function() { logScript("DOMContentLoaded"); });
  </script>
  <script src="resources/sync-script-1.js"></script>
  <script src="resources/async-script-1.js" async></script>
  <pre id="bodyend">End</pre>
</body>
</html>
