<!DOCTYPE html>
<html>
    <head>
        <title>Ordered async script execution when script.async == false</title>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
        <meta description="This test ensures Ordered async script execution when script.async == false" />
        <link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
        <link rel="help" href="https://html.spec.whatwg.org/multipage/#script-processing-src-sync"/>
        <script src="/resources/testharness.js"></script>
        <script src="/resources/testharnessreport.js"></script>
    </head>
    <body>
        <div id=log></div>
        <script type="text/javascript">
        var t = async_test("Ordered async script execution when script.async == false");

        function timeout()
        {
            t.step(function(){ assert_equals(document.getElementById("testresult").innerHTML, "312")});
            t.done();
        }

        var timer = setTimeout(timeout, 8000);

        function log(text)
        {
            var textNode = document.createTextNode(text);
            document.getElementById("testresult").appendChild(textNode);
        }
        </script>

        <span id="testresult"></span>
        <script type="text/javascript">
            var one = document.createElement("script");
            one.src="log.py?sec=3&id=1";
            one.async = false;
            document.head.appendChild(one);

            var two = document.createElement("script");
            two.src="log.py?sec=1&id=2";
            two.async = false;
            document.head.appendChild(two);
        </script>
        <script type="text/javascript">
            log('3');
        </script>
    </body>
</html>
