blob: 9ca5a693fc36c5485eb190ca7d342188de3b6c3d [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script>
function test() {
let testElement = null;
let nodeStyles = null;
let suite = InspectorTest.createAsyncSuite("CSS.forcePseudoState");
[
{forceablePseudoClass: WI.CSSManager.ForceablePseudoClass.Active, expectedBackgroundColor: "rgb(0, 0, 10)"},
{forceablePseudoClass: WI.CSSManager.ForceablePseudoClass.Focus, expectedBackgroundColor: "rgb(0, 0, 20)"},
{forceablePseudoClass: WI.CSSManager.ForceablePseudoClass.FocusVisible, expectedBackgroundColor: "rgb(0, 0, 30)"},
{forceablePseudoClass: WI.CSSManager.ForceablePseudoClass.FocusWithin, expectedBackgroundColor: "rgb(0, 0, 40)"},
{forceablePseudoClass: WI.CSSManager.ForceablePseudoClass.Hover, expectedBackgroundColor: "rgb(0, 0, 50)"},
{forceablePseudoClass: WI.CSSManager.ForceablePseudoClass.Target, expectedBackgroundColor: "rgb(0, 0, 60)"},
{forceablePseudoClass: WI.CSSManager.ForceablePseudoClass.Visited, expectedBackgroundColor: "rgb(0, 0, 70)"},
].forEach(({forceablePseudoClass, expectedBackgroundColor}) => {
suite.addTestCase({
name: "CSS.forcePseudoState." + forceablePseudoClass,
async test() {
await nodeStyles.refreshIfNeeded();
InspectorTest.assert(Object.shallowEqual(testElement.enabledPseudoClasses, []), "Should not have any enabled pseudo classes.");
InspectorTest.assert(nodeStyles.computedStyle.propertyForName("background-color").value === "rgb(0, 0, 0)", "Should have expected initial style.");
InspectorTest.log("Forcing pseudo class...");
await Promise.all([
testElement.awaitEvent(WI.DOMNode.Event.EnabledPseudoClassesChanged),
testElement.setPseudoClassEnabled(forceablePseudoClass, true),
]);
await nodeStyles.refreshIfNeeded();
InspectorTest.expectShallowEqual(testElement.enabledPseudoClasses, [forceablePseudoClass], "Should have one enabled pseudo class.");
InspectorTest.expectEqual(nodeStyles.computedStyle.propertyForName("background-color").value, expectedBackgroundColor, "Should change styles.");
InspectorTest.log("Removing forced pseudo class...");
await Promise.all([
testElement.awaitEvent(WI.DOMNode.Event.EnabledPseudoClassesChanged),
testElement.setPseudoClassEnabled(forceablePseudoClass, false),
]);
await nodeStyles.refreshIfNeeded();
InspectorTest.expectShallowEqual(testElement.enabledPseudoClasses, [], "Should not have any enabled pseudo classes.");
InspectorTest.expectEqual(nodeStyles.computedStyle.propertyForName("background-color").value, "rgb(0, 0, 0)", "Should change back to initial style.");
},
});
});
WI.domManager.requestDocument((documentNode) => {
documentNode.querySelector("#test-element", (contentNodeId) => {
if (contentNodeId) {
testElement = WI.domManager.nodeForId(contentNodeId);
nodeStyles = WI.cssManager.stylesForNode(testElement);
suite.runTestCasesAndFinish();
} else {
InspectorTest.fail("DOM node not found.");
InspectorTest.completeTest();
}
});
});
}
</script>
</head>
<body onload="runTest()">
<p>Testing CSS.forcePseudoState.</p>
<style>
#test-element {
background-color: rgb(0, 0, 0);
}
#test-element:active {
background-color: rgb(0, 0, 10);
}
#test-element:focus {
background-color: rgb(0, 0, 20);
}
#test-element:focus-visible {
background-color: rgb(0, 0, 30);
}
#test-element:focus-within {
background-color: rgb(0, 0, 40);
}
#test-element:hover {
background-color: rgb(0, 0, 50);
}
#test-element:target {
background-color: rgb(0, 0, 60);
}
#test-element:visited {
background-color: rgb(0, 0, 70);
}
</style>
<a href="#" id="test-element"></a>
</body>
</html>