208 lines
6.7 KiB
HTML
208 lines
6.7 KiB
HTML
<!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>
|