https://bugs.webkit.org/show_bug.cgi?id=80322
[WebKit-https.git] / LayoutTests / fast / css / script-tests / image-set-parsing.js
1 description("Test the parsing of the -webkit-image-set function.");
2
3 function jsWrapperClass(node)
4 {
5     if (!node)
6         return "[null]";
7     var string = Object.prototype.toString.apply(node);
8     return string.substr(8, string.length - 9);
9 }
10
11 function shouldBeType(expression, className, prototypeName, constructorName)
12 {
13     if (!prototypeName)
14         prototypeName = className + "Prototype";
15     if (!constructorName)
16         constructorName = className + "Constructor";
17     shouldBe("jsWrapperClass(" + expression + ")", "'" + className + "'");
18     shouldBe("jsWrapperClass(" + expression + ".__proto__)", "'" + prototypeName + "'");
19     shouldBe("jsWrapperClass(" + expression + ".constructor)", "'" + constructorName + "'");
20 }
21
22 // These have to be global for the test helpers to see them.
23 var imageSetRule, subRule;
24
25 function testImageSetRule(description, property, rule, expectedLength, expectedTexts)
26 {
27     debug("");
28     debug(description + " : " + rule);
29
30     var div = document.createElement("div");
31     div.setAttribute("style", property + ": -webkit-image-set(" + rule + ")");
32     document.body.appendChild(div);
33
34     imageSetRule = div.style.getPropertyCSSValue(property);
35     shouldBeType("imageSetRule", "CSSValueList");
36
37     if (imageSetRule) {
38         if (jsWrapperClass(imageSetRule[0]) == "CSSValueList") {
39             // The content property returns a CSSValueList anyway, so to get to the 
40             // imageSet CSS value list, we have to look at the first entry in the 
41             // content value list.
42             imageSetRule = imageSetRule[0];
43         }
44     }
45
46     shouldBe("imageSetRule.length", "" + expectedLength); // shouldBe expects string arguments
47
48     if (imageSetRule) {
49         for (var i = 0; i < expectedLength; i++) {
50             string = imageSetRule[i];
51             if (i % 2 == 0) {
52                 subRule = string.cssText.split('#')[1];
53                 subRule = subRule.split(')')[0];
54                 shouldBe("subRule", "'" + expectedTexts[i] + "'");
55             } else {
56                 subRule = string;
57                 shouldBe("subRule.cssText", "'" + expectedTexts[i] + "'");
58             }
59         }
60     }
61
62     document.body.removeChild(div);
63 }
64
65 testImageSetRule("Single value for background-image",
66                 "background-image",
67                 "url('#a') 1x", 2,
68                 ["a", "1"]);
69
70 testImageSetRule("Multiple values for background-image",
71                 "background-image",
72                 "url('#a') 1x, url('#b') 2x", 4,
73                 ["a", "1", "b", "2"]);
74
75 testImageSetRule("Multiple values for background-image, out of order",
76                 "background-image",
77                 "url('#c') 3x, url('#b') 2x, url('#a') 1x", 6,
78                 ["c", "3", "b", "2", "a", "1"]);
79
80 testImageSetRule("Single value for content",
81                 "content",
82                 "url('#a') 1x", 2,
83                 ["a", "1"]);
84
85 testImageSetRule("Multiple values for content",
86                 "content",
87                 "url('#a') 1x, url('#b') 2x", 4,
88                 ["a", "1", "b", "2"]);
89
90 testImageSetRule("Single value for border-image",
91                 "-webkit-border-image",
92                 "url('#a') 1x", 2,
93                 ["a", "1"]);
94
95 testImageSetRule("Multiple values for border-image",
96                 "-webkit-border-image",
97                 "url('#a') 1x, url('#b') 2x", 4,
98                 ["a", "1", "b", "2"]);
99
100 testImageSetRule("Single value for -webkit-mask-box-image",
101                 "-webkit-mask-box-image",
102                 "url('#a') 1x", 2,
103                 ["a", "1"]);
104
105 testImageSetRule("Multiple values for -webkit-mask-box-image",
106                 "-webkit-mask-box-image",
107                 "url('#a') 1x, url('#b') 2x", 4,
108                 ["a", "1", "b", "2"]);
109
110 successfullyParsed = true;