<html>
<head>
<script src="../../../resources/js-test-pre.js"></script>
</head>
<body>

<script id="s0" src="ignored.js"></script>
<script id="s1" src="ignored.js" async></script>
<script id="s2" src="ignored.js" async="async"></script>
<script id="s3" src="ignored.js" async="ASYNC"></script>
<script id="s4" src="ignored.js" async="true"></script>
<script id="s5" src="ignored.js" async="false"></script>
<script id="s6"></script>
<script id="s7" async></script>
<script id="s8" async></script>

<script>
description('This test checks for proper parsing of the async attribute on HTML script tags.');

var nextScriptID = 9;

function isAsync(id)
{
    return document.getElementById(id).async;
}

function isDynamicallyInsertedScriptAsync(async)
{
    var id = "s" + nextScriptID++;
    var script = document.createElement("script");
    script.id = id;
    script.src = "resources/script-load.js";
    if (async != null)
        script.async = async;
    document.getElementsByTagName("head")[0].appendChild(script);
    return isAsync(id);
}

document.getElementById("s8").removeAttribute("async");

shouldBeFalse("isAsync('s0')");
shouldBeTrue("isAsync('s1')");
shouldBeTrue("isAsync('s2')");
shouldBeTrue("isAsync('s3')");
shouldBeTrue("isAsync('s4')");
shouldBeTrue("isAsync('s5')");
shouldBeTrue("isAsync('s6')");
shouldBeTrue("isAsync('s7')");
shouldBeFalse("isAsync('s8')");
shouldBeTrue("isDynamicallyInsertedScriptAsync(true)");
shouldBeFalse("isDynamicallyInsertedScriptAsync(false)");
shouldBeTrue("isDynamicallyInsertedScriptAsync(\"async\")");
shouldBeTrue("isDynamicallyInsertedScriptAsync(null)");
</script>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>

