blob: c7b8f289503c7a2622df4ca399e435169f580d54 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>
description("Test the parsing of the -webkit-image-set function.");
function jsWrapperClass(node)
{
if (!node)
return "[null]";
var string = Object.prototype.toString.apply(node);
return string.substr(8, string.length - 9);
}
function shouldBeType(expression, className)
{
shouldBe("jsWrapperClass(" + expression + ")", "'" + className + "'");
shouldBe("jsWrapperClass(" + expression + ".__proto__)", "'" + className + "'");
shouldBe("jsWrapperClass(" + expression + ".constructor)", "'Function'");
}
// These have to be global for the test helpers to see them.
var imageSetRule, subRule;
function testImageSetRule(description, property, rule, expectedLength, expectedTexts, propName = "-webkit-image-set")
{
debug("");
debug(description + " : " + rule);
var div = document.createElement("div");
div.setAttribute("style", property + ": " + propName + "(" + rule + ")");
document.body.appendChild(div);
imageSetRule = div.style.getPropertyCSSValue(property);
shouldBeType("imageSetRule", "CSSValueList");
if (imageSetRule) {
if (jsWrapperClass(imageSetRule[0]) == "CSSValueList") {
// The content property returns a CSSValueList anyway, so to get to the
// imageSet CSS value list, we have to look at the first entry in the
// content value list.
imageSetRule = imageSetRule[0];
}
}
shouldBe("imageSetRule.length", function() { return expectedLength; });
if (imageSetRule) {
for (var i = 0; i < expectedLength; i++) {
string = imageSetRule[i];
if (i % 2 == 0) {
subRule = string.cssText.split('#')[1].replace('"', "");
subRule = subRule.split(')')[0];
shouldBe("subRule", "'" + expectedTexts[i] + "'");
} else {
subRule = string;
shouldBe("subRule.cssText", "'" + expectedTexts[i] + "'");
}
}
}
document.body.removeChild(div);
}
testImageSetRule("Single value for background-image",
"background-image",
"url('#a') 1x", 2,
["a", "1x"]);
testImageSetRule("Multiple values for background-image",
"background-image",
"url('#a') 1x, url('#b') 2x", 4,
["a", "1x", "b", "2x"]);
testImageSetRule("Single value for background-image without url() function",
"background-image",
"'#a' 1x", 2,
["a", "1x"], "image-set");
testImageSetRule("Multiple values for background-image without url() function",
"background-image",
"'#a' 1x, '#b' 2x", 4,
["a", "1x", "b", "2x"], "image-set");
testImageSetRule("Mix values with and without url() function",
"background-image",
"'#a' 1x, url('#b') 2x", 4,
["a", "1x", "b", "2x"], "image-set");
testImageSetRule("Multiple values for background-image, out of order",
"background-image",
"url('#c') 3x, url('#b') 2x, url('#a') 1x", 6,
["c", "3x", "b", "2x", "a", "1x"]);
testImageSetRule("Single value for content",
"content",
"url('#a') 1x", 2,
["a", "1x"]);
testImageSetRule("Multiple values for content",
"content",
"url('#a') 1x, url('#b') 2x", 4,
["a", "1x", "b", "2x"]);
testImageSetRule("Single value for border-image",
"-webkit-border-image",
"url('#a') 1x", 2,
["a", "1x"]);
testImageSetRule("Multiple values for border-image",
"-webkit-border-image",
"url('#a') 1x, url('#b') 2x", 4,
["a", "1x", "b", "2x"]);
testImageSetRule("Single value for -webkit-mask-box-image",
"-webkit-mask-box-image",
"url('#a') 1x", 2,
["a", "1x"]);
testImageSetRule("Multiple values for -webkit-mask-box-image",
"-webkit-mask-box-image",
"url('#a') 1x, url('#b') 2x", 4,
["a", "1x", "b", "2x"]);
testImageSetRule("Single value with dppx",
"background-image",
"url('#a') 1dppx", 2,
["a", "1dppx"]);
testImageSetRule("Single value with dpi",
"background-image",
"url('#a') 192dpi", 2,
["a", "192dpi"]);
testImageSetRule("Single value with dpcm",
"background-image",
"url('#a') 102dpcm", 2,
["a", "102dpcm"]);
testImageSetRule("Multiple values with dpi, dppx and x",
"background-image",
"url('#a') 1x, url('#b') 2dppx, url('#c') 250dpi", 6,
["a", "1x", "b", "2dppx", "c", "250dpi"]);
successfullyParsed = true;
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>