| <!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> |