<!DOCTYPE html>
<html>
<head>
<title>External classic scripts with nomodule content attribute must not run</title>
<link rel="author" title="Yusuke Suzuki" href="mailto:utatane.tea@gmail.com">
<link rel="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<!-- Load this script synchronously to ensure test cases below can load it in 200ms -->
<script src="resources/set-script-executed.js"></script>
</head>
<body>
<script>
let supportsNoModule = "noModule" in document.getElementsByTagName("script")[0];

waitForLoadEvent = new Promise((resolve) => {
    window.onload = resolve;
});

promise_test(() => {
    window.executed = false;
    let loaded = false;
    let errored = false;

    let script = document.createElement('script');

    script.src = './resources/set-script-executed.js';
    script.onload = () => loaded = true;
    script.onerror = () => errored = true;
    script.noModule = false;
    document.body.appendChild(script);

    return waitForLoadEvent.then(() => {
        assert_true(supportsNoModule);
        assert_true(executed);
        assert_true(loaded);
        assert_false(errored);
    });
}, 'An asynchronously loaded classic script with noModule set to false must run');

promise_test(() => {
    window.executed = false;
    let loaded = false;
    let errored = false;

    let script = document.createElement('script');
    script.src = './resources/set-script-executed.js';
    script.onload = () => loaded = true;
    script.onerror = () => errored = true;
    script.noModule = true;
    document.body.appendChild(script);

    return waitForLoadEvent.then(() => {
        assert_true(supportsNoModule);
        assert_false(executed);
        assert_false(loaded);
        assert_false(errored);
    });
}, 'An asynchronously loaded classic script with noModule set to true must not run');

</script>
</body>
</html>
