<!DOCTYPE html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script>function inlineScriptOne() { return 1; }</script>
  <script>
  function inlineScriptTwo() {
      return 2;
  }
  //# sourceURL=inline-script-two.js
  </script>
<script>
function triggerResourceWithNormalScript() {
    let script = document.createElement("script");
    script.src = "resources/relationship-normal.js";
    document.body.appendChild(script);
}

function triggerResourceWithNamedScript() {
    let script = document.createElement("script");
    script.src = "resources/relationship-named.js";
    document.body.appendChild(script);
}

function triggerScriptWithoutResource() {
    eval("//# sourceURL=script-only.js\n1+1");
}

function triggerScriptElement() {
    let script = document.createElement("script");
    script.text = "//# sourceURL=dynamically-added-script-element.js\n1+1";
    document.body.appendChild(script);
}

function test()
{
    let suite = InspectorTest.createAsyncSuite("WI.Script and WI.Resource relationship");

    function validateNormalRelationship(resource, script) {
        InspectorTest.expectThat(resource.url === script.url, "Resource and Script have the same URL.");
        InspectorTest.expectThat(resource.scripts.length === 1, "Resource should be related to one script.");
        InspectorTest.expectThat(resource.scripts[0] === script, "Resource should be related to the newly added script.");
        InspectorTest.expectThat(script.resource === resource, "Script should be related to the resource.");
    }

    suite.addTestCase({
        name: "ScriptWithResource",
        description: "Normal relationship between a script and a resource.",
        test(resolve, reject) {
            let script = null;
            let resource = null;
            
            WI.debuggerManager.addEventListener(WI.DebuggerManager.Event.ScriptAdded, scriptListener);
            WI.Frame.awaitEvent(WI.Frame.Event.ResourceWasAdded)
            .then((event) => {
                resource = event.data.resource;
                validateRelationship();
            });
            
            function scriptListener(event) {
                if (!event.data.script.url)
                    return;

                InspectorTest.expectThat(!script, "Only one Script should be added.");

                script = event.data.script;
                validateRelationship();
            }

            function validateRelationship() {
                if (!resource || !script)
                    return;

                validateNormalRelationship(resource, script);
                InspectorTest.expectThat(!script.sourceURL, "Script should not have a sourceURL.");

                WI.debuggerManager.removeEventListener(WI.DebuggerManager.Event.ScriptAdded, scriptListener, null);
                resolve();
            }

            InspectorTest.evaluateInPage("triggerResourceWithNormalScript()");
        }
    });

    suite.addTestCase({
        name: "NamedScriptWithResource",
        description: "Normal relationship between a named script and a resource.",
        test(resolve, reject) {
            let script = null;
            let resource = null;

            WI.debuggerManager.addEventListener(WI.DebuggerManager.Event.ScriptAdded, scriptListener);
            WI.Frame.awaitEvent(WI.Frame.Event.ResourceWasAdded)
            .then((event) => {
                resource = event.data.resource;
                validateRelationship();
            });

            function scriptListener(event) {
                if (!event.data.script.url)
                    return;

                InspectorTest.expectThat(!script, "Only one Script should be added.");

                script = event.data.script;
                validateRelationship();
            }

            function validateRelationship() {
                if (!resource || !script)
                    return;

                validateNormalRelationship(resource, script);
                InspectorTest.expectThat(script.sourceURL === "foo.js", "Script should have a sourceURL.");
                WI.debuggerManager.removeEventListener(WI.DebuggerManager.Event.ScriptAdded, scriptListener, null);
                resolve();
            }

            InspectorTest.evaluateInPage("triggerResourceWithNamedScript()");
        }
    });

    suite.addTestCase({
        name: "ScriptWithoutResource",
        description: "A named eval does not have a resource.",
        test(resolve, reject) {
            WI.debuggerManager.addEventListener(WI.DebuggerManager.Event.ScriptAdded, scriptListener);
            let resourceListener = WI.Frame.singleFireEventListener(WI.Frame.Event.ResourceWasAdded, (event) => {
                InspectorTest.fail("Resource should not be added.");
                reject();
            });

            function scriptListener(event) {
                if (!event.data.script.sourceURL)
                    return;

                InspectorTest.pass("Script was added.");
                let script = event.data.script;

                InspectorTest.expectThat(script.resource === null, "Script should not be associated with a Resource.");
                InspectorTest.expectThat(script.sourceURL === "script-only.js", "Script should have a sourceURL.");

                WI.Frame.removeEventListener(WI.Frame.Event.ResourceWasAdded, resourceListener, null);
                WI.debuggerManager.removeEventListener(WI.DebuggerManager.Event.ScriptAdded, scriptListener, null);
                resolve();
            }

            InspectorTest.evaluateInPage("triggerScriptWithoutResource()");
        }
    });

    suite.addTestCase({
        name: "DynamicallyAddedScriptElementNoResource",
        description: "A dynamically added script element has no resource.",
        test(resolve, reject) {
            WI.debuggerManager.addEventListener(WI.DebuggerManager.Event.ScriptAdded, scriptListener);

            function scriptListener(event) {
                if (event.data.script.sourceURL !== "dynamically-added-script-element.js")
                    return;
                InspectorTest.pass("Script was added.");
                let script = event.data.script;

                InspectorTest.expectThat(script.dynamicallyAddedScriptElement, "Script should identify as a dynamically added script element.");
                InspectorTest.expectThat(script.resource === null, "Script should not be associated when a resource.");

                WI.debuggerManager.removeEventListener(WI.DebuggerManager.Event.ScriptAdded, scriptListener, null);
                resolve();
            }

            InspectorTest.evaluateInPage("triggerScriptElement()");
        }
    });

    suite.addTestCase({
        name: "DocumentWithInlineScripts",
        description: "A document resource may be associated with multiple inline scripts.",
        test(resolve, reject) {
            let mainResource = WI.networkManager.mainFrame.mainResource;
            let scripts = mainResource.scripts.slice().sort((a, b) => a.range.startLine - b.range.startLine);

            // Scripts are:
            //   1. <script> with inlineScriptOne()
            //   2. <script> with inlineScriptTwo()
            //   3. This <script> with test()
            //   4. The <body onload> inline script event listener

            InspectorTest.expectThat(scripts.length === 4, "Main Resource should have 4 scripts.");
            InspectorTest.expectThat(!scripts[0].sourceURL, "Inline script 1 does not have a sourceURL.");
            InspectorTest.expectThat(scripts[1].sourceURL === "inline-script-two.js", "Inline script 2 has a sourceURL.");
            InspectorTest.expectThat(!scripts[2].sourceURL, "Inline script 3 does not have a sourceURL.");
            InspectorTest.expectThat(!scripts[3].sourceURL, "Inline script 4 does not have a sourceURL.");

            InspectorTest.expectThat(scripts[0].range.startLine < 15, "Inline script 1 should have a low start line.");
            InspectorTest.expectThat(scripts[1].range.startLine < 15, "Inline script 2 should have a low start line.");
            InspectorTest.expectThat(scripts[2].range.startLine < 15, "Inline script 3 should have a low start line.");
            InspectorTest.expectThat(scripts[3].range.startLine > 100, "Inline script 4 should have a high start line.");

            resolve();
        }
    });

    suite.runTestCasesAndFinish();
}
</script>
</head>
<body onload="runTest()">
<p>WI.Script and WI.Resource relationship.</p>
</body>
</html>
