blob: 89bd9197f203576a2ab0a3b2d723887c6f345b89 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<style>
#foo {
--a: blue;
--b: green;
}
</style>
<script>
function test() {
let suite = InspectorTest.createSyncSuite("WI.CSSStyleDeclaration.prototype.resolveVariableValue");
let computedStyle = null;
function addTest({name, expression, expected}) {
suite.addTestCase({
name,
test() {
InspectorTest.expectEqual(computedStyle.resolveVariableValue(expression), expected, `"${expression}" should resolve to ${JSON.stringify(expected)}.`);
},
})
}
addTest({
name: "NotVariable",
expression: "red",
expected: null,
});
addTest({
name: "EmptyVariable",
expression: "var()",
expected: null,
});
addTest({
name: "InvalidVariable",
expression: "var(invalid)",
expected: null,
});
addTest({
name: "NonExistentVariable",
expression: "var(--DNE)",
expected: null,
});
addTest({
name: "ValidVariable",
expression: "var(--a)",
expected: "blue",
});
addTest({
name: "InvalidFallbackValue",
expression: "var(--DNE, )",
expected: null,
});
addTest({
name: "ValidFallbackValue",
expression: "var(--DNE, red)",
expected: "red",
});
addTest({
name: "InvalidFallbackVariable",
expression: "var(--DNE, var(--DNE))",
expected: null,
});
addTest({
name: "ValidFallbackVariable",
expression: "var(--DNE, var(--b, red))",
expected: "green",
});
addTest({
name: "ValidVariableWithInvalidFallbackValue",
expression: "var(--a, )",
expected: "blue",
});
addTest({
name: "ValidVariableWithValidFallbackValue",
expression: "var(--a, red)",
expected: "blue",
});
addTest({
name: "ValidVariableWithInvalidFallbackVariable",
expression: "var(--a, var(--DNE))",
expected: "blue",
});
addTest({
name: "ValidVariableWithValidFallbackVariable",
expression: "var(--a, var(--b))",
expected: "blue",
});
WI.domManager.requestDocument((documentNode) => {
documentNode.querySelector("#foo", (contentNodeId) => {
if (!contentNodeId) {
InspectorTest.fail("DOM node not found.");
InspectorTest.completeTest();
return;
}
let domNode = WI.domManager.nodeForId(contentNodeId);
nodeStyles = WI.cssManager.stylesForNode(domNode);
if (nodeStyles.needsRefresh) {
nodeStyles.singleFireEventListener(WI.DOMNodeStyles.Event.Refreshed, (event) => {
computedStyle = nodeStyles.computedStyle;
suite.runTestCasesAndFinish();
});
return;
}
computedStyle = nodeStyles.computedStyle;
suite.runTestCasesAndFinish();
});
});
}
</script>
</head>
<body onload="runTest()">
<p>Test that WI.CSSStyleDeclaration.prototype.resolveVariableValue works as expected.</p>
<div id="foo"></div>
</body>
</html>