mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-04-27 02:05:07 +02:00
LibWeb: Don't crash when an unknown property begins with a single dash
This commit is contained in:
Notes:
github-actions[bot]
2025-07-20 06:56:21 +00:00
Author: https://github.com/Gingeh Commit: https://github.com/LadybirdBrowser/ladybird/commit/f38e07e0c52 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5518
@@ -0,0 +1,104 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>variable-definition: get variable value using getPropertyValue</title>
|
||||
|
||||
<meta rel="author" title="Kevin Babbitt">
|
||||
<meta rel="author" title="Greg Whitworth">
|
||||
<link rel="author" title="Microsoft Corporation" href="http://microsoft.com" />
|
||||
<link rel="help" href="http://www.w3.org/TR/css-variables-1/#using-variables">
|
||||
|
||||
<script src="../../resources/testharness.js"></script>
|
||||
<script src="../../resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="log"></div>
|
||||
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
|
||||
let templates = [
|
||||
{ varName:"--var", expectedValue:"", style:"", testName:"no variable"},
|
||||
{ varName:"--var", expectedValue:"value", style:"--var:value", testName:"variable"},
|
||||
{ varName:"--v", expectedValue:"value", style:"--v:value", testName:"single char variable"},
|
||||
{ varName:"---", expectedValue:"value", style:"---:value", testName:"single char '-' variable"},
|
||||
{ varName:"--", expectedValue:"", style:"--:value", testName:"no char variable"},
|
||||
{ varName:"--var", expectedValue:" ", style:"--var: ", testName:"white space value (single space)"},
|
||||
{ varName:"--var", expectedValue:" ", style:"--var: ", testName:"white space value (double space)"},
|
||||
{ varName:"--var", expectedValue:"value2", style:"--var:value1; --var:value2", testName:"overwrite"},
|
||||
{ varName:"--var", expectedValue:" ", style:"--var:value;--var:;", testName:"can overwrite with no value"},
|
||||
{ varName:"--var", expectedValue:" ", style:"--var:value;--var: ;", testName:"can overwrite with space value"},
|
||||
{ varName:"--var", expectedValue:"value1", style:"--var:value1; --Var:value2", testName:"case sensetivity"},
|
||||
{ varName:"--Var", expectedValue:"value2", style:"--var:value1; --Var:value2", testName:"case sensetivity2"},
|
||||
{ varName:"---var", expectedValue:"value", style:"---var:value;", testName:"parsing three dashes at start of variable"},
|
||||
{ varName:"-var4" , expectedValue:"", style:"-var4:value3", testName:"parsing multiple dashes with one dash at start of variable"},
|
||||
{ varName:"--var", expectedValue:"value", style:"--var: value", testName:" leading white space (single space)"},
|
||||
{ varName:"--var", expectedValue:"value1 value2", style:"--var:value1 value2", testName:" middle white space (single space)"},
|
||||
{ varName:"--var", expectedValue:"value", style:"--var:value ", testName:" trailing white space (single space)"},
|
||||
{ varName:"--var", expectedValue:"value", style:"--var: value", testName:" leading white space (double space) 2"},
|
||||
{ varName:"--var", expectedValue:"value1 value2", style:"--var:value1 value2",testName:" middle white space (double space) 2"},
|
||||
{ varName:"--var", expectedValue:"value", style:"--var:value ", testName:" trailing white space (double space) 2"},
|
||||
{ varName:"--var", expectedValue:"value1", style:"--var:value1 !important;", testName:"!important"},
|
||||
{ varName:"--var", expectedValue:"value1", style:"--var:value1!important;--var:value2;", testName:"!important 2"},
|
||||
{ varName:"--var", expectedValue:"value1", style:"--var:value1 !important;--var:value2;", testName:"!important (with space)"}
|
||||
];
|
||||
|
||||
templates.forEach(function (template) {
|
||||
test( function () {
|
||||
let div = document.createElement("div");
|
||||
div.style.cssText = template.style;
|
||||
document.body.appendChild(div);
|
||||
let value = div.style.getPropertyValue(template.varName);
|
||||
assert_equals(value, template.expectedValue, "Expected Value should match actual value");
|
||||
document.body.removeChild(div);
|
||||
}, template.testName);
|
||||
});
|
||||
|
||||
templates.forEach(function (template) {
|
||||
test( function () {
|
||||
let div = document.createElement("div");
|
||||
div.style.cssText = template.style;
|
||||
document.body.appendChild(div);
|
||||
let computedStyle = window.getComputedStyle(div);
|
||||
let value = computedStyle.getPropertyValue(template.varName);
|
||||
assert_equals(value, template.expectedValue, "Expected Value should match actual value");
|
||||
document.body.removeChild(div);
|
||||
}, template.testName +" (Computed Style)");
|
||||
});
|
||||
|
||||
templates.forEach(function (template) {
|
||||
test( function () {
|
||||
let div = document.createElement("div");
|
||||
div.style.cssText = template.style;
|
||||
document.body.appendChild(div);
|
||||
let divChild = document.createElement("div");
|
||||
div.appendChild(divChild);
|
||||
let computedStyle = window.getComputedStyle(divChild);
|
||||
let value = computedStyle.getPropertyValue(template.varName);
|
||||
assert_equals(value, template.expectedValue, "Expected Value should match actual value");
|
||||
document.body.removeChild(div);
|
||||
}, template.testName +" (Cascading)");
|
||||
});
|
||||
|
||||
let template2 = [
|
||||
{ varToSet:"--varUnique", setValue:"green", varNameForRetrieval:"--varUnique", expectedValue:"green", testName:"basic CSSOM.setProperty"},
|
||||
{ varToSet:"--varUnique2 ", setValue:"green", varNameForRetrieval:"--varUnique2 ", expectedValue:"", testName:"CSSOM.setProperty with space 1"},
|
||||
{ varToSet:"--varUnique3 name", setValue:"green", varNameForRetrieval:"--varUnique3 name", expectedValue:"", testName:"CSSOM.setProperty with space 2"},
|
||||
{ varToSet:"--varUnique4 name", setValue:"green", varNameForRetrieval:"--varUnique4", expectedValue:"", testName:"CSSOM.setProperty with space 3"},
|
||||
];
|
||||
|
||||
template2.forEach(function (template) {
|
||||
test( function () {
|
||||
let div = document.createElement("div");
|
||||
div.style.setProperty(template.varToSet, template.setValue);
|
||||
document.body.appendChild(div);
|
||||
let computedStyle = window.getComputedStyle(div);
|
||||
let value = computedStyle.getPropertyValue(template.varNameForRetrieval);
|
||||
assert_equals(value, template.expectedValue, "Expected Value should match actual value");
|
||||
document.body.removeChild(div);
|
||||
}, template.testName);
|
||||
});
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user