blob: 9fa5b919503eb29461b6c2fc4f758fd002bda462 [file] [log] [blame]
<!DOCTYPE html>
<html>
<style>
* { font-size: 16px; }
div { font-size: 8px; }
</style>
<body>
<script src="../../resources/js-test-pre.js"></script>
<script>
description('Test parsing and computation of CSS image filter() function.');
function computedStyle(property, value) {
var div = document.createElement("div");
document.body.appendChild(div);
div.style.setProperty(property, value);
var computedValue = getComputedStyle(div).getPropertyValue(property);
document.body.removeChild(div);
return computedValue;
}
function innerStyle(property, value) {
var div = document.createElement("div");
div.style.setProperty(property, value);
return div.style.getPropertyValue(property);
}
function testComputed(property, value, expected) {
shouldBeEqualToString('computedStyle("' + property + '", "' + value + '")', expected);
}
function testInner(property, value, expected) {
if (expected === null)
shouldBeNull('innerStyle("' + property + '", "' + value + '")');
else
shouldBeEqualToString('innerStyle("' + property + '", "' + value + '")', expected);
}
function negativeTest(property, value) {
testInner(property, value, null);
// FIXME: Computed style not yet implemented.
testComputed(property, value, 'none');
}
// Test different filter combination.
testInner(
"background-image",
"-webkit-filter(none, blur(3px))",
"-webkit-filter(none, blur(3px))");
testInner(
"background-image",
"-webkit-filter(none, url('#a'))",
"-webkit-filter(none, url('#a'))");
testInner(
"background-image",
"-webkit-filter(none, url(#a))",
"-webkit-filter(none, url('#a'))");
testInner(
"background-image",
"-webkit-filter(none, url('#a') url('#b'))",
"-webkit-filter(none, url('#a') url('#b'))");
testInner(
"background-image",
"-webkit-filter(none, grayscale(1) url('#a'))",
"-webkit-filter(none, grayscale(1) url('#a'))");
testInner(
"background-image",
"-webkit-filter(none, grayscale(1))",
"-webkit-filter(none, grayscale(1))");
testInner(
"background-image",
"-webkit-filter(none, grayscale(50%))",
"-webkit-filter(none, grayscale(50%))");
testInner(
"background-image",
"-webkit-filter(none, grayscale(1.0))",
"-webkit-filter(none, grayscale(1))");
testInner(
"background-image",
"-webkit-filter(none, grayscale(0))",
"-webkit-filter(none, grayscale(0))");
testInner(
"background-image",
"-webkit-filter(none, grayscale(0.5) grayscale(0.25))",
"-webkit-filter(none, grayscale(0.5) grayscale(0.25))");
testInner(
"background-image",
"-webkit-filter(none, sepia(1))",
"-webkit-filter(none, sepia(1))");
testInner(
"background-image",
"-webkit-filter(none, sepia(50%))",
"-webkit-filter(none, sepia(50%))");
testInner(
"background-image",
"-webkit-filter(none, sepia(1.0))",
"-webkit-filter(none, sepia(1))");
testInner(
"background-image",
"-webkit-filter(none, sepia(0))",
"-webkit-filter(none, sepia(0))");
testInner(
"background-image",
"-webkit-filter(none, sepia(0.5) sepia(0.25))",
"-webkit-filter(none, sepia(0.5) sepia(0.25))");
testInner(
"background-image",
"-webkit-filter(none, sepia(0.5) grayscale(0.25))",
"-webkit-filter(none, sepia(0.5) grayscale(0.25))");
testInner(
"background-image",
"-webkit-filter(none, saturate(1))",
"-webkit-filter(none, saturate(1))");
testInner(
"background-image",
"-webkit-filter(none, saturate(50%))",
"-webkit-filter(none, saturate(50%))");
testInner(
"background-image",
"-webkit-filter(none, saturate(250%))",
"-webkit-filter(none, saturate(250%))");
testInner(
"background-image",
"-webkit-filter(none, saturate(1.0))",
"-webkit-filter(none, saturate(1))");
testInner(
"background-image",
"-webkit-filter(none, saturate(5.5))",
"-webkit-filter(none, saturate(5.5))");
testInner(
"background-image",
"-webkit-filter(none, saturate(0))",
"-webkit-filter(none, saturate(0))");
testInner(
"background-image",
"-webkit-filter(none, saturate(0.5) saturate(0.25))",
"-webkit-filter(none, saturate(0.5) saturate(0.25))");
testInner(
"background-image",
"-webkit-filter(none, saturate(0.5) grayscale(0.25))",
"-webkit-filter(none, saturate(0.5) grayscale(0.25))");
testInner(
"background-image",
"-webkit-filter(none, hue-rotate(10deg))",
"-webkit-filter(none, hue-rotate(10deg))");
testInner(
"background-image",
"-webkit-filter(none, hue-rotate(10.0deg))",
"-webkit-filter(none, hue-rotate(10deg))");
testInner(
"background-image",
"-webkit-filter(none, hue-rotate(10rad))",
"-webkit-filter(none, hue-rotate(10rad))");
testInner(
"background-image",
"-webkit-filter(none, hue-rotate(10grad))",
"-webkit-filter(none, hue-rotate(10grad))");
testInner(
"background-image",
"-webkit-filter(none, hue-rotate(0.5turn))",
"-webkit-filter(none, hue-rotate(0.5turn))");
testInner(
"background-image",
"-webkit-filter(none, hue-rotate(0))",
"-webkit-filter(none, hue-rotate(0deg))");
testInner(
"background-image",
"-webkit-filter(none, hue-rotate(10deg) grayscale(0.25))",
"-webkit-filter(none, hue-rotate(10deg) grayscale(0.25))");
testInner(
"background-image",
"-webkit-filter(none, invert(1))",
"-webkit-filter(none, invert(1))");
testInner(
"background-image",
"-webkit-filter(none, invert(50%))",
"-webkit-filter(none, invert(50%))");
testInner(
"background-image",
"-webkit-filter(none, invert(1.0))",
"-webkit-filter(none, invert(1))");
testInner(
"background-image",
"-webkit-filter(none, invert(0))",
"-webkit-filter(none, invert(0))");
testInner(
"background-image",
"-webkit-filter(none, invert(0.5) invert(0.25))",
"-webkit-filter(none, invert(0.5) invert(0.25))");
testInner(
"background-image",
"-webkit-filter(none, invert(0.5) grayscale(0.25))",
"-webkit-filter(none, invert(0.5) grayscale(0.25))");
testInner(
"background-image",
"-webkit-filter(none, opacity(1))",
"-webkit-filter(none, opacity(1))");
testInner(
"background-image",
"-webkit-filter(none, opacity(50%))",
"-webkit-filter(none, opacity(50%))");
testInner(
"background-image",
"-webkit-filter(none, opacity(1.0))",
"-webkit-filter(none, opacity(1))");
testInner(
"background-image",
"-webkit-filter(none, opacity(0))",
"-webkit-filter(none, opacity(0))");
testInner(
"background-image",
"-webkit-filter(none, opacity(0.5) opacity(0.25))",
"-webkit-filter(none, opacity(0.5) opacity(0.25))");
testInner(
"background-image",
"-webkit-filter(none, opacity(0.5) grayscale(0.25))",
"-webkit-filter(none, opacity(0.5) grayscale(0.25))");
testInner(
"background-image",
"-webkit-filter(none, brightness(1))",
"-webkit-filter(none, brightness(1))");
testInner(
"background-image",
"-webkit-filter(none, brightness(50%))",
"-webkit-filter(none, brightness(50%))");
testInner(
"background-image",
"-webkit-filter(none, brightness(1.0))",
"-webkit-filter(none, brightness(1))");
testInner(
"background-image",
"-webkit-filter(none, brightness(0))",
"-webkit-filter(none, brightness(0))");
testInner(
"background-image",
"-webkit-filter(none, brightness(0.5) brightness(0.25))",
"-webkit-filter(none, brightness(0.5) brightness(0.25))");
testInner(
"background-image",
"-webkit-filter(none, brightness(0.5) grayscale(0.25))",
"-webkit-filter(none, brightness(0.5) grayscale(0.25))");
testInner(
"background-image",
"-webkit-filter(none, brightness(-1.1))",
"-webkit-filter(none, brightness(-1.1))");
testInner(
"background-image",
"-webkit-filter(none, brightness(101%))",
"-webkit-filter(none, brightness(101%))");
testInner(
"background-image",
"-webkit-filter(none, grayscale(0.25) brightness(0.5))",
"-webkit-filter(none, grayscale(0.25) brightness(0.5))");
testInner(
"background-image",
"-webkit-filter(none, contrast(1))",
"-webkit-filter(none, contrast(1))");
testInner(
"background-image",
"-webkit-filter(none, contrast(50%))",
"-webkit-filter(none, contrast(50%))");
testInner(
"background-image",
"-webkit-filter(none, contrast(250%))",
"-webkit-filter(none, contrast(250%))");
testInner(
"background-image",
"-webkit-filter(none, contrast(1.0))",
"-webkit-filter(none, contrast(1))");
testInner(
"background-image",
"-webkit-filter(none, contrast(0))",
"-webkit-filter(none, contrast(0))");
testInner(
"background-image",
"-webkit-filter(none, contrast(2))",
"-webkit-filter(none, contrast(2))");
testInner(
"background-image",
"-webkit-filter(none, contrast(0.5) contrast(0.25))",
"-webkit-filter(none, contrast(0.5) contrast(0.25))");
testInner(
"background-image",
"-webkit-filter(none, contrast(0.5) grayscale(0.25))",
"-webkit-filter(none, contrast(0.5) grayscale(0.25))");
testInner(
"background-image",
"-webkit-filter(none, grayscale(0.25) contrast(0.5))",
"-webkit-filter(none, grayscale(0.25) contrast(0.5))");
testInner(
"background-image",
"-webkit-filter(none, blur(0))",
"-webkit-filter(none, blur(0px))");
testInner(
"background-image",
"-webkit-filter(none, blur(10px))",
"-webkit-filter(none, blur(10px))");
testInner(
"background-image",
"-webkit-filter(none, drop-shadow(red 1px 2px 3px))",
"-webkit-filter(none, drop-shadow(red 1px 2px 3px))");
testInner(
"background-image",
"-webkit-filter(none, drop-shadow(1px 2px 3px red))",
"-webkit-filter(none, drop-shadow(red 1px 2px 3px))");
testInner(
"background-image",
"-webkit-filter(none, drop-shadow(#abc 0 0 0))",
"-webkit-filter(none, drop-shadow(rgb(170, 187, 204) 0px 0px 0px))");
testInner(
"background-image",
"-webkit-filter(none, drop-shadow(0 0 0))",
"-webkit-filter(none, drop-shadow(0px 0px 0px))");
testInner(
"background-image",
"-webkit-filter(none, drop-shadow(1px 2px))",
"-webkit-filter(none, drop-shadow(1px 2px))");
testInner(
"background-image",
"-webkit-filter(none, grayscale(0.5) sepia(0.25) saturate(0.75) hue-rotate(35deg) invert(0.2) opacity(0.9) blur(5px) drop-shadow(green 1px 2px 3px))",
"-webkit-filter(none, grayscale(0.5) sepia(0.25) saturate(0.75) hue-rotate(35deg) invert(0.2) opacity(0.9) blur(5px) drop-shadow(green 1px 2px 3px))");
// Test different CSS Image values.
testInner(
"background-image",
"-webkit-filter(radial-gradient(ellipse closest-corner, white, black), hue-rotate(90deg))",
"-webkit-filter(radial-gradient(closest-corner, white, black), hue-rotate(90deg))");
testInner(
"background-image",
"-webkit-filter(radial-gradient(circle closest-side at 50px 50%, white, black), hue-rotate(90deg))",
"-webkit-filter(radial-gradient(circle closest-side at 50px 50%, white, black), hue-rotate(90deg))");
testInner(
"background-image",
"-webkit-filter(radial-gradient(ellipse closest-corner at 20px 50px, white, black), hue-rotate(90deg))",
"-webkit-filter(radial-gradient(closest-corner at 20px 50px, white, black), hue-rotate(90deg))");
testInner(
"background-image",
"-webkit-filter(linear-gradient(white, black), hue-rotate(90deg))",
"-webkit-filter(linear-gradient(white, black), hue-rotate(90deg))");
testInner(
"background-image",
"-webkit-filter(linear-gradient(to top left, white, black), hue-rotate(90deg))",
"-webkit-filter(linear-gradient(to left top, white, black), hue-rotate(90deg))");
testInner(
"background-image",
"-webkit-filter(linear-gradient(0deg, white -20%, blue, black 120%), hue-rotate(90deg))",
"-webkit-filter(linear-gradient(0deg, white -20%, blue, black 120%), hue-rotate(90deg))");
testInner(
"background-image",
"-webkit-filter(-webkit-cross-fade(url(http://image1.png), url(http://image2.png), 50%), contrast(0.5))",
"-webkit-filter(-webkit-cross-fade(url(http://image1.png/), url(http://image2.png/), 0.5), contrast(0.5))");
testInner(
"background-image",
"-webkit-filter(url(http://image1.png), brightness(50%))",
"-webkit-filter(url(http://image1.png/), brightness(50%))");
testInner(
"background-image",
"-webkit-filter('http://image1.png', brightness(50%))",
"-webkit-filter(url(http://image1.png/), brightness(50%))");
// Test different properties, taking CSS Image values.
testInner(
"border-image-source",
"-webkit-filter(url(http://image1.png), invert(50%))",
"-webkit-filter(url(http://image1.png/), invert(50%))");
testInner(
"-webkit-mask-image",
"-webkit-filter(url(http://image1.png), invert(50%))",
"-webkit-filter(url(http://image1.png/), invert(50%))");
testInner(
"-webkit-mask-box-image-source",
"-webkit-filter(url(http://image1.png), invert(50%))",
"-webkit-filter(url(http://image1.png/), invert(50%))");
testInner(
"content",
"-webkit-filter(url(http://image1.png), invert(50%))",
"-webkit-filter(url(http://image1.png/), invert(50%))");
// negative tests
negativeTest("background-image", "-webkit-filter()");
negativeTest("background-image", "-webkit-filter(url(image1.png))");
negativeTest("background-image", "-webkit-filter(url(image1.png), )");
negativeTest("background-image", "-webkit-filter(url(image1.png) brightness(50%))");
negativeTest("background-image", "-webkit-filter(brightness(50%) url(image1.png))");
negativeTest("background-image", "-webkit-filter(brightness(50%), url(image1.png))");
negativeTest("background-image", "-webkit-filter(url(image1.png) url(#filter))");
negativeTest("background-image", "-webkit-filter(brightness(50%))");
negativeTest("background-image", "-webkit-filter(brightness(50%), )");
negativeTest("background-image", "-webkit-filter(url(image1.png), brightness(50%), brightness(50%))");
negativeTest("background-image", "-webkit-filter(url(image1.png) url(image2.png), brightness(50%))");
negativeTest("background-image", "-webkit-filter(url(image1.png), url(image2.png), brightness(50%))");
negativeTest("background-image", "-webkit-filter(invalidToken.png, blur(3px))");
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>