blob: fa37283c3b8da562cbc2e9da2636149a478da5d8 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script src="resources/audit-utilities.js"></script>
<script>
function test()
{
let suite = InspectorTest.Audit.createSuite("Audit.run.DOM");
function evaluateStringForTest(func, target, args) {
return `WebInspectorAudit.DOM.${func}(document.querySelector("#${target}")${args ? ", " + JSON.stringify(args) : ""})`;
}
const tests = [
{ func: "hasEventListeners", target: "noListeners" },
{ func: "hasEventListeners", target: "noListeners", args: ["FakeEvent"] },
{ func: "hasEventListeners", target: "attributeListener" },
{ func: "hasEventListeners", target: "attributeListener", args: ["FakeEvent"] },
{ func: "hasEventListeners", target: "javascriptListener" },
{ func: "hasEventListeners", target: "javascriptListener", args: ["FakeEvent"] },
{ func: "hasEventListeners", target: "builtinListener" },
{ func: "hasEventListeners", target: "builtinListener", args: ["FakeEvent"] },
];
for (let {func, target, args} of tests) {
suite.addTestCase({
name: "Audit.run.DOM." + func + "." + target + (args ? ".WithArgs" : ""),
async test() {
let functionString = evaluateStringForTest(func, target, args);
await InspectorTest.Audit.setupAudit();
InspectorTest.log(`Audit run \`${functionString}\`...`);
let {result, wasThrown} = await AuditAgent.run(`function() { return ${functionString}; }`);
InspectorTest.assert(!wasThrown, "Should not throw an exception.");
if (!wasThrown)
InspectorTest.log("Result: " + result.value);
else
InspectorTest.log(result.description);
await InspectorTest.Audit.teardownAudit();
},
});
}
suite.addTestCase({
name: "Audit.run.DOM.InvalidCopiedFunctionCall",
description: "Check that WebInspectorAudit.DOM functions throw an error when called outside of an audit.",
async test() {
let functions = new Map;
for (let test of tests)
functions.set(test.func, test);
await InspectorTest.Audit.setupAudit();
InspectorTest.log(`Copying WebInspectorAudit to window...`);
let {wasThrown} = await AuditAgent.run(`function() { window.CopiedWebInspectorAudit = WebInspectorAudit; }`);
InspectorTest.assert(!wasThrown, "Should not throw an exception.");
await InspectorTest.Audit.teardownAudit();
for (let {func, target, args} of functions.values()) {
InspectorTest.log(`Testing copied ${func}...`);
await InspectorTest.expectException(async function() {
await InspectorTest.evaluateInPage("window.Copied" + evaluateStringForTest(func, target, args));
});
}
},
});
suite.runTestCasesAndFinish();
}
</script>
</head>
<body onload="runTest()">
<p>Tests for the injected WebInspectorAudit.DOM functions.</p>
<div id="noListeners"></div>
<div id="attributeListener" onclick="void(0);"></div>
<div id="javascriptListener"><script>document.querySelector("#javascriptListener").addEventListener("click", () => {});</script></div>
<video id="builtinListener"></video>
</body>
</html>