OLD | NEW |
| (Empty) |
1 description("This test checks the SVGPaint API"); | |
2 | |
3 // Setup a real SVG document, as we want to access CSS style information. | |
4 var svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg"); | |
5 svgElement.setAttribute("width", "150"); | |
6 svgElement.setAttribute("height", "50"); | |
7 | |
8 var rectElement = document.createElementNS("http://www.w3.org/2000/svg", "rect")
; | |
9 rectElement.setAttribute("style", "color: lime; fill: green"); | |
10 rectElement.setAttribute("width", "150"); | |
11 rectElement.setAttribute("height", "50"); | |
12 svgElement.appendChild(rectElement); | |
13 document.getElementById("description").appendChild(svgElement); | |
14 | |
15 // FIXME: Most tests that examine the computed style after modifying the SVGPain
t object fail, as we don't support | |
16 // invalidation of the style, if a CSSValue changes, it's also dangerous, as the
CSSValues are possibly shared. | |
17 // We would need copy-on-write support for CSSValue first, to make this work. It
's low priority though. | |
18 // No-one supports modifying the SVGPaint object. | |
19 | |
20 function resetStyle() { | |
21 debug(""); | |
22 debug("Reset style to initial value"); | |
23 rectElement.setAttribute("style", "color: lime; fill: green"); | |
24 shouldBeEqualToString("(fillPaint = rectElement.style.getPropertyCSSValue('f
ill')).toString()", "[object SVGPaint]"); | |
25 shouldBe("fillPaint.paintType", "SVGPaint.SVG_PAINTTYPE_RGBCOLOR"); | |
26 shouldBeEqualToString("rectElement.style.fill", "#008000"); | |
27 shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement).fi
ll", "#008000"); | |
28 } | |
29 | |
30 function checkFillColor(type, red, green, blue) { | |
31 shouldBe("fillPaint.colorType", type); | |
32 shouldBeEqualToString("(fillColor = fillPaint.rgbColor).toString()", "[objec
t RGBColor]"); | |
33 shouldBe("fillColor.red.getFloatValue(CSSPrimitiveValue.CSS_NUMBER)", "" + r
ed); | |
34 shouldBe("fillColor.green.getFloatValue(CSSPrimitiveValue.CSS_NUMBER)", "" +
green); | |
35 shouldBe("fillColor.blue.getFloatValue(CSSPrimitiveValue.CSS_NUMBER)", "" +
blue); | |
36 } | |
37 | |
38 debug(""); | |
39 debug("Check initial paint values"); | |
40 shouldBeEqualToString("(fillPaint = rectElement.style.getPropertyCSSValue('fill'
)).toString()", "[object SVGPaint]"); | |
41 shouldBe("fillPaint.paintType", "SVGPaint.SVG_PAINTTYPE_RGBCOLOR"); | |
42 shouldBeEqualToString("fillPaint.uri", ""); | |
43 checkFillColor("SVGColor.SVG_COLORTYPE_RGBCOLOR", 0, 128, 0); | |
44 shouldBeEqualToString("rectElement.style.fill", "#008000"); | |
45 shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement).fill",
"#008000"); | |
46 | |
47 debug(""); | |
48 debug("Try invalid arguments for setPaint()"); | |
49 shouldThrow("fillPaint.setPaint(null, null, null, null)"); | |
50 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_RGBCOLOR, svgElement, '',
'');"); | |
51 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_RGBCOLOR, '', '')"); | |
52 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR + 1, ''
, '', '');"); | |
53 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_NONE - 1, '', '', '');"); | |
54 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_URI + 1, '', '', '');"); | |
55 shouldThrow("fillPaint.setPaint()"); | |
56 shouldThrow("fillPaint.setPaint(fillPaint)"); | |
57 | |
58 debug(""); | |
59 debug("Try invalid arguments for setUri()"); | |
60 shouldThrow("fillPaint.setUri()"); | |
61 | |
62 debug(""); | |
63 debug("Try assigning to the readonly paintType property, which silently fails"); | |
64 shouldBeUndefined("fillPaint.paintType = SVGPaint.SVG_PAINTTYPE_UNKKNOWN;"); | |
65 shouldBe("fillPaint.paintType", "SVGPaint.SVG_PAINTTYPE_RGBCOLOR"); | |
66 shouldBeEqualToString("rectElement.style.fill", "#008000"); | |
67 shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement).fill",
"#008000"); | |
68 | |
69 debug(""); | |
70 debug("Test using setPaint() and SVG_PAINTTYPE_UNKNOWN"); | |
71 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_UNKKNOWN, '', '', '')"); | |
72 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_UNKKNOWN, 'url(#foo)', ''
, '')"); | |
73 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_UNKKNOWN, '', 'rgb(0,128,
128)', '')"); | |
74 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_UNKKNOWN, '', '', 'icc-co
lor(myRGB, 0, 1, 2)')"); | |
75 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_UNKKNOWN, 'url(#foo)', 'r
gb(0,0,0)', 'icc-color(myRGB, 0, 1, 2)')"); | |
76 | |
77 debug(""); | |
78 debug("Test using setPaint() and SVG_PAINTTYPE_NONE - a"); | |
79 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_NONE, '', '', '')"); | |
80 shouldBe("fillPaint.paintType", "SVGPaint.SVG_PAINTTYPE_RGBCOLOR"); | |
81 shouldBeEqualToString("rectElement.style.fill", "#008000"); | |
82 shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement).fill",
"#008000"); | |
83 resetStyle(); | |
84 | |
85 debug(""); | |
86 debug("Test using setPaint() and SVG_PAINTTYPE_NONE - b"); | |
87 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_NONE, 'url(#foo)', '', ''
)"); | |
88 shouldBe("fillPaint.paintType", "SVGPaint.SVG_PAINTTYPE_RGBCOLOR"); | |
89 shouldBeEqualToString("rectElement.style.fill", "#008000"); | |
90 shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement).fill",
"#008000"); | |
91 resetStyle(); | |
92 | |
93 debug(""); | |
94 debug("Test using setPaint() and SVG_PAINTTYPE_NONE - c"); | |
95 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_NONE, '', 'rgb(0,128,128)
', '')"); | |
96 shouldBe("fillPaint.paintType", "SVGPaint.SVG_PAINTTYPE_RGBCOLOR"); | |
97 shouldBeEqualToString("rectElement.style.fill", "#008000"); | |
98 shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement).fill",
"#008000"); | |
99 resetStyle(); | |
100 | |
101 debug(""); | |
102 debug("Test using setPaint() and SVG_PAINTTYPE_NONE - d"); | |
103 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_NONE, '', '', 'icc-color(
myRGB, 0, 1, 2)')"); | |
104 shouldBe("fillPaint.paintType", "SVGPaint.SVG_PAINTTYPE_RGBCOLOR"); | |
105 shouldBeEqualToString("rectElement.style.fill", "#008000"); | |
106 shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement).fill",
"#008000"); | |
107 resetStyle(); | |
108 | |
109 debug(""); | |
110 debug("Test using setPaint() and SVG_PAINTTYPE_NONE - e"); | |
111 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_NONE, 'url(#foo)', 'rgb(0
,0,0)', 'icc-color(myRGB, 0, 1, 2)')"); | |
112 shouldBeEqualToString("rectElement.style.fill", "#008000"); | |
113 shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement).fill",
"#008000"); | |
114 | |
115 debug(""); | |
116 debug("Test using setPaint() and SVG_PAINTTYPE_URI - a"); | |
117 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_URI, '', '', '')"); | |
118 shouldBe("fillPaint.paintType", "SVGPaint.SVG_PAINTTYPE_RGBCOLOR"); | |
119 shouldBeEqualToString("rectElement.style.fill", "#008000"); | |
120 shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement).fill",
"#008000"); | |
121 | |
122 debug(""); | |
123 debug("Test using setPaint() and SVG_PAINTTYPE_URI - b"); | |
124 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_URI, '', 'rgb(0,128,128)'
, '')"); | |
125 shouldBe("fillPaint.paintType", "SVGPaint.SVG_PAINTTYPE_RGBCOLOR"); | |
126 shouldBeEqualToString("rectElement.style.fill", "#008000"); | |
127 shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement).fill",
"#008000"); | |
128 | |
129 debug(""); | |
130 debug("Test using setPaint() and SVG_PAINTTYPE_URI - c"); | |
131 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_URI, '', '', 'icc-color(m
yRGB, 0, 1, 2)')"); | |
132 shouldBe("fillPaint.paintType", "SVGPaint.SVG_PAINTTYPE_RGBCOLOR"); | |
133 shouldBeEqualToString("rectElement.style.fill", "#008000"); | |
134 shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement).fill",
"#008000"); | |
135 | |
136 debug(""); | |
137 debug("Test using setPaint() and SVG_PAINTTYPE_URI - d"); | |
138 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_URI, 'url(#test)', '', ''
)"); | |
139 shouldBe("fillPaint.paintType", "SVGPaint.SVG_PAINTTYPE_RGBCOLOR"); | |
140 shouldBeEqualToString("fillPaint.uri", ""); | |
141 checkFillColor("SVGColor.SVG_COLORTYPE_RGBCOLOR", 0, 128, 0); | |
142 shouldBeEqualToString("rectElement.style.fill", "#008000"); | |
143 shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement).fill",
"#008000"); | |
144 resetStyle(); | |
145 | |
146 debug(""); | |
147 debug("Test using setPaint() and SVG_PAINTTYPE_URI - e"); | |
148 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_URI, 'url(#foo)', 'rgb(0,
0,0)', 'icc-color(myRGB, 0, 1, 2)')"); | |
149 shouldBe("fillPaint.paintType", "SVGPaint.SVG_PAINTTYPE_RGBCOLOR"); | |
150 shouldBeEqualToString("fillPaint.uri", ""); | |
151 checkFillColor("SVGColor.SVG_COLORTYPE_RGBCOLOR", 0, 128, 0); | |
152 shouldBeEqualToString("rectElement.style.fill", "#008000"); | |
153 shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement).fill",
"#008000"); | |
154 | |
155 debug(""); | |
156 debug("Test using setPaint() and SVG_PAINTTYPE_URI_NONE"); | |
157 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_URI_NONE, 'url(#test)', '
rgb(0,0,0)', 'icc-color(myRGB, 0, 1, 2)')"); | |
158 shouldBe("fillPaint.paintType", "SVGPaint.SVG_PAINTTYPE_RGBCOLOR"); | |
159 shouldBeEqualToString("fillPaint.uri", ""); | |
160 checkFillColor("SVGColor.SVG_COLORTYPE_RGBCOLOR", 0, 128, 0); | |
161 shouldBeEqualToString("rectElement.style.fill", "#008000"); | |
162 shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement).fill",
"#008000"); | |
163 | |
164 debug(""); | |
165 debug("Test using setPaint() and SVG_PAINTTYPE_URI_CURRENTCOLOR"); | |
166 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_URI_CURRENTCOLOR, 'url(#f
oo)', 'rgb(0,0,0)', 'icc-color(myRGB, 0, 1, 2)')"); | |
167 shouldBe("fillPaint.paintType", "SVGPaint.SVG_PAINTTYPE_RGBCOLOR"); | |
168 shouldBeEqualToString("fillPaint.uri", ""); | |
169 checkFillColor("SVGColor.SVG_COLORTYPE_RGBCOLOR", 0, 128, 0); | |
170 shouldBeEqualToString("rectElement.style.fill", "#008000"); | |
171 shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement).fill",
"#008000"); | |
172 | |
173 debug(""); | |
174 debug("Test using setPaint() and SVG_PAINTTYPE_URI_RGBCOLOR"); | |
175 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_URI_RGBCOLOR, 'url(#test)
', 'rgb(77,0,77)', 'icc-color(myRGB, 0, 1, 2)')"); | |
176 shouldBe("fillPaint.paintType", "SVGPaint.SVG_PAINTTYPE_RGBCOLOR"); | |
177 shouldBeEqualToString("fillPaint.uri", ""); | |
178 checkFillColor("SVGColor.SVG_COLORTYPE_RGBCOLOR", 0, 128, 0); | |
179 shouldBeEqualToString("rectElement.style.fill", "#008000"); | |
180 shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement).fill",
"#008000"); | |
181 | |
182 debug(""); | |
183 debug("Test using setPaint() and SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR"); | |
184 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR, 'u
rl(#foo)', 'rgb(77,0,77)', 'icc-color(myRGB, 0, 1, 2)')"); | |
185 shouldBe("fillPaint.paintType", "SVGPaint.SVG_PAINTTYPE_RGBCOLOR"); | |
186 shouldBeEqualToString("fillPaint.uri", ""); | |
187 checkFillColor("SVGColor.SVG_COLORTYPE_RGBCOLOR", 0, 128, 0); | |
188 shouldBeEqualToString("rectElement.style.fill", "#008000"); | |
189 shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement).fill",
"#008000"); | |
190 | |
191 debug(""); | |
192 debug("Test using setPaint() and SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR"); | |
193 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR, 'url(#
test)', 'rgb(77,0,77)', 'icc-color(myRGB, 0, 1, 2)')"); | |
194 shouldBe("fillPaint.paintType", "SVGPaint.SVG_PAINTTYPE_RGBCOLOR"); | |
195 shouldBeEqualToString("fillPaint.uri", ""); | |
196 checkFillColor("SVGColor.SVG_COLORTYPE_RGBCOLOR", 0, 128, 0); | |
197 shouldBeEqualToString("rectElement.style.fill", "#008000"); | |
198 shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement).fill",
"#008000"); | |
199 | |
200 debug(""); | |
201 debug("Test using setPaint() and SVG_PAINTTYPE_CURRENTCOLOR"); | |
202 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_CURRENTCOLOR, 'url(#foo)'
, 'rgb(77,0,77)', 'icc-color(myRGB, 0, 1, 2)')"); | |
203 shouldBe("fillPaint.paintType", "SVGPaint.SVG_PAINTTYPE_RGBCOLOR"); | |
204 shouldBeEqualToString("fillPaint.uri", ""); | |
205 checkFillColor("SVGColor.SVG_COLORTYPE_RGBCOLOR", 0, 128, 0); | |
206 shouldBeEqualToString("rectElement.style.fill", "#008000"); | |
207 shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement).fill",
"#008000"); | |
208 | |
209 debug(""); | |
210 debug("Test using setPaint() and SVG_PAINTTYPE_RGBCOLOR"); | |
211 shouldThrow("fillPaint.setPaint(SVGPaint.SVG_PAINTTYPE_RGBCOLOR, 'url(#test)', '
rgb(0,77,0)', 'icc-color(myRGB, 0, 1, 2)')"); | |
212 shouldBe("fillPaint.paintType", "SVGPaint.SVG_PAINTTYPE_RGBCOLOR"); | |
213 shouldBeEqualToString("fillPaint.uri", ""); | |
214 checkFillColor("SVGColor.SVG_COLORTYPE_RGBCOLOR", 0, 128, 0); | |
215 shouldBeEqualToString("rectElement.style.fill", "#008000"); | |
216 shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement).fill",
"#008000"); | |
217 | |
218 debug(""); | |
219 debug("Test using setUri()"); | |
220 shouldBeUndefined("fillPaint.setUri('url(#foobar)');"); | |
221 shouldBe("fillPaint.paintType", "SVGPaint.SVG_PAINTTYPE_RGBCOLOR"); | |
222 shouldBeEqualToString("fillPaint.uri", ""); | |
223 checkFillColor("SVGColor.SVG_COLORTYPE_RGBCOLOR", 0, 128, 0); | |
224 shouldBeEqualToString("rectElement.style.fill", "#008000"); | |
225 shouldBeEqualToString("document.defaultView.getComputedStyle(rectElement).fill",
"#008000"); | |
226 | |
227 successfullyParsed = true; | |
OLD | NEW |