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