| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <script src="../../http/tests/inspector/resources/protocol-test.js"></script> | |
| <script> | |
| function test() | |
| { | |
| let suite = ProtocolTest.createAsyncSuite("Debugger.scriptParsed.sourceURL-directives"); | |
| // Because InspectorTest output causes scripts to be parsed | |
| // we cannot check sourceURL per evaluation easily. Instead | |
| // just run a bunch of tests for valid and invalid directives | |
| // and check that the output only includes the valid results. | |
| let expressions = []; | |
| let sourceURLExpectations = []; | |
| let sourceMappingURLExpectations = []; | |
| function addInvalidTestCase(args) { | |
| let {expression} = args; | |
| expressions.push(expression); | |
| } | |
| function addValidTestCase(args) { | |
| let {expression, expected} = args; | |
| expressions.push(expression); | |
| sourceURLExpectations.push(expected); | |
| sourceMappingURLExpectations.push(expected); | |
| } | |
| suite.addTestCase({ | |
| name: "TestExpressionsForSourceURL", | |
| test(resolve, reject) { | |
| for (let expression of expressions) | |
| ProtocolTest.evaluateInPage(expression); | |
| InspectorProtocol.eventHandler["Debugger.scriptParsed"] = function(messageObject) { | |
| // Ignore named inspector internal scripts. | |
| if (messageObject.params.sourceURL && messageObject.params.sourceURL.startsWith("__InjectedScript_")) | |
| return; | |
| // Has a sourceURL, must be one of the valid ones. | |
| if (messageObject.params.sourceURL) { | |
| let sourceURL = messageObject.params.sourceURL; | |
| ProtocolTest.log(`Found Script with sourceURL '${sourceURL}'`); | |
| ProtocolTest.assert(sourceURLExpectations[0] === sourceURL, "Did not expect to see sourceURL: " + sourceURL); | |
| sourceURLExpectations.shift(); | |
| if (!sourceURLExpectations.length) | |
| resolve(); | |
| } | |
| } | |
| } | |
| }); | |
| suite.addTestCase({ | |
| name: "TestExpressionsForSourceMappingURL", | |
| test(resolve, reject) { | |
| // Rewrite the "sourceURL" to "sourceMappingURL" in the original expressions. | |
| for (let expression of expressions) | |
| ProtocolTest.evaluateInPage(expression.replace(/sourceURL/g, "sourceMappingURL")); | |
| InspectorProtocol.eventHandler["Debugger.scriptParsed"] = function(messageObject) { | |
| // Has a sourceMapURL, must be one of the valid ones. | |
| if (messageObject.params.sourceMapURL) { | |
| let sourceMappingURL = messageObject.params.sourceMapURL; | |
| ProtocolTest.log(`Found Script with sourceMappingURL '${sourceMappingURL}'`); | |
| ProtocolTest.assert(sourceMappingURLExpectations[0] === sourceMappingURL, "Did not expect to see sourceMappingURL: " + sourceMappingURL); | |
| sourceMappingURLExpectations.shift(); | |
| if (!sourceMappingURLExpectations.length) | |
| resolve(); | |
| } | |
| } | |
| } | |
| }); | |
| // ------ | |
| addInvalidTestCase({ | |
| description: "Evaluation without a SourceURL.", | |
| expression: "eval('1')", | |
| }); | |
| addInvalidTestCase({ | |
| description: "SourceURL missing '#'.", | |
| expression: "eval('// sourceURL=invalid.js')", | |
| }); | |
| addInvalidTestCase({ | |
| description: "SourceURL missing space after '#'.", | |
| expression: "eval('//#sourceURL=invalid.js')", | |
| }); | |
| addInvalidTestCase({ | |
| description: "SourceURL with space before '#'.", | |
| expression: "eval('// #sourceURL=invalid.js')", | |
| }); | |
| addInvalidTestCase({ | |
| description: "SourceURL with multiple spaces after '#'.", | |
| expression: "eval('//# sourceURL=invalid.js')", | |
| }); | |
| addInvalidTestCase({ | |
| description: "SourceURL with space between name and '='.", | |
| expression: "eval('//# sourceURL =invalid.js')", | |
| }); | |
| addInvalidTestCase({ | |
| description: "SourceURL with quotes in value.", | |
| expression: "eval('//# sourceURL=\\\'invalid.js\\\'')", | |
| }); | |
| addInvalidTestCase({ | |
| description: "SourceURL value must be a single non-whitespace enclosed value.", | |
| expression: "eval('//# sourceURL=invalid.js a')", | |
| }); | |
| addInvalidTestCase({ | |
| description: "Unknown directive.", | |
| expression: "eval('//# unknown=invalid.js')", | |
| }); | |
| addInvalidTestCase({ | |
| description: "Missing parts.", | |
| expression: "eval('//#')", | |
| }); | |
| addInvalidTestCase({ | |
| description: "Missing parts.", | |
| expression: "eval('//# ')", | |
| }); | |
| addInvalidTestCase({ | |
| description: "Missing parts.", | |
| expression: "eval('//# source')", | |
| }); | |
| addInvalidTestCase({ | |
| description: "Missing parts.", | |
| expression: "eval('//# sourceURL=')", | |
| }); | |
| // ------ | |
| addValidTestCase({ | |
| description: "SourceURL basic form.", | |
| expression: "eval('//# sourceURL=test1.js')", | |
| expected: "test1.js", | |
| }); | |
| addValidTestCase({ | |
| description: "SourceURL extra leading whitespace.", | |
| expression: "eval('//# sourceURL= test2.js')", | |
| expected: "test2.js", | |
| }); | |
| addValidTestCase({ | |
| description: "SourceURL extra trailing whitespace.", | |
| expression: "eval('//# sourceURL=test3.js ')", | |
| expected: "test3.js", | |
| }); | |
| addValidTestCase({ | |
| description: "SourceURL extra leading and trailing whitespace.", | |
| expression: "eval('//# sourceURL= test4.js ')", | |
| expected: "test4.js", | |
| }); | |
| addValidTestCase({ | |
| description: "SourceURL with tabs.", | |
| expression: "eval('//#\\tsourceURL=test5.js')", | |
| expected: "test5.js", | |
| }); | |
| addValidTestCase({ | |
| description: "SourceURLs not at the start of a line.", | |
| expression: "eval('1 //# sourceURL=test6.js')", | |
| expected: "test6.js", | |
| }); | |
| addValidTestCase({ | |
| description: "SourceURL with deprecated '@' instead of '#'.", | |
| expression: "eval('//@ sourceURL=test7.js ')", | |
| expected: "test7.js", | |
| }); | |
| addValidTestCase({ | |
| description: "SourceURLs not on the first line.", | |
| expression: "eval('\\n\\n//# sourceURL=test8.js')", | |
| expected: "test8.js", | |
| }); | |
| addValidTestCase({ | |
| description: "Multiple SourceURLs will return the second.", | |
| expression: "eval('//# sourceURL=first.js\\n//# sourceURL=second.js')", | |
| expected: "second.js", | |
| }); | |
| InspectorProtocol.sendCommand("Debugger.enable", {}); | |
| suite.runTestCasesAndFinish(); | |
| } | |
| </script> | |
| </head> | |
| <body onload="runTest()"> | |
| <p>Tests for the Debugger.scriptParsed sourceURL and sourceMappingURL comment directive parsing.</p> | |
| </body> | |
| </html> |