blob: a8baa63a6765a4c6052752eb638156f0688b12f2 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<title>Color-stops parsing</title>
<link rel="author" title="Florin Malita" href="mailto:fmalita@chromium.org">
<link rel="help" href="http://www.w3.org/TR/css-images-4/#color-stop-syntax">
<meta name="assert" content="General color stop parsing (applicable to all gradients) follows CSS Images 4 rules.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<script>
var tests = [
// invalid stops
{ stops: "" , parse: false },
{ stops: "black" , parse: false },
{ stops: "black 0%" , parse: false },
{ stops: "black, 25%" , parse: false },
{ stops: "black, invalid" , parse: false },
{ stops: "black, , white" , parse: false },
{ stops: "black, white, 75%" , parse: false },
{ stops: "black, 25% 50%, white" , parse: false },
{ stops: "black, 25%, 50%, white" , parse: false },
{ stops: "black 10% 25% 50%, white", parse: false },
{ stops: ",black, white" , parse: false },
{ stops: "0%, black, white" , parse: false },
// basic stops
{ stops: "black, white" , parse: true },
{ stops: "black 0, white" , parse: true },
{ stops: "black 0%, white" , parse: true },
{ stops: "black 0%, white 100%" , parse: true },
{ stops: "black, green, white" , parse: true },
{ stops: "black 0%, green 50%, white 100%" , parse: true },
{ stops: "black 50%, green 10%, white 100%", parse: true },
// interpolation hints
{ stops: "black, 25%, white" , parse: true },
{ stops: "black 0%, 25%, white 100%" , parse: true },
{ stops: "black 0%, 15%, green 50%, 60%, white 100%", parse: true },
// dual-positioning
{ stops: "black 0% 50%, white" , parse: true },
{ stops: "black 0% 50%, white 50% 100%" , parse: true },
{ stops: "black 0% 50%, green 25% 75%, white 50% 100%", parse: true },
// kitchen sink
{ stops: "black 0% calc(100% / 5), 25%, green 30% 60%, calc(100% * 3 / 4), white calc(100% - 20%) 100%", parse: true },
];
function check_gradient(gradient, stops, shouldParse) {
var div = document.createElement('div');
div.setAttribute("style", "background-image: " + gradient + "(" + stops + ")");
var inline_style = div.style.getPropertyValue("background-image");
assert_equals(inline_style.startsWith(gradient), shouldParse);
document.body.appendChild(div);
var computed_style = getComputedStyle(div).getPropertyValue("background-image");
assert_equals(computed_style.startsWith(gradient), shouldParse);
div.remove();
}
[ "linear-gradient",
"repeating-linear-gradient",
"radial-gradient",
"repeating-radial-gradient",
"conic-gradient",
"repeating-conic-gradient"
].forEach(function(gradient) {
tests.forEach(function(tst) {
test(function() {
check_gradient(gradient, tst.stops, tst.parse);
}, gradient + "(" + tst.stops + ") " + (tst.parse ? "[ parsable ]" : "[ unparsable ]"));
});
});
</script>
</body>
</html>