ReactOS  0.4.13-dev-1158-g658d5a3
style.c
Go to the documentation of this file.
1 /*
2  * Copyright 2007-2011 Jacek Caban for CodeWeavers
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18 
19 #include "precomp.h"
20 
21 static int strcmp_wa(LPCWSTR strw, const char *stra)
22 {
23  CHAR buf[512];
24  WideCharToMultiByte(CP_ACP, 0, strw, -1, buf, sizeof(buf), NULL, NULL);
25  return lstrcmpA(stra, buf);
26 }
27 
28 static BOOL wstr_contains(const WCHAR *strw, const char *stra)
29 {
30  CHAR buf[512];
31  WideCharToMultiByte(CP_ACP, 0, strw, -1, buf, sizeof(buf), NULL, NULL);
32  return strstr(buf, stra) != NULL;
33 }
34 
35 static BSTR a2bstr(const char *str)
36 {
37  BSTR ret;
38  int len;
39 
40  if(!str)
41  return NULL;
42 
43  len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
46 
47  return ret;
48 }
49 
50 static const WCHAR *strstr_wa(const WCHAR *str, const char *suba)
51 {
52  BSTR sub;
53  const WCHAR *ret = NULL;
54  sub = a2bstr(suba);
55  while (*str)
56  {
57  const WCHAR *p1 = str, *p2 = sub;
58  while (*p1 && *p2 && *p1 == *p2) { p1++; p2++; }
59  if (!*p2) {ret = str; break;}
60  str++;
61  }
62  SysFreeString(sub);
63  return ret;
64 }
65 
66 #define test_var_bstr(a,b) _test_var_bstr(__LINE__,a,b)
67 static void _test_var_bstr(unsigned line, const VARIANT *v, const char *expect)
68 {
69  ok_(__FILE__,line)(V_VT(v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(v));
70  if(expect)
71  ok_(__FILE__,line)(!strcmp_wa(V_BSTR(v), expect), "V_BSTR(v) = %s, expected %s\n", wine_dbgstr_w(V_BSTR(v)), expect);
72  else
73  ok_(__FILE__,line)(!V_BSTR(v), "V_BSTR(v) = %s, expected NULL\n", wine_dbgstr_w(V_BSTR(v)));
74 }
75 
76 #define get_elem2_iface(u) _get_elem2_iface(__LINE__,u)
77 static IHTMLElement2 *_get_elem2_iface(unsigned line, IUnknown *unk)
78 {
79  IHTMLElement2 *elem;
80  HRESULT hres;
81 
82  hres = IUnknown_QueryInterface(unk, &IID_IHTMLElement2, (void**)&elem);
83  ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLElement2: %08x\n", hres);
84  return elem;
85 }
86 
87 #define get_current_style2_iface(u) _get_current_style2_iface(__LINE__,u)
88 static IHTMLCurrentStyle2 *_get_current_style2_iface(unsigned line, IUnknown *unk)
89 {
90  IHTMLCurrentStyle2 *current_style2;
91  HRESULT hres;
92 
93  hres = IUnknown_QueryInterface(unk, &IID_IHTMLCurrentStyle2, (void**)&current_style2);
94  ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLElement2: %08x\n", hres);
95  return current_style2;
96 }
97 
98 static IHTMLElement *get_element_by_id(IHTMLDocument2 *doc, const char *id)
99 {
100  HRESULT hres;
101  IHTMLDocument3 *doc3;
102  IHTMLElement *result;
103  BSTR idW = a2bstr(id);
104 
105  hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument3, (void**)&doc3);
106  ok(hres == S_OK, "QueryInterface(IID_IHTMLDocument3) failed: %08x\n", hres);
107 
108  hres = IHTMLDocument3_getElementById(doc3, idW, &result);
109  ok(hres == S_OK, "getElementById failed: %08x\n", hres);
110  ok(result != NULL, "result == NULL\n");
111  SysFreeString(idW);
112 
113  IHTMLDocument3_Release(doc3);
114  return result;
115 }
116 
117 #define get_current_style(e) _get_current_style(__LINE__,e)
118 static IHTMLCurrentStyle *_get_current_style(unsigned line, IHTMLElement *elem)
119 {
120  IHTMLCurrentStyle *cstyle;
121  IHTMLElement2 *elem2;
122  HRESULT hres;
123 
124  hres = IHTMLElement_QueryInterface(elem, &IID_IHTMLElement2, (void**)&elem2);
125  ok(hres == S_OK, "Could not get IHTMLElement2 iface: %08x\n", hres);
126 
127  cstyle = NULL;
128  hres = IHTMLElement2_get_currentStyle(elem2, &cstyle);
129  ok(hres == S_OK, "get_currentStyle failed: %08x\n", hres);
130  ok(cstyle != NULL, "cstyle = %p\n", cstyle);
131 
132  IHTMLElement2_Release(elem2);
133  return cstyle;
134 }
135 
136 #define test_border_styles(p, n) _test_border_styles(__LINE__, p, n)
137 static void _test_border_styles(unsigned line, IHTMLStyle *pStyle, BSTR Name)
138 {
139  HRESULT hres;
140  DISPID dispid;
141 
142  hres = IHTMLStyle_GetIDsOfNames(pStyle, &IID_NULL, &Name, 1,
143  LOCALE_USER_DEFAULT, &dispid);
144  ok_(__FILE__,line) (hres == S_OK, "GetIDsOfNames: %08x\n", hres);
145  if(hres == S_OK)
146  {
147  DISPPARAMS params = {NULL,NULL,0,0};
148  DISPID dispidNamed = DISPID_PROPERTYPUT;
149  VARIANT ret;
150  VARIANT vDefault;
151  VARIANTARG arg;
152 
153  hres = IHTMLStyle_Invoke(pStyle, dispid, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
154  DISPATCH_PROPERTYGET, &params, &vDefault, NULL, NULL);
155  ok_(__FILE__,line) (hres == S_OK, "get_default. ret: %08x\n", hres);
156 
157  params.cArgs = 1;
158  params.cNamedArgs = 1;
159  params.rgdispidNamedArgs = &dispidNamed;
160  V_VT(&arg) = VT_BSTR;
161  V_BSTR(&arg) = a2bstr("none");
162  params.rgvarg = &arg;
163  hres = IHTMLStyle_Invoke(pStyle, dispid, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
165  ok_(__FILE__,line) (hres == S_OK, "none. ret: %08x\n", hres);
166  VariantClear(&arg);
167 
168  V_VT(&arg) = VT_BSTR;
169  V_BSTR(&arg) = a2bstr("dotted");
170  hres = IHTMLStyle_Invoke(pStyle, dispid, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
172  ok_(__FILE__,line) (hres == S_OK, "dotted. ret: %08x\n", hres);
173  VariantClear(&arg);
174 
175  V_VT(&arg) = VT_BSTR;
176  V_BSTR(&arg) = a2bstr("dashed");
177  hres = IHTMLStyle_Invoke(pStyle, dispid, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
179  ok_(__FILE__,line) (hres == S_OK, "dashed. ret: %08x\n", hres);
180  VariantClear(&arg);
181 
182  V_VT(&arg) = VT_BSTR;
183  V_BSTR(&arg) = a2bstr("solid");
184  hres = IHTMLStyle_Invoke(pStyle, dispid, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
186  ok_(__FILE__,line) (hres == S_OK, "solid. ret: %08x\n", hres);
187  VariantClear(&arg);
188 
189  V_VT(&arg) = VT_BSTR;
190  V_BSTR(&arg) = a2bstr("double");
191  hres = IHTMLStyle_Invoke(pStyle, dispid, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
193  ok_(__FILE__,line) (hres == S_OK, "double. ret: %08x\n", hres);
194  VariantClear(&arg);
195 
196  V_VT(&arg) = VT_BSTR;
197  V_BSTR(&arg) = a2bstr("groove");
198  hres = IHTMLStyle_Invoke(pStyle, dispid, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
200  ok_(__FILE__,line) (hres == S_OK, "groove. ret: %08x\n", hres);
201  VariantClear(&arg);
202 
203  V_VT(&arg) = VT_BSTR;
204  V_BSTR(&arg) = a2bstr("ridge");
205  hres = IHTMLStyle_Invoke(pStyle, dispid, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
207  ok_(__FILE__,line) (hres == S_OK, "ridge. ret: %08x\n", hres);
208  VariantClear(&arg);
209 
210  V_VT(&arg) = VT_BSTR;
211  V_BSTR(&arg) = a2bstr("inset");
212  hres = IHTMLStyle_Invoke(pStyle, dispid, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
214  ok_(__FILE__,line) (hres == S_OK, "inset. ret: %08x\n", hres);
215  VariantClear(&arg);
216 
217  V_VT(&arg) = VT_BSTR;
218  V_BSTR(&arg) = a2bstr("outset");
219  hres = IHTMLStyle_Invoke(pStyle, dispid, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
221  ok_(__FILE__,line) (hres == S_OK, "outset. ret: %08x\n", hres);
222  VariantClear(&arg);
223 
224  V_VT(&arg) = VT_BSTR;
225  V_BSTR(&arg) = a2bstr("invalid");
226  hres = IHTMLStyle_Invoke(pStyle, dispid, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
228  ok_(__FILE__,line) (FAILED(hres), "invalid value passed.\n");
229  VariantClear(&arg);
230 
231  params.rgvarg = &vDefault;
232  hres = IHTMLStyle_Invoke(pStyle, dispid, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
234  ok_(__FILE__,line) (hres == S_OK, "default. ret: %08x\n", hres);
235  VariantClear(&vDefault);
236  }
237 }
238 
239 #define test_style_csstext(s,t) _test_style_csstext(__LINE__,s,t)
240 static void _test_style_csstext(unsigned line, IHTMLStyle *style, const char *extext)
241 {
242  BSTR text = (void*)0xdeadbeef;
243  HRESULT hres;
244 
245  hres = IHTMLStyle_get_cssText(style, &text);
246  ok_(__FILE__,line)(hres == S_OK, "get_cssText failed: %08x\n", hres);
247  if(extext)
248  ok_(__FILE__,line)(!strcmp_wa(text, extext), "cssText = %s\n", wine_dbgstr_w(text));
249  else
250  ok_(__FILE__,line)(!text, "cssText = %s\n", wine_dbgstr_w(text));
251 
253 }
254 
255 #define test_style_set_csstext(s,t) _test_style_set_csstext(__LINE__,s,t)
256 static void _test_style_set_csstext(unsigned line, IHTMLStyle *style, const char *text)
257 {
258  BSTR tmp;
259  HRESULT hres;
260 
261  tmp = a2bstr(text);
262  hres = IHTMLStyle_put_cssText(style, tmp);
263  ok_(__FILE__,line)(hres == S_OK, "put_cssText failed: %08x\n", hres);
264  SysFreeString(tmp);
265 }
266 
267 #define test_style_remove_attribute(a,b,c) _test_style_remove_attribute(__LINE__,a,b,c)
268 static void _test_style_remove_attribute(unsigned line, IHTMLStyle *style, const char *attr, VARIANT_BOOL exb)
269 {
270  BSTR str = a2bstr(attr);
271  VARIANT_BOOL b = 100;
272  HRESULT hres;
273 
274  hres = IHTMLStyle_removeAttribute(style, str, 1, &b);
276  ok_(__FILE__,line)(hres == S_OK, "removeAttribute failed: %08x\n", hres);
277  ok_(__FILE__,line)(b == exb, "removeAttribute returned %x, expected %x\n", b, exb);
278 }
279 
280 #define set_text_decoration(a,b) _set_text_decoration(__LINE__,a,b)
281 static void _set_text_decoration(unsigned line, IHTMLStyle *style, const char *v)
282 {
283  BSTR str;
284  HRESULT hres;
285 
286  str = a2bstr(v);
287  hres = IHTMLStyle_put_textDecoration(style, str);
288  ok_(__FILE__,line)(hres == S_OK, "put_textDecoration failed: %08x\n", hres);
290 }
291 
292 #define test_text_decoration(a,b) _test_text_decoration(__LINE__,a,b)
293 static void _test_text_decoration(unsigned line, IHTMLStyle *style, const char *exdec)
294 {
295  BSTR str;
296  HRESULT hres;
297 
298  hres = IHTMLStyle_get_textDecoration(style, &str);
299  ok_(__FILE__,line)(hres == S_OK, "get_textDecoration failed: %08x\n", hres);
300  if(exdec)
301  ok_(__FILE__,line)(!strcmp_wa(str, exdec), "textDecoration = %s, expected %s\n", wine_dbgstr_w(str), exdec);
302  else
303  ok_(__FILE__,line)(!str, "textDecoration = %s, expected NULL\n", wine_dbgstr_w(str));
305 }
306 
307 static void test_set_csstext(IHTMLStyle *style)
308 {
309  VARIANT v;
310  HRESULT hres;
311 
312  test_style_set_csstext(style, "background-color: black;");
313 
314  hres = IHTMLStyle_get_backgroundColor(style, &v);
315  ok(hres == S_OK, "get_backgroundColor: %08x\n", hres);
316  ok(V_VT(&v) == VT_BSTR, "type failed: %d\n", V_VT(&v));
317  ok(!strcmp_wa(V_BSTR(&v), "black"), "str=%s\n", wine_dbgstr_w(V_BSTR(&v)));
318  VariantClear(&v);
319 }
320 
321 static void test_style2(IHTMLStyle2 *style2)
322 {
323  VARIANT v;
324  BSTR str;
325  HRESULT hres;
326 
327  str = (void*)0xdeadbeef;
328  hres = IHTMLStyle2_get_position(style2, &str);
329  ok(hres == S_OK, "get_position failed: %08x\n", hres);
330  ok(!str, "str != NULL\n");
331 
332  str = a2bstr("absolute");
333  hres = IHTMLStyle2_put_position(style2, str);
334  ok(hres == S_OK, "put_position failed: %08x\n", hres);
336 
337  str = NULL;
338  hres = IHTMLStyle2_get_position(style2, &str);
339  ok(hres == S_OK, "get_position failed: %08x\n", hres);
340  ok(!strcmp_wa(str, "absolute"), "get_position returned %s\n", wine_dbgstr_w(str));
342 
343  /* Test right */
344  V_VT(&v) = VT_EMPTY;
345  hres = IHTMLStyle2_get_right(style2, &v);
346  ok(hres == S_OK, "get_top failed: %08x\n", hres);
347  ok(V_VT(&v) == VT_BSTR, "V_VT(right)=%d\n", V_VT(&v));
348  ok(!V_BSTR(&v), "V_BSTR(right) != NULL\n");
349  VariantClear(&v);
350 
351  V_VT(&v) = VT_BSTR;
352  V_BSTR(&v) = a2bstr("3px");
353  hres = IHTMLStyle2_put_right(style2, v);
354  ok(hres == S_OK, "put_right failed: %08x\n", hres);
355  VariantClear(&v);
356 
357  V_VT(&v) = VT_EMPTY;
358  hres = IHTMLStyle2_get_right(style2, &v);
359  ok(hres == S_OK, "get_right failed: %08x\n", hres);
360  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
361  ok(!strcmp_wa(V_BSTR(&v), "3px"), "V_BSTR(v) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
362  VariantClear(&v);
363 
364  /* direction */
365  str = (void*)0xdeadbeef;
366  hres = IHTMLStyle2_get_direction(style2, &str);
367  ok(hres == S_OK, "get_direction failed: %08x\n", hres);
368  ok(!str, "str = %s\n", wine_dbgstr_w(str));
369 
370  str = a2bstr("ltr");
371  hres = IHTMLStyle2_put_direction(style2, str);
372  ok(hres == S_OK, "put_direction failed: %08x\n", hres);
374 
375  str = NULL;
376  hres = IHTMLStyle2_get_direction(style2, &str);
377  ok(hres == S_OK, "get_direction failed: %08x\n", hres);
378  ok(!strcmp_wa(str, "ltr"), "str = %s\n", wine_dbgstr_w(str));
380 
381  /* bottom */
382  V_VT(&v) = VT_EMPTY;
383  hres = IHTMLStyle2_get_bottom(style2, &v);
384  ok(hres == S_OK, "get_bottom failed: %08x\n", hres);
385  test_var_bstr(&v, NULL);
386 
387  V_VT(&v) = VT_I4;
388  V_I4(&v) = 4;
389  hres = IHTMLStyle2_put_bottom(style2, v);
390  ok(hres == S_OK, "put_bottom failed: %08x\n", hres);
391 
392  V_VT(&v) = VT_EMPTY;
393  hres = IHTMLStyle2_get_bottom(style2, &v);
394  ok(hres == S_OK, "get_bottom failed: %08x\n", hres);
395  test_var_bstr(&v, "4px");
396 
397  /* overflowX */
398  str = (void*)0xdeadbeef;
399  hres = IHTMLStyle2_get_overflowX(style2, &str);
400  ok(hres == S_OK, "get_overflowX failed: %08x\n", hres);
401  ok(!str, "overflowX = %s\n", wine_dbgstr_w(str));
402 
403  str = a2bstr("hidden");
404  hres = IHTMLStyle2_put_overflowX(style2, str);
405  ok(hres == S_OK, "put_overflowX failed: %08x\n", hres);
407 
408  str = NULL;
409  hres = IHTMLStyle2_get_overflowX(style2, &str);
410  ok(hres == S_OK, "get_overflowX failed: %08x\n", hres);
411  ok(!strcmp_wa(str, "hidden"), "overflowX = %s\n", wine_dbgstr_w(str));
412 
413  /* overflowY */
414  str = (void*)0xdeadbeef;
415  hres = IHTMLStyle2_get_overflowY(style2, &str);
416  ok(hres == S_OK, "get_overflowY failed: %08x\n", hres);
417  ok(!str, "overflowY = %s\n", wine_dbgstr_w(str));
418 
419  str = a2bstr("hidden");
420  hres = IHTMLStyle2_put_overflowY(style2, str);
421  ok(hres == S_OK, "put_overflowY failed: %08x\n", hres);
423 
424  str = NULL;
425  hres = IHTMLStyle2_get_overflowY(style2, &str);
426  ok(hres == S_OK, "get_overflowY failed: %08x\n", hres);
427  ok(!strcmp_wa(str, "hidden"), "overflowX = %s\n", wine_dbgstr_w(str));
428 
429  /* tableLayout */
430  str = a2bstr("fixed");
431  hres = IHTMLStyle2_put_tableLayout(style2, str);
432  ok(hres == S_OK, "put_tableLayout failed: %08x\n", hres);
434 
435  str = (void*)0xdeadbeef;
436  hres = IHTMLStyle2_get_tableLayout(style2, &str);
437  ok(hres == S_OK, "get_tableLayout failed: %08x\n", hres);
438  ok(!strcmp_wa(str, "fixed"), "tableLayout = %s\n", wine_dbgstr_w(str));
440 }
441 
442 static void test_style3(IHTMLStyle3 *style3)
443 {
444  VARIANT v;
445  BSTR str;
446  HRESULT hres;
447 
448  str = (void*)0xdeadbeef;
449  hres = IHTMLStyle3_get_wordWrap(style3, &str);
450  ok(hres == S_OK, "get_wordWrap failed: %08x\n", hres);
451  ok(!str, "str != NULL\n");
452 
453  str = a2bstr("break-word");
454  hres = IHTMLStyle3_put_wordWrap(style3, str);
455  ok(hres == S_OK, "put_wordWrap failed: %08x\n", hres);
457 
458  str = NULL;
459  hres = IHTMLStyle3_get_wordWrap(style3, &str);
460  ok(hres == S_OK, "get_wordWrap failed: %08x\n", hres);
461  ok(!strcmp_wa(str, "break-word"), "get_wordWrap returned %s\n", wine_dbgstr_w(str));
463 
464  V_VT(&v) = VT_ERROR;
465  hres = IHTMLStyle3_get_zoom(style3, &v);
466  ok(hres == S_OK, "get_zoom failed: %08x\n", hres);
467  ok(V_VT(&v) == VT_BSTR, "V_VT(zoom) = %d\n", V_VT(&v));
468  ok(!V_BSTR(&v), "V_BSTR(zoom) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
469  VariantClear(&v);
470 
471  V_VT(&v) = VT_BSTR;
472  V_BSTR(&v) = a2bstr("100%");
473  hres = IHTMLStyle3_put_zoom(style3, v);
474  ok(hres == S_OK, "put_zoom failed: %08x\n", hres);
475 
476  V_VT(&v) = VT_ERROR;
477  hres = IHTMLStyle3_get_zoom(style3, &v);
478  ok(hres == S_OK, "get_zoom failed: %08x\n", hres);
479  ok(V_VT(&v) == VT_BSTR, "V_VT(zoom) = %d\n", V_VT(&v));
480  ok(!strcmp_wa(V_BSTR(&v), "100%"), "V_BSTR(zoom) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
481  VariantClear(&v);
482 
483  V_VT(&v) = VT_I4;
484  V_I4(&v) = 1;
485  hres = IHTMLStyle3_put_zoom(style3, v);
486  ok(hres == S_OK, "put_zoom failed: %08x\n", hres);
487 
488  V_VT(&v) = VT_ERROR;
489  hres = IHTMLStyle3_get_zoom(style3, &v);
490  ok(hres == S_OK, "get_zoom failed: %08x\n", hres);
491  ok(V_VT(&v) == VT_BSTR, "V_VT(zoom) = %d\n", V_VT(&v));
492  ok(!strcmp_wa(V_BSTR(&v), "1"), "V_BSTR(zoom) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
493  VariantClear(&v);
494 }
495 
496 static void test_style4(IHTMLStyle4 *style4)
497 {
498  HRESULT hres;
499  VARIANT v;
500  VARIANT vdefault;
501 
502  hres = IHTMLStyle4_get_minHeight(style4, &vdefault);
503  ok(hres == S_OK, "get_minHeight failed: %08x\n", hres);
504 
505  V_VT(&v) = VT_BSTR;
506  V_BSTR(&v) = a2bstr("10px");
507  hres = IHTMLStyle4_put_minHeight(style4, v);
508  ok(hres == S_OK, "put_minHeight failed: %08x\n", hres);
509  VariantClear(&v);
510 
511  hres = IHTMLStyle4_get_minHeight(style4, &v);
512  ok(hres == S_OK, "get_minHeight failed: %08x\n", hres);
513  ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
514  ok( !strcmp_wa(V_BSTR(&v), "10px"), "expect 10px got (%s)\n", wine_dbgstr_w(V_BSTR(&v)));
515  VariantClear(&v);
516 
517  hres = IHTMLStyle4_put_minHeight(style4, vdefault);
518  ok(hres == S_OK, "put_minHeight failed: %08x\n", hres);
519  VariantClear(&vdefault);
520 }
521 
522 static void test_style5(IHTMLStyle5 *style5)
523 {
524  HRESULT hres;
525  VARIANT v;
526  VARIANT vdefault;
527 
528  /* minWidth */
529  hres = IHTMLStyle5_get_minWidth(style5, &vdefault);
530  ok(hres == S_OK, "get_minWidth failed: %08x\n", hres);
531 
532  V_VT(&v) = VT_BSTR;
533  V_BSTR(&v) = a2bstr("12px");
534  hres = IHTMLStyle5_put_minWidth(style5, v);
535  ok(hres == S_OK, "put_minWidth failed: %08x\n", hres);
536  VariantClear(&v);
537 
538  hres = IHTMLStyle5_get_minWidth(style5, &v);
539  ok(hres == S_OK, "get_minWidth failed: %08x\n", hres);
540  ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
541  ok(!strcmp_wa(V_BSTR(&v), "12px"), "expect 12px got (%s)\n", wine_dbgstr_w(V_BSTR(&v)));
542  VariantClear(&v);
543 
544  V_VT(&v) = VT_BSTR;
545  V_BSTR(&v) = a2bstr("10%");
546  hres = IHTMLStyle5_put_minWidth(style5, v);
547  ok(hres == S_OK, "put_minWidth failed: %08x\n", hres);
548  VariantClear(&v);
549 
550  hres = IHTMLStyle5_get_minWidth(style5, &v);
551  ok(hres == S_OK, "get_minWidth failed: %08x\n", hres);
552  ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
553  ok(!strcmp_wa(V_BSTR(&v), "10%"), "expect 10%% got (%s)\n", wine_dbgstr_w(V_BSTR(&v)));
554  VariantClear(&v);
555 
556  V_VT(&v) = VT_BSTR;
557  V_BSTR(&v) = a2bstr("10");
558  hres = IHTMLStyle5_put_minWidth(style5, v);
559  ok(hres == S_OK, "put_minWidth failed: %08x\n", hres);
560  VariantClear(&v);
561 
562  hres = IHTMLStyle5_get_minWidth(style5, &v);
563  ok(hres == S_OK, "get_minWidth failed: %08x\n", hres);
564  ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
565  ok(!strcmp_wa(V_BSTR(&v), "10px"), "expect 10px got (%s)\n", wine_dbgstr_w(V_BSTR(&v)));
566  VariantClear(&v);
567 
568  hres = IHTMLStyle5_put_minWidth(style5, vdefault);
569  ok(hres == S_OK, "put_minWidth failed: %08x\n", hres);
570  VariantClear(&vdefault);
571 
572  /* maxWidth */
573  hres = IHTMLStyle5_get_maxWidth(style5, &vdefault);
574  ok(hres == S_OK, "get_maxWidth failed: %08x\n", hres);
575 
576  V_VT(&v) = VT_BSTR;
577  V_BSTR(&v) = a2bstr("200px");
578  hres = IHTMLStyle5_put_maxWidth(style5, v);
579  ok(hres == S_OK, "put_maxWidth failed: %08x\n", hres);
580  VariantClear(&v);
581 
582  hres = IHTMLStyle5_get_maxWidth(style5, &v);
583  ok(hres == S_OK, "get_maxWidth failed: %08x\n", hres);
584  ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n",V_VT(&v));
585  ok(!strcmp_wa(V_BSTR(&v), "200px"), "expect 200px got (%s)\n", wine_dbgstr_w(V_BSTR(&v)));
586  VariantClear(&v);
587 
588  V_VT(&v) = VT_BSTR;
589  V_BSTR(&v) = a2bstr("70%");
590  hres = IHTMLStyle5_put_maxWidth(style5, v);
591  ok(hres == S_OK, "put_maxWidth failed: %08x\n", hres);
592  VariantClear(&v);
593 
594  hres = IHTMLStyle5_get_maxWidth(style5, &v);
595  ok(hres == S_OK, "get maxWidth failed: %08x\n", hres);
596  ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
597  ok(!strcmp_wa(V_BSTR(&v), "70%"), "expect 70%% got (%s)\n", wine_dbgstr_w(V_BSTR(&v)));
598  VariantClear(&v);
599 
600  hres = IHTMLStyle5_put_maxWidth(style5,vdefault);
601  ok(hres == S_OK, "put_maxWidth failed: %08x\n", hres);
602  VariantClear(&vdefault);
603 
604  /* maxHeight */
605  hres = IHTMLStyle5_get_maxHeight(style5, &vdefault);
606  ok(hres == S_OK, "get maxHeight failed: %08x\n", hres);
607 
608  V_VT(&v) = VT_BSTR;
609  V_BSTR(&v) = a2bstr("200px");
610  hres = IHTMLStyle5_put_maxHeight(style5, v);
611  ok(hres == S_OK, "put maxHeight failed: %08x\n", hres);
612  VariantClear(&v);
613 
614  hres = IHTMLStyle5_get_maxHeight(style5, &v);
615  ok(hres == S_OK, "get maxHeight failed: %08x\n", hres);
616  ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
617  ok(!strcmp_wa(V_BSTR(&v), "200px"), "expect 200px got (%s)\n", wine_dbgstr_w(V_BSTR(&v)));
618  VariantClear(&v);
619 
620  V_VT(&v) = VT_BSTR;
621  V_BSTR(&v) = a2bstr("70%");
622  hres = IHTMLStyle5_put_maxHeight(style5, v);
623  ok(hres == S_OK, "put maxHeight failed: %08x\n", hres);
624  VariantClear(&v);
625 
626  hres = IHTMLStyle5_get_maxHeight(style5, &v);
627  ok(hres == S_OK, "get_maxHeight failed: %08x\n", hres);
628  ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
629  ok(!strcmp_wa(V_BSTR(&v), "70%"), "expect 70%% got (%s)\n", wine_dbgstr_w(V_BSTR(&v)));
630  VariantClear(&v);
631 
632  V_VT(&v) = VT_BSTR;
633  V_BSTR(&v) = a2bstr("100");
634  hres = IHTMLStyle5_put_maxHeight(style5, v);
635  ok(hres == S_OK, "put maxHeight failed: %08x\n", hres);
636  VariantClear(&v);
637 
638  hres = IHTMLStyle5_get_maxHeight(style5, &v);
639  ok(hres == S_OK, "get_maxHeight failed: %08x\n", hres);
640  ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
641  ok(!strcmp_wa(V_BSTR(&v), "100px"), "expect 100 got (%s)\n", wine_dbgstr_w(V_BSTR(&v)));
642  VariantClear(&v);
643 
644  hres = IHTMLStyle5_put_maxHeight(style5, vdefault);
645  ok(hres == S_OK, "put maxHeight failed:%08x\n", hres);
646  VariantClear(&vdefault);
647 }
648 
649 static void test_style6(IHTMLStyle6 *style)
650 {
651  BSTR str;
652  HRESULT hres;
653 
654  str = (void*)0xdeadbeef;
655  hres = IHTMLStyle6_get_outline(style, &str);
656  ok(hres == S_OK, "get_outline failed: %08x\n", hres);
657  ok(str && !*str, "outline = %s\n", wine_dbgstr_w(str));
659 
660  str = a2bstr("1px");
661  hres = IHTMLStyle6_put_outline(style, str);
662  ok(hres == S_OK, "put_outline failed: %08x\n", hres);
664 
665  str = (void*)0xdeadbeef;
666  hres = IHTMLStyle6_get_outline(style, &str);
667  ok(hres == S_OK, "get_outline failed: %08x\n", hres);
668  ok(wstr_contains(str, "1px"), "outline = %s\n", wine_dbgstr_w(str));
670 
671  str = (void*)0xdeadbeef;
672  hres = IHTMLStyle6_get_boxSizing(style, &str);
673  ok(hres == S_OK, "get_boxSizing failed: %08x\n", hres);
674  ok(!str, "boxSizing = %s\n", wine_dbgstr_w(str));
676 
677  str = a2bstr("border-box");
678  hres = IHTMLStyle6_put_boxSizing(style, str);
679  ok(hres == S_OK, "put_boxSizing failed: %08x\n", hres);
681 
682  str = NULL;
683  hres = IHTMLStyle6_get_boxSizing(style, &str);
684  ok(hres == S_OK, "get_boxSizing failed: %08x\n", hres);
685  ok(!strcmp_wa(str, "border-box"), "boxSizing = %s\n", wine_dbgstr_w(str));
687 }
688 
689 static void test_body_style(IHTMLStyle *style)
690 {
691  IHTMLStyle2 *style2;
692  IHTMLStyle3 *style3;
693  IHTMLStyle4 *style4;
694  IHTMLStyle5 *style5;
695  IHTMLStyle6 *style6;
696  VARIANT_BOOL b;
697  VARIANT v;
698  BSTR str;
699  HRESULT hres;
700  float f;
701  BSTR sOverflowDefault;
702  BSTR sDefault;
703  LONG l;
704  VARIANT vDefault;
705 
707 
708  hres = IHTMLStyle_get_position(style, &str);
709  ok(hres == S_OK, "get_position failed: %08x\n", hres);
710  ok(!str, "str=%s\n", wine_dbgstr_w(str));
711 
712  V_VT(&v) = VT_NULL;
713  hres = IHTMLStyle_get_marginRight(style, &v);
714  ok(hres == S_OK, "get_marginRight failed: %08x\n", hres);
715  ok(V_VT(&v) == VT_BSTR, "V_VT(marginRight) = %d\n", V_VT(&v));
716  ok(!V_BSTR(&v), "V_BSTR(marginRight) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
717 
718  V_VT(&v) = VT_I4;
719  V_I4(&v) = 6;
720  hres = IHTMLStyle_put_marginRight(style, v);
721  ok(hres == S_OK, "put_marginRight failed: %08x\n", hres);
722 
723  V_VT(&v) = VT_NULL;
724  hres = IHTMLStyle_get_marginRight(style, &v);
725  ok(hres == S_OK, "get_marginRight failed: %08x\n", hres);
726  ok(V_VT(&v) == VT_BSTR, "V_VT(marginRight) = %d\n", V_VT(&v));
727  ok(!strcmp_wa(V_BSTR(&v), "6px"), "V_BSTR(marginRight) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
728 
729  V_VT(&v) = VT_NULL;
730  hres = IHTMLStyle_get_marginBottom(style, &v);
731  ok(hres == S_OK, "get_marginBottom failed: %08x\n", hres);
732  ok(V_VT(&v) == VT_BSTR, "V_VT(marginBottom) = %d\n", V_VT(&v));
733  ok(!V_BSTR(&v), "V_BSTR(marginBottom) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
734 
735  V_VT(&v) = VT_I4;
736  V_I4(&v) = 6;
737  hres = IHTMLStyle_put_marginBottom(style, v);
738  ok(hres == S_OK, "put_marginBottom failed: %08x\n", hres);
739 
740  V_VT(&v) = VT_NULL;
741  hres = IHTMLStyle_get_marginBottom(style, &v);
742  ok(hres == S_OK, "get_marginBottom failed: %08x\n", hres);
743  ok(V_VT(&v) == VT_BSTR, "V_VT(marginBottom) = %d\n", V_VT(&v));
744  ok(!strcmp_wa(V_BSTR(&v), "6px"), "V_BSTR(marginBottom) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
745 
746  V_VT(&v) = VT_NULL;
747  hres = IHTMLStyle_get_marginLeft(style, &v);
748  ok(hres == S_OK, "get_marginLeft failed: %08x\n", hres);
749  ok(V_VT(&v) == VT_BSTR, "V_VT(marginLeft) = %d\n", V_VT(&v));
750  ok(!V_BSTR(&v), "V_BSTR(marginLeft) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
751 
752  V_VT(&v) = VT_I4;
753  V_I4(&v) = 6;
754  hres = IHTMLStyle_put_marginLeft(style, v);
755  ok(hres == S_OK, "put_marginLeft failed: %08x\n", hres);
756 
757  V_VT(&v) = VT_NULL;
758  hres = IHTMLStyle_get_marginLeft(style, &v);
759  ok(hres == S_OK, "get_marginLeft failed: %08x\n", hres);
760  ok(V_VT(&v) == VT_BSTR, "V_VT(marginLeft) = %d\n", V_VT(&v));
761  ok(!strcmp_wa(V_BSTR(&v), "6px"), "V_BSTR(marginLeft) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
762 
763  str = (void*)0xdeadbeef;
764  hres = IHTMLStyle_get_fontFamily(style, &str);
765  ok(hres == S_OK, "get_fontFamily failed: %08x\n", hres);
766  ok(!str, "fontFamily = %s\n", wine_dbgstr_w(str));
767 
768  str = (void*)0xdeadbeef;
769  hres = IHTMLStyle_get_fontWeight(style, &str);
770  ok(hres == S_OK, "get_fontWeight failed: %08x\n", hres);
771  ok(!str, "fontWeight = %s\n", wine_dbgstr_w(str));
772 
773  hres = IHTMLStyle_get_fontWeight(style, &sDefault);
774  ok(hres == S_OK, "get_fontWeight failed: %08x\n", hres);
775 
776  str = a2bstr("test");
777  hres = IHTMLStyle_put_fontWeight(style, str);
778  ok(hres == E_INVALIDARG, "put_fontWeight failed: %08x\n", hres);
780 
781  str = a2bstr("bold");
782  hres = IHTMLStyle_put_fontWeight(style, str);
783  ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres);
785 
786  str = a2bstr("bolder");
787  hres = IHTMLStyle_put_fontWeight(style, str);
788  ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres);
790 
791  str = a2bstr("lighter");
792  hres = IHTMLStyle_put_fontWeight(style, str);
793  ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres);
795 
796  str = a2bstr("100");
797  hres = IHTMLStyle_put_fontWeight(style, str);
798  ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres);
800 
801  str = a2bstr("200");
802  hres = IHTMLStyle_put_fontWeight(style, str);
803  ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres);
805 
806  str = a2bstr("300");
807  hres = IHTMLStyle_put_fontWeight(style, str);
808  ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres);
810 
811  str = a2bstr("400");
812  hres = IHTMLStyle_put_fontWeight(style, str);
813  ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres);
815 
816  str = a2bstr("500");
817  hres = IHTMLStyle_put_fontWeight(style, str);
818  ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres);
820 
821  str = a2bstr("600");
822  hres = IHTMLStyle_put_fontWeight(style, str);
823  ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres);
825 
826  str = a2bstr("700");
827  hres = IHTMLStyle_put_fontWeight(style, str);
828  ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres);
830 
831  str = a2bstr("800");
832  hres = IHTMLStyle_put_fontWeight(style, str);
833  ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres);
835 
836  str = a2bstr("900");
837  hres = IHTMLStyle_put_fontWeight(style, str);
838  ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres);
840 
841  hres = IHTMLStyle_get_fontWeight(style, &str);
842  ok(hres == S_OK, "get_fontWeight failed: %08x\n", hres);
843  ok(!strcmp_wa(str, "900"), "str != style900\n");
845 
846  str = a2bstr("");
847  hres = IHTMLStyle_put_fontWeight(style, str);
848  ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres);
850 
851  hres = IHTMLStyle_get_fontWeight(style, &str);
852  ok(hres == S_OK, "get_fontWeight failed: %08x\n", hres);
853  ok(!str, "str != NULL\n");
855 
856  hres = IHTMLStyle_put_fontWeight(style, sDefault);
857  ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres);
858  SysFreeString(sDefault);
859 
860  /* font Variant */
861  hres = IHTMLStyle_get_fontVariant(style, NULL);
862  ok(hres == E_INVALIDARG, "get_fontVariant failed: %08x\n", hres);
863 
864  hres = IHTMLStyle_get_fontVariant(style, &sDefault);
865  ok(hres == S_OK, "get_fontVariant failed: %08x\n", hres);
866 
867  str = a2bstr("test");
868  hres = IHTMLStyle_put_fontVariant(style, str);
869  ok(hres == E_INVALIDARG, "fontVariant failed: %08x\n", hres);
871 
872  str = a2bstr("small-caps");
873  hres = IHTMLStyle_put_fontVariant(style, str);
874  ok(hres == S_OK, "fontVariant failed: %08x\n", hres);
876 
877  str = a2bstr("normal");
878  hres = IHTMLStyle_put_fontVariant(style, str);
879  ok(hres == S_OK, "fontVariant failed: %08x\n", hres);
881 
882  hres = IHTMLStyle_put_fontVariant(style, sDefault);
883  ok(hres == S_OK, "fontVariant failed: %08x\n", hres);
884  SysFreeString(sDefault);
885 
886  str = (void*)0xdeadbeef;
887  hres = IHTMLStyle_get_display(style, &str);
888  ok(hres == S_OK, "get_display failed: %08x\n", hres);
889  ok(!str, "display = %s\n", wine_dbgstr_w(str));
890 
891  str = (void*)0xdeadbeef;
892  hres = IHTMLStyle_get_visibility(style, &str);
893  ok(hres == S_OK, "get_visibility failed: %08x\n", hres);
894  ok(!str, "visibility = %s\n", wine_dbgstr_w(str));
895 
896  V_VT(&v) = VT_NULL;
897  hres = IHTMLStyle_get_fontSize(style, &v);
898  ok(hres == S_OK, "get_fontSize failed: %08x\n", hres);
899  ok(V_VT(&v) == VT_BSTR, "V_VT(fontSize) = %d\n", V_VT(&v));
900  ok(!V_BSTR(&v), "V_BSTR(fontSize) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
901 
902  V_VT(&v) = VT_I4;
903  V_I4(&v) = 12;
904  hres = IHTMLStyle_put_fontSize(style, v);
905  ok(hres == S_OK, "put_fontSize failed: %08x\n", hres);
906 
907  V_VT(&v) = VT_NULL;
908  hres = IHTMLStyle_get_fontSize(style, &v);
909  ok(hres == S_OK, "get_fontSize failed: %08x\n", hres);
910  ok(V_VT(&v) == VT_BSTR, "V_VT(fontSize) = %d\n", V_VT(&v));
911  ok(!strcmp_wa(V_BSTR(&v), "12px"), "V_BSTR(fontSize) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
912 
913  V_VT(&v) = VT_NULL;
914  hres = IHTMLStyle_get_color(style, &v);
915  ok(hres == S_OK, "get_color failed: %08x\n", hres);
916  ok(V_VT(&v) == VT_BSTR, "V_VT(color) = %d\n", V_VT(&v));
917  ok(!V_BSTR(&v), "V_BSTR(color) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
918 
919  V_VT(&v) = VT_I4;
920  V_I4(&v) = 0xfdfd;
921  hres = IHTMLStyle_put_color(style, v);
922  ok(hres == S_OK, "put_color failed: %08x\n", hres);
923 
924  V_VT(&v) = VT_NULL;
925  hres = IHTMLStyle_get_color(style, &v);
926  ok(hres == S_OK, "get_color failed: %08x\n", hres);
927  ok(V_VT(&v) == VT_BSTR, "V_VT(color) = %d\n", V_VT(&v));
928  todo_wine
929  ok(!strcmp_wa(V_BSTR(&v), "#00fdfd"), "V_BSTR(color) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
930 
931  V_VT(&v) = VT_I4;
932  V_I4(&v) = 3;
933  hres = IHTMLStyle_put_lineHeight(style, v);
934  ok(hres == S_OK, "put_lineHeight failed: %08x\n", hres);
935 
936  hres = IHTMLStyle_get_lineHeight(style, &v);
937  ok(hres == S_OK, "get_lineHeight failed: %08x\n", hres);
938  ok(V_VT(&v) == VT_BSTR, "V_VT(lineHeight) = %d, expect VT_BSTR\n", V_VT(&v));
939  ok(!strcmp_wa(V_BSTR(&v), "3"), "V_BSTR(lineHeight) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
940 
941  V_VT(&v) = VT_BSTR;
942  V_BSTR(&v) = a2bstr("300%");
943  hres = IHTMLStyle_put_lineHeight(style, v);
944  ok(hres == S_OK, "put_lineHeight failed: %08x\n", hres);
945  VariantClear(&v);
946 
947  hres = IHTMLStyle_get_lineHeight(style, &v);
948  ok(hres == S_OK, "get_lineHeight failed: %08x\n", hres);
949  ok(V_VT(&v) == VT_BSTR, "V_VT(lineHeight) = %d, expect VT_BSTR\n", V_VT(&v));
950  ok(!strcmp_wa(V_BSTR(&v), "300%"), "V_BSTR(lineHeight) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
951  VariantClear(&v);
952 
953  b = 0xfefe;
954  hres = IHTMLStyle_get_textDecorationUnderline(style, &b);
955  ok(hres == S_OK, "get_textDecorationUnderline failed: %08x\n", hres);
956  ok(b == VARIANT_FALSE, "textDecorationUnderline = %x\n", b);
957 
958  hres = IHTMLStyle_put_textDecorationUnderline(style, VARIANT_TRUE);
959  ok(hres == S_OK, "put_textDecorationUnderline failed: %08x\n", hres);
960 
961  hres = IHTMLStyle_get_textDecorationUnderline(style, &b);
962  ok(hres == S_OK, "get_textDecorationUnderline failed: %08x\n", hres);
963  ok(b == VARIANT_TRUE, "textDecorationUnderline = %x\n", b);
964 
965  hres = IHTMLStyle_put_textDecorationUnderline(style, VARIANT_FALSE);
966  ok(hres == S_OK, "put_textDecorationUnderline failed: %08x\n", hres);
967 
968  b = 0xfefe;
969  hres = IHTMLStyle_get_textDecorationLineThrough(style, &b);
970  ok(hres == S_OK, "get_textDecorationLineThrough failed: %08x\n", hres);
971  ok(b == VARIANT_FALSE, "textDecorationLineThrough = %x\n", b);
972 
973  hres = IHTMLStyle_put_textDecorationLineThrough(style, VARIANT_TRUE);
974  ok(hres == S_OK, "put_textDecorationLineThrough failed: %08x\n", hres);
975 
976  hres = IHTMLStyle_get_textDecorationLineThrough(style, &b);
977  ok(hres == S_OK, "get_textDecorationLineThrough failed: %08x\n", hres);
978  ok(b == VARIANT_TRUE, "textDecorationLineThrough = %x\n", b);
979 
980  hres = IHTMLStyle_put_textDecorationLineThrough(style, VARIANT_FALSE);
981  ok(hres == S_OK, "put_textDecorationLineThrough failed: %08x\n", hres);
982 
983  b = 0xfefe;
984  hres = IHTMLStyle_get_textDecorationNone(style, &b);
985  ok(hres == S_OK, "get_textDecorationNone failed: %08x\n", hres);
986  ok(b == VARIANT_FALSE, "textDecorationNone = %x\n", b);
987 
988  hres = IHTMLStyle_put_textDecorationNone(style, VARIANT_TRUE);
989  ok(hres == S_OK, "put_textDecorationNone failed: %08x\n", hres);
990 
991  hres = IHTMLStyle_get_textDecorationNone(style, &b);
992  ok(hres == S_OK, "get_textDecorationNone failed: %08x\n", hres);
993  ok(b == VARIANT_TRUE, "textDecorationNone = %x\n", b);
994 
995  hres = IHTMLStyle_put_textDecorationNone(style, VARIANT_FALSE);
996  ok(hres == S_OK, "put_textDecorationNone failed: %08x\n", hres);
997 
998  b = 0xfefe;
999  hres = IHTMLStyle_get_textDecorationOverline(style, &b);
1000  ok(hres == S_OK, "get_textDecorationOverline failed: %08x\n", hres);
1001  ok(b == VARIANT_FALSE, "textDecorationOverline = %x\n", b);
1002 
1003  hres = IHTMLStyle_put_textDecorationOverline(style, VARIANT_TRUE);
1004  ok(hres == S_OK, "put_textDecorationOverline failed: %08x\n", hres);
1005 
1006  hres = IHTMLStyle_get_textDecorationOverline(style, &b);
1007  ok(hres == S_OK, "get_textDecorationOverline failed: %08x\n", hres);
1008  ok(b == VARIANT_TRUE, "textDecorationOverline = %x\n", b);
1009 
1010  hres = IHTMLStyle_put_textDecorationOverline(style, VARIANT_FALSE);
1011  ok(hres == S_OK, "put_textDecorationOverline failed: %08x\n", hres);
1012 
1013  b = 0xfefe;
1014  hres = IHTMLStyle_get_textDecorationBlink(style, &b);
1015  ok(hres == S_OK, "get_textDecorationBlink failed: %08x\n", hres);
1016  ok(b == VARIANT_FALSE, "textDecorationBlink = %x\n", b);
1017 
1018  hres = IHTMLStyle_put_textDecorationBlink(style, VARIANT_TRUE);
1019  ok(hres == S_OK, "put_textDecorationBlink failed: %08x\n", hres);
1020 
1021  hres = IHTMLStyle_get_textDecorationBlink(style, &b);
1022  ok(hres == S_OK, "get_textDecorationBlink failed: %08x\n", hres);
1023  ok(b == VARIANT_TRUE, "textDecorationBlink = %x\n", b);
1024 
1025  hres = IHTMLStyle_put_textDecorationBlink(style, VARIANT_FALSE);
1026  ok(hres == S_OK, "textDecorationBlink failed: %08x\n", hres);
1027 
1028  hres = IHTMLStyle_get_textDecoration(style, &sDefault);
1029  ok(hres == S_OK, "get_textDecoration failed: %08x\n", hres);
1030 
1031  str = a2bstr("invalid");
1032  hres = IHTMLStyle_put_textDecoration(style, str);
1033  ok(hres == E_INVALIDARG, "put_textDecoration failed: %08x\n", hres);
1034  SysFreeString(str);
1035 
1036  set_text_decoration(style, "none");
1037  test_text_decoration(style, "none");
1038  set_text_decoration(style, "underline");
1039  set_text_decoration(style, "overline");
1040  set_text_decoration(style, "line-through");
1041  set_text_decoration(style, "blink");
1042  set_text_decoration(style, "overline");
1043  set_text_decoration(style, "blink");
1044  test_text_decoration(style, "blink");
1045 
1046  hres = IHTMLStyle_put_textDecoration(style, sDefault);
1047  ok(hres == S_OK, "put_textDecoration failed: %08x\n", hres);
1048  SysFreeString(sDefault);
1049 
1050  hres = IHTMLStyle_get_posWidth(style, NULL);
1051  ok(hres == E_POINTER, "get_posWidth failed: %08x\n", hres);
1052 
1053  hres = IHTMLStyle_get_posWidth(style, &f);
1054  ok(hres == S_OK, "get_posWidth failed: %08x\n", hres);
1055  ok(f == 0.0f, "f = %f\n", f);
1056 
1057  V_VT(&v) = VT_EMPTY;
1058  hres = IHTMLStyle_get_width(style, &v);
1059  ok(hres == S_OK, "get_width failed: %08x\n", hres);
1060  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
1061  ok(!V_BSTR(&v), "V_BSTR(v)=%p\n", V_BSTR(&v));
1062 
1063  hres = IHTMLStyle_put_posWidth(style, 2.2);
1064  ok(hres == S_OK, "put_posWidth failed: %08x\n", hres);
1065 
1066  hres = IHTMLStyle_get_posWidth(style, &f);
1067  ok(hres == S_OK, "get_posWidth failed: %08x\n", hres);
1068  ok(f == 2.0f ||
1069  f == 2.2f, /* IE8 */
1070  "f = %f\n", f);
1071 
1072  l = 0xdeadbeef;
1073  hres = IHTMLStyle_get_pixelWidth(style, &l);
1074  ok(hres == S_OK, "get_pixelWidth failed: %08x\n", hres);
1075  ok(l == 2, "pixelWidth = %d\n", l);
1076 
1077  V_VT(&v) = VT_BSTR;
1078  V_BSTR(&v) = a2bstr("auto");
1079  hres = IHTMLStyle_put_width(style, v);
1080  ok(hres == S_OK, "put_width failed: %08x\n", hres);
1081  VariantClear(&v);
1082 
1083  V_VT(&v) = VT_EMPTY;
1084  hres = IHTMLStyle_get_width(style, &v);
1085  ok(hres == S_OK, "get_width failed: %08x\n", hres);
1086  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
1087  ok(!strcmp_wa(V_BSTR(&v), "auto"), "V_BSTR(v)=%s\n", wine_dbgstr_w(V_BSTR(&v)));
1088  VariantClear(&v);
1089 
1090  V_VT(&v) = VT_I4;
1091  V_I4(&v) = 100;
1092  hres = IHTMLStyle_put_width(style, v);
1093  ok(hres == S_OK, "put_width failed: %08x\n", hres);
1094 
1095  l = 0xdeadbeef;
1096  hres = IHTMLStyle_get_pixelWidth(style, &l);
1097  ok(hres == S_OK, "get_pixelWidth failed: %08x\n", hres);
1098  ok(l == 100, "pixelWidth = %d\n", l);
1099 
1100  V_VT(&v) = VT_EMPTY;
1101  hres = IHTMLStyle_get_width(style, &v);
1102  ok(hres == S_OK, "get_width failed: %08x\n", hres);
1103  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
1104  ok(!strcmp_wa(V_BSTR(&v), "100px"), "V_BSTR(v)=%s\n", wine_dbgstr_w(V_BSTR(&v)));
1105  VariantClear(&v);
1106 
1107  hres = IHTMLStyle_put_pixelWidth(style, 50);
1108  ok(hres == S_OK, "put_pixelWidth failed: %08x\n", hres);
1109 
1110  l = 0xdeadbeef;
1111  hres = IHTMLStyle_get_pixelWidth(style, &l);
1112  ok(hres == S_OK, "get_pixelWidth failed: %08x\n", hres);
1113  ok(l == 50, "pixelWidth = %d\n", l);
1114 
1115  hres = IHTMLStyle_get_pixelWidth(style, NULL);
1116  ok(hres == E_POINTER, "get_pixelWidth failed: %08x\n", hres);
1117 
1118  V_VT(&v) = VT_EMPTY;
1119  hres = IHTMLStyle_get_width(style, &v);
1120  ok(hres == S_OK, "get_width failed: %08x\n", hres);
1121  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
1122  ok(!strcmp_wa(V_BSTR(&v), "50px"), "V_BSTR(v)=%s\n", wine_dbgstr_w(V_BSTR(&v)));
1123  VariantClear(&v);
1124 
1125  /* margin tests */
1126  str = (void*)0xdeadbeef;
1127  hres = IHTMLStyle_get_margin(style, &str);
1128  ok(hres == S_OK, "get_margin failed: %08x\n", hres);
1129  ok(!str, "margin = %s\n", wine_dbgstr_w(str));
1130 
1131  str = a2bstr("1");
1132  hres = IHTMLStyle_put_margin(style, str);
1133  ok(hres == S_OK, "put_margin failed: %08x\n", hres);
1134  SysFreeString(str);
1135 
1136  hres = IHTMLStyle_get_margin(style, &str);
1137  ok(hres == S_OK, "get_margin failed: %08x\n", hres);
1138  ok(!strcmp_wa(str, "1px"), "margin = %s\n", wine_dbgstr_w(str));
1139  SysFreeString(str);
1140 
1141  hres = IHTMLStyle_put_margin(style, NULL);
1142  ok(hres == S_OK, "put_margin failed: %08x\n", hres);
1143 
1144  str = (void*)0xdeadbeef;
1145  hres = IHTMLStyle_get_marginTop(style, &v);
1146  ok(hres == S_OK, "get_marginTop failed: %08x\n", hres);
1147  ok(V_VT(&v) == VT_BSTR, "V_VT(marginTop) = %d\n", V_VT(&v));
1148  ok(!V_BSTR(&v), "V_BSTR(marginTop) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
1149 
1150  V_VT(&v) = VT_BSTR;
1151  V_BSTR(&v) = a2bstr("6px");
1152  hres = IHTMLStyle_put_marginTop(style, v);
1153  SysFreeString(V_BSTR(&v));
1154  ok(hres == S_OK, "put_marginTop failed: %08x\n", hres);
1155 
1156  str = (void*)0xdeadbeef;
1157  hres = IHTMLStyle_get_marginTop(style, &v);
1158  ok(hres == S_OK, "get_marginTop failed: %08x\n", hres);
1159  ok(V_VT(&v) == VT_BSTR, "V_VT(marginTop) = %d\n", V_VT(&v));
1160  ok(!strcmp_wa(V_BSTR(&v), "6px"), "V_BSTR(marginTop) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
1161  VariantClear(&v);
1162 
1163  V_VT(&v) = VT_I4;
1164  V_I4(&v) = 5;
1165  hres = IHTMLStyle_put_marginTop(style, v);
1166  ok(hres == S_OK, "put_marginTop failed: %08x\n", hres);
1167 
1168  str = (void*)0xdeadbeef;
1169  hres = IHTMLStyle_get_marginTop(style, &v);
1170  ok(hres == S_OK, "get_marginTop failed: %08x\n", hres);
1171  ok(V_VT(&v) == VT_BSTR, "V_VT(marginTop) = %d\n", V_VT(&v));
1172  ok(!strcmp_wa(V_BSTR(&v), "5px"), "V_BSTR(marginTop) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
1173  VariantClear(&v);
1174 
1175  str = NULL;
1176  hres = IHTMLStyle_get_border(style, &str);
1177  ok(hres == S_OK, "get_border failed: %08x\n", hres);
1178  ok(!str || !*str, "str is not empty\n");
1179  SysFreeString(str);
1180 
1181  str = a2bstr("1px");
1182  hres = IHTMLStyle_put_border(style, str);
1183  ok(hres == S_OK, "put_border failed: %08x\n", hres);
1184  SysFreeString(str);
1185 
1186  V_VT(&v) = VT_EMPTY;
1187  hres = IHTMLStyle_get_left(style, &v);
1188  ok(hres == S_OK, "get_left failed: %08x\n", hres);
1189  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
1190  ok(!V_BSTR(&v), "V_BSTR(v) != NULL\n");
1191  VariantClear(&v);
1192 
1193  l = 0xdeadbeef;
1194  hres = IHTMLStyle_get_pixelLeft(style, &l);
1195  ok(hres == S_OK, "get_pixelLeft failed: %08x\n", hres);
1196  ok(!l, "pixelLeft = %d\n", l);
1197 
1198  /* Test posLeft */
1199  hres = IHTMLStyle_get_posLeft(style, NULL);
1200  ok(hres == E_POINTER, "get_posLeft failed: %08x\n", hres);
1201 
1202  f = 1.0f;
1203  hres = IHTMLStyle_get_posLeft(style, &f);
1204  ok(hres == S_OK, "get_posLeft failed: %08x\n", hres);
1205  ok(f == 0.0, "expected 0.0 got %f\n", f);
1206 
1207  hres = IHTMLStyle_put_posLeft(style, 4.9f);
1208  ok(hres == S_OK, "put_posLeft failed: %08x\n", hres);
1209 
1210  hres = IHTMLStyle_get_posLeft(style, &f);
1211  ok(hres == S_OK, "get_posLeft failed: %08x\n", hres);
1212  ok(f == 4.0 ||
1213  f == 4.9f, /* IE8 */
1214  "expected 4.0 or 4.9 (IE8) got %f\n", f);
1215 
1216  /* Ensure left is updated correctly. */
1217  V_VT(&v) = VT_EMPTY;
1218  hres = IHTMLStyle_get_left(style, &v);
1219  ok(hres == S_OK, "get_left failed: %08x\n", hres);
1220  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
1221  ok(!strcmp_wa(V_BSTR(&v), "4px") ||
1222  !strcmp_wa(V_BSTR(&v), "4.9px"), /* IE8 */
1223  "V_BSTR(v) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
1224  VariantClear(&v);
1225 
1226  /* Test left */
1227  V_VT(&v) = VT_BSTR;
1228  V_BSTR(&v) = a2bstr("3px");
1229  hres = IHTMLStyle_put_left(style, v);
1230  ok(hres == S_OK, "put_left failed: %08x\n", hres);
1231  VariantClear(&v);
1232 
1233  hres = IHTMLStyle_get_posLeft(style, &f);
1234  ok(hres == S_OK, "get_posLeft failed: %08x\n", hres);
1235  ok(f == 3.0, "expected 3.0 got %f\n", f);
1236 
1237  l = 0xdeadbeef;
1238  hres = IHTMLStyle_get_pixelLeft(style, &l);
1239  ok(hres == S_OK, "get_pixelLeft failed: %08x\n", hres);
1240  ok(l == 3, "pixelLeft = %d\n", l);
1241 
1242  V_VT(&v) = VT_EMPTY;
1243  hres = IHTMLStyle_get_left(style, &v);
1244  ok(hres == S_OK, "get_left failed: %08x\n", hres);
1245  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
1246  ok(!strcmp_wa(V_BSTR(&v), "3px"), "V_BSTR(v) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
1247  VariantClear(&v);
1248 
1249  V_VT(&v) = VT_BSTR;
1250  V_BSTR(&v) = a2bstr("4.99");
1251  hres = IHTMLStyle_put_left(style, v);
1252  ok(hres == S_OK, "put_left failed: %08x\n", hres);
1253  VariantClear(&v);
1254 
1255  l = 0xdeadbeef;
1256  hres = IHTMLStyle_get_pixelLeft(style, &l);
1257  ok(hres == S_OK, "get_pixelLeft failed: %08x\n", hres);
1258  ok(l == 4, "pixelLeft = %d\n", l);
1259 
1260  V_VT(&v) = VT_NULL;
1261  hres = IHTMLStyle_put_left(style, v);
1262  ok(hres == S_OK, "put_left failed: %08x\n", hres);
1263 
1264  V_VT(&v) = VT_EMPTY;
1265  hres = IHTMLStyle_get_left(style, &v);
1266  ok(hres == S_OK, "get_left failed: %08x\n", hres);
1267  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
1268  ok(!V_BSTR(&v), "V_BSTR(v) != NULL\n");
1269  VariantClear(&v);
1270 
1271  V_VT(&v) = VT_EMPTY;
1272  hres = IHTMLStyle_get_top(style, &v);
1273  ok(hres == S_OK, "get_top failed: %08x\n", hres);
1274  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
1275  ok(!V_BSTR(&v), "V_BSTR(v) != NULL\n");
1276  VariantClear(&v);
1277 
1278  l = 0xdeadbeef;
1279  hres = IHTMLStyle_get_pixelLeft(style, &l);
1280  ok(hres == S_OK, "get_pixelLeft failed: %08x\n", hres);
1281  ok(!l, "pixelLeft = %d\n", l);
1282 
1283  hres = IHTMLStyle_put_pixelLeft(style, 6);
1284  ok(hres == S_OK, "put_pixelLeft failed: %08x\n", hres);
1285 
1286  l = 0xdeadbeef;
1287  hres = IHTMLStyle_get_pixelLeft(style, &l);
1288  ok(hres == S_OK, "get_pixelLeft failed: %08x\n", hres);
1289  ok(l == 6, "pixelLeft = %d\n", l);
1290 
1291  hres = IHTMLStyle_get_pixelLeft(style, NULL);
1292  ok(hres == E_POINTER, "get_pixelLeft failed: %08x\n", hres);
1293 
1294  V_VT(&v) = VT_EMPTY;
1295  hres = IHTMLStyle_get_left(style, &v);
1296  ok(hres == S_OK, "get_left failed: %08x\n", hres);
1297  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
1298  ok(!strcmp_wa(V_BSTR(&v), "6px"), "V_BSTR(v) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
1299  VariantClear(&v);
1300 
1301  /* Test posTop */
1302  hres = IHTMLStyle_get_posTop(style, NULL);
1303  ok(hres == E_POINTER, "get_posTop failed: %08x\n", hres);
1304 
1305  f = 1.0f;
1306  hres = IHTMLStyle_get_posTop(style, &f);
1307  ok(hres == S_OK, "get_posTop failed: %08x\n", hres);
1308  ok(f == 0.0, "expected 0.0 got %f\n", f);
1309 
1310  hres = IHTMLStyle_put_posTop(style, 4.9f);
1311  ok(hres == S_OK, "put_posTop failed: %08x\n", hres);
1312 
1313  hres = IHTMLStyle_get_posTop(style, &f);
1314  ok(hres == S_OK, "get_posTop failed: %08x\n", hres);
1315  ok(f == 4.0 ||
1316  f == 4.9f, /* IE8 */
1317  "expected 4.0 or 4.9 (IE8) got %f\n", f);
1318 
1319  hres = IHTMLStyle_put_pixelTop(style, 6);
1320  ok(hres == S_OK, "put_pixelTop failed: %08x\n", hres);
1321 
1322  l = 0xdeadbeef;
1323  hres = IHTMLStyle_get_pixelTop(style, &l);
1324  ok(hres == S_OK, "get_pixelTop failed: %08x\n", hres);
1325  ok(l == 6, "pixelTop = %d\n", l);
1326 
1327  hres = IHTMLStyle_get_pixelTop(style, NULL);
1328  ok(hres == E_POINTER, "get_pixelTop failed: %08x\n", hres);
1329 
1330  V_VT(&v) = VT_BSTR;
1331  V_BSTR(&v) = a2bstr("3px");
1332  hres = IHTMLStyle_put_top(style, v);
1333  ok(hres == S_OK, "put_top failed: %08x\n", hres);
1334  VariantClear(&v);
1335 
1336  V_VT(&v) = VT_EMPTY;
1337  hres = IHTMLStyle_get_top(style, &v);
1338  ok(hres == S_OK, "get_top failed: %08x\n", hres);
1339  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
1340  ok(!strcmp_wa(V_BSTR(&v), "3px"), "V_BSTR(v) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
1341  VariantClear(&v);
1342 
1343  hres = IHTMLStyle_get_posTop(style, &f);
1344  ok(hres == S_OK, "get_posTop failed: %08x\n", hres);
1345  ok(f == 3.0, "expected 3.0 got %f\n", f);
1346 
1347  l = 0xdeadbeef;
1348  hres = IHTMLStyle_get_pixelTop(style, &l);
1349  ok(hres == S_OK, "get_pixelTop failed: %08x\n", hres);
1350  ok(l == 3, "pixelTop = %d\n", l);
1351 
1352  V_VT(&v) = VT_NULL;
1353  hres = IHTMLStyle_put_top(style, v);
1354  ok(hres == S_OK, "put_top failed: %08x\n", hres);
1355 
1356  V_VT(&v) = VT_EMPTY;
1357  hres = IHTMLStyle_get_top(style, &v);
1358  ok(hres == S_OK, "get_top failed: %08x\n", hres);
1359  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
1360  ok(!V_BSTR(&v), "V_BSTR(v) != NULL\n");
1361  VariantClear(&v);
1362 
1363  l = 0xdeadbeef;
1364  hres = IHTMLStyle_get_pixelTop(style, &l);
1365  ok(hres == S_OK, "get_pixelTop failed: %08x\n", hres);
1366  ok(!l, "pixelTop = %d\n", l);
1367 
1368  /* Test posHeight */
1369  hres = IHTMLStyle_get_posHeight(style, NULL);
1370  ok(hres == E_POINTER, "get_posHeight failed: %08x\n", hres);
1371 
1372  V_VT(&v) = VT_EMPTY;
1373  hres = IHTMLStyle_get_height(style, &v);
1374  ok(hres == S_OK, "get_height failed: %08x\n", hres);
1375  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
1376  ok(!V_BSTR(&v), "V_BSTR(v) != NULL\n");
1377  VariantClear(&v);
1378 
1379  f = 1.0f;
1380  hres = IHTMLStyle_get_posHeight(style, &f);
1381  ok(hres == S_OK, "get_posHeight failed: %08x\n", hres);
1382  ok(f == 0.0, "expected 0.0 got %f\n", f);
1383 
1384  l = 0xdeadbeef;
1385  hres = IHTMLStyle_get_pixelHeight(style, &l);
1386  ok(hres == S_OK, "get_pixelHeight failed: %08x\n", hres);
1387  ok(!l, "pixelHeight = %d\n", l);
1388 
1389  hres = IHTMLStyle_put_posHeight(style, 4.9f);
1390  ok(hres == S_OK, "put_posHeight failed: %08x\n", hres);
1391 
1392  hres = IHTMLStyle_get_posHeight(style, &f);
1393  ok(hres == S_OK, "get_posHeight failed: %08x\n", hres);
1394  ok(f == 4.0 ||
1395  f == 4.9f, /* IE8 */
1396  "expected 4.0 or 4.9 (IE8) got %f\n", f);
1397 
1398  l = 0xdeadbeef;
1399  hres = IHTMLStyle_get_pixelHeight(style, &l);
1400  ok(hres == S_OK, "get_pixelHeight failed: %08x\n", hres);
1401  ok(l == 4 ||
1402  l == 5, /* IE8 */
1403  "pixelHeight = %d\n", l);
1404 
1405  V_VT(&v) = VT_BSTR;
1406  V_BSTR(&v) = a2bstr("70px");
1407  hres = IHTMLStyle_put_height(style, v);
1408  ok(hres == S_OK, "put_height failed: %08x\n", hres);
1409  VariantClear(&v);
1410 
1411  V_VT(&v) = VT_EMPTY;
1412  hres = IHTMLStyle_get_height(style, &v);
1413  ok(hres == S_OK, "get_height failed: %08x\n", hres);
1414  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
1415  ok(!strcmp_wa(V_BSTR(&v), "70px"), "V_BSTR(v) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
1416  VariantClear(&v);
1417 
1418  l = 0xdeadbeef;
1419  hres = IHTMLStyle_get_pixelHeight(style, &l);
1420  ok(hres == S_OK, "get_pixelHeight failed: %08x\n", hres);
1421  ok(l == 70, "pixelHeight = %d\n", l);
1422 
1423  V_VT(&v) = VT_BSTR;
1424  V_BSTR(&v) = NULL;
1425  hres = IHTMLStyle_put_height(style, v);
1426  ok(hres == S_OK, "put_height failed: %08x\n", hres);
1427  VariantClear(&v);
1428 
1429  V_VT(&v) = VT_EMPTY;
1430  hres = IHTMLStyle_get_height(style, &v);
1431  ok(hres == S_OK, "get_height failed: %08x\n", hres);
1432  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
1433  ok(!V_BSTR(&v), "V_BSTR(v) = %s, expected NULL\n", wine_dbgstr_w(V_BSTR(&v)));
1434  VariantClear(&v);
1435 
1436  l = 0xdeadbeef;
1437  hres = IHTMLStyle_get_pixelHeight(style, &l);
1438  ok(hres == S_OK, "get_pixelHeight failed: %08x\n", hres);
1439  ok(!l, "pixelHeight = %d\n", l);
1440 
1441  hres = IHTMLStyle_put_pixelHeight(style, 50);
1442  ok(hres == S_OK, "put_pixelHeight failed: %08x\n", hres);
1443 
1444  l = 0xdeadbeef;
1445  hres = IHTMLStyle_get_pixelHeight(style, &l);
1446  ok(hres == S_OK, "get_pixelHeight failed: %08x\n", hres);
1447  ok(l == 50, "pixelHeight = %d\n", l);
1448 
1449  hres = IHTMLStyle_get_pixelHeight(style, NULL);
1450  ok(hres == E_POINTER, "get_pixelHeight failed: %08x\n", hres);
1451 
1452  V_VT(&v) = VT_I4;
1453  V_I4(&v) = 64;
1454  hres = IHTMLStyle_put_height(style, v);
1455  ok(hres == S_OK, "put_height failed: %08x\n", hres);
1456 
1457  V_VT(&v) = VT_EMPTY;
1458  hres = IHTMLStyle_get_height(style, &v);
1459  ok(hres == S_OK, "get_height failed: %08x\n", hres);
1460  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
1461  ok(!strcmp_wa(V_BSTR(&v), "64px"), "V_BSTR(v) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
1462  VariantClear(&v);
1463 
1464  hres = IHTMLStyle_get_posHeight(style, &f);
1465  ok(hres == S_OK, "get_posHeight failed: %08x\n", hres);
1466  ok(f == 64.0, "expected 64.0 got %f\n", f);
1467 
1468  l = 0xdeadbeef;
1469  hres = IHTMLStyle_get_pixelHeight(style, &l);
1470  ok(hres == S_OK, "get_pixelHeight failed: %08x\n", hres);
1471  ok(l == 64, "pixelHeight = %d\n", l);
1472 
1473  str = (void*)0xdeadbeef;
1474  hres = IHTMLStyle_get_cursor(style, &str);
1475  ok(hres == S_OK, "get_cursor failed: %08x\n", hres);
1476  ok(!str, "get_cursor != NULL\n");
1477  SysFreeString(str);
1478 
1479  str = a2bstr("default");
1480  hres = IHTMLStyle_put_cursor(style, str);
1481  ok(hres == S_OK, "put_cursor failed: %08x\n", hres);
1482  SysFreeString(str);
1483 
1484  str = NULL;
1485  hres = IHTMLStyle_get_cursor(style, &str);
1486  ok(hres == S_OK, "get_cursor failed: %08x\n", hres);
1487  ok(!strcmp_wa(str, "default"), "get_cursor returned %s\n", wine_dbgstr_w(str));
1488  SysFreeString(str);
1489 
1490  V_VT(&v) = VT_EMPTY;
1491  hres = IHTMLStyle_get_verticalAlign(style, &v);
1492  ok(hres == S_OK, "get_vertivalAlign failed: %08x\n", hres);
1493  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
1494  ok(!V_BSTR(&v), "V_BSTR(v) != NULL\n");
1495  VariantClear(&v);
1496 
1497  V_VT(&v) = VT_BSTR;
1498  V_BSTR(&v) = a2bstr("middle");
1499  hres = IHTMLStyle_put_verticalAlign(style, v);
1500  ok(hres == S_OK, "put_vertivalAlign failed: %08x\n", hres);
1501  VariantClear(&v);
1502 
1503  V_VT(&v) = VT_EMPTY;
1504  hres = IHTMLStyle_get_verticalAlign(style, &v);
1505  ok(hres == S_OK, "get_verticalAlign failed: %08x\n", hres);
1506  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
1507  ok(!strcmp_wa(V_BSTR(&v), "middle"), "V_BSTR(v) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
1508  VariantClear(&v);
1509 
1510  V_VT(&v) = VT_I4;
1511  V_I4(&v) = 100;
1512  hres = IHTMLStyle_put_verticalAlign(style, v);
1513  ok(hres == S_OK, "put_vertivalAlign failed: %08x\n", hres);
1514  VariantClear(&v);
1515 
1516  V_VT(&v) = VT_EMPTY;
1517  hres = IHTMLStyle_get_verticalAlign(style, &v);
1518  ok(hres == S_OK, "get_verticalAlign failed: %08x\n", hres);
1519  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
1520  ok(!strcmp_wa(V_BSTR(&v), "100px"), "V_BSTR(v) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
1521  VariantClear(&v);
1522 
1523  str = (void*)0xdeadbeef;
1524  hres = IHTMLStyle_get_textAlign(style, &str);
1525  ok(hres == S_OK, "get_textAlign failed: %08x\n", hres);
1526  ok(!str, "textAlign != NULL\n");
1527 
1528  str = a2bstr("center");
1529  hres = IHTMLStyle_put_textAlign(style, str);
1530  ok(hres == S_OK, "put_textAlign failed: %08x\n", hres);
1531  SysFreeString(str);
1532 
1533  str = NULL;
1534  hres = IHTMLStyle_get_textAlign(style, &str);
1535  ok(hres == S_OK, "get_textAlign failed: %08x\n", hres);
1536  ok(!strcmp_wa(str, "center"), "textAlign = %s\n", wine_dbgstr_w(V_BSTR(&v)));
1537  SysFreeString(str);
1538 
1539  V_VT(&v) = VT_NULL;
1540  hres = IHTMLStyle_get_textIndent(style, &v);
1541  ok(hres == S_OK, "get_textIndent failed: %08x\n", hres);
1542  ok(V_VT(&v) == VT_BSTR, "V_VT(textIndent) = %d\n", V_VT(&v));
1543  ok(!V_BSTR(&v), "V_BSTR(textIndent) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
1544 
1545  V_VT(&v) = VT_I4;
1546  V_I4(&v) = 6;
1547  hres = IHTMLStyle_put_textIndent(style, v);
1548  ok(hres == S_OK, "put_textIndent failed: %08x\n", hres);
1549 
1550  V_VT(&v) = VT_NULL;
1551  hres = IHTMLStyle_get_textIndent(style, &v);
1552  ok(hres == S_OK, "get_textIndent failed: %08x\n", hres);
1553  ok(V_VT(&v) == VT_BSTR, "V_VT(textIndent) = %d\n", V_VT(&v));
1554  ok(!strcmp_wa(V_BSTR(&v), "6px"), "V_BSTR(textIndent) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
1555 
1556  str = (void*)0xdeadbeef;
1557  hres = IHTMLStyle_get_textTransform(style, &str);
1558  ok(hres == S_OK, "get_textTransform failed: %08x\n", hres);
1559  ok(!str, "textTransform != NULL\n");
1560 
1561  str = a2bstr("lowercase");
1562  hres = IHTMLStyle_put_textTransform(style, str);
1563  ok(hres == S_OK, "put_textTransform failed: %08x\n", hres);
1564  SysFreeString(str);
1565 
1566  str = NULL;
1567  hres = IHTMLStyle_get_textTransform(style, &str);
1568  ok(hres == S_OK, "get_textTransform failed: %08x\n", hres);
1569  ok(!strcmp_wa(str, "lowercase"), "textTransform = %s\n", wine_dbgstr_w(V_BSTR(&v)));
1570  SysFreeString(str);
1571 
1572  str = (void*)0xdeadbeef;
1573  hres = IHTMLStyle_get_filter(style, &str);
1574  ok(hres == S_OK, "get_filter failed: %08x\n", hres);
1575  ok(!str, "filter != NULL\n");
1576 
1577  str = a2bstr("alpha(opacity=100)");
1578  hres = IHTMLStyle_put_filter(style, str);
1579  ok(hres == S_OK, "put_filter failed: %08x\n", hres);
1580  SysFreeString(str);
1581 
1582  V_VT(&v) = VT_EMPTY;
1583  hres = IHTMLStyle_get_zIndex(style, &v);
1584  ok(hres == S_OK, "get_zIndex failed: %08x\n", hres);
1585  ok(V_VT(&v) == VT_I4, "V_VT(v)=%d\n", V_VT(&v));
1586  ok(!V_I4(&v), "V_I4(v) != 0\n");
1587  VariantClear(&v);
1588 
1589  V_VT(&v) = VT_BSTR;
1590  V_BSTR(&v) = a2bstr("1");
1591  hres = IHTMLStyle_put_zIndex(style, v);
1592  ok(hres == S_OK, "put_zIndex failed: %08x\n", hres);
1593  VariantClear(&v);
1594 
1595  V_VT(&v) = VT_EMPTY;
1596  hres = IHTMLStyle_get_zIndex(style, &v);
1597  ok(hres == S_OK, "get_zIndex failed: %08x\n", hres);
1598  ok(V_VT(&v) == VT_I4, "V_VT(v)=%d\n", V_VT(&v));
1599  ok(V_I4(&v) == 1, "V_I4(v) = %d\n", V_I4(&v));
1600  VariantClear(&v);
1601 
1602  /* fontStyle */
1603  hres = IHTMLStyle_get_fontStyle(style, &sDefault);
1604  ok(hres == S_OK, "get_fontStyle failed: %08x\n", hres);
1605 
1606  str = a2bstr("test");
1607  hres = IHTMLStyle_put_fontStyle(style, str);
1608  ok(hres == E_INVALIDARG, "put_fontStyle failed: %08x\n", hres);
1609  SysFreeString(str);
1610 
1611  str = a2bstr("italic");
1612  hres = IHTMLStyle_put_fontStyle(style, str);
1613  ok(hres == S_OK, "put_fontStyle failed: %08x\n", hres);
1614  SysFreeString(str);
1615 
1616  str = a2bstr("oblique");
1617  hres = IHTMLStyle_put_fontStyle(style, str);
1618  ok(hres == S_OK, "put_fontStyle failed: %08x\n", hres);
1619  SysFreeString(str);
1620 
1621  str = a2bstr("normal");
1622  hres = IHTMLStyle_put_fontStyle(style, str);
1623  ok(hres == S_OK, "put_fontStyle failed: %08x\n", hres);
1624  SysFreeString(str);
1625 
1626  hres = IHTMLStyle_put_fontStyle(style, sDefault);
1627  ok(hres == S_OK, "put_fontStyle failed: %08x\n", hres);
1628  SysFreeString(sDefault);
1629 
1630  /* overflow */
1631  hres = IHTMLStyle_get_overflow(style, NULL);
1632  ok(hres == E_INVALIDARG, "get_overflow failed: %08x\n", hres);
1633 
1634  hres = IHTMLStyle_get_overflow(style, &sOverflowDefault);
1635  ok(hres == S_OK, "get_overflow failed: %08x\n", hres);
1636 
1637  str = a2bstr("test");
1638  hres = IHTMLStyle_put_overflow(style, str);
1639  ok(hres == E_INVALIDARG, "put_overflow failed: %08x\n", hres);
1640  SysFreeString(str);
1641 
1642  str = a2bstr("visible");
1643  hres = IHTMLStyle_put_overflow(style, str);
1644  ok(hres == S_OK, "put_overflow failed: %08x\n", hres);
1645  SysFreeString(str);
1646 
1647  str = a2bstr("scroll");
1648  hres = IHTMLStyle_put_overflow(style, str);
1649  ok(hres == S_OK, "put_overflow failed: %08x\n", hres);
1650  SysFreeString(str);
1651 
1652  str = a2bstr("hidden");
1653  hres = IHTMLStyle_put_overflow(style, str);
1654  ok(hres == S_OK, "put_overflow failed: %08x\n", hres);
1655  SysFreeString(str);
1656 
1657  str = a2bstr("auto");
1658  hres = IHTMLStyle_put_overflow(style, str);
1659  ok(hres == S_OK, "put_overflow failed: %08x\n", hres);
1660  SysFreeString(str);
1661 
1662  hres = IHTMLStyle_get_overflow(style, &str);
1663  ok(hres == S_OK, "get_overflow failed: %08x\n", hres);
1664  ok(!strcmp_wa(str, "auto"), "str=%s\n", wine_dbgstr_w(str));
1665  SysFreeString(str);
1666 
1667  str = a2bstr("");
1668  hres = IHTMLStyle_put_overflow(style, str);
1669  ok(hres == S_OK, "put_overflow failed: %08x\n", hres);
1670  SysFreeString(str);
1671 
1672  hres = IHTMLStyle_get_overflow(style, &str);
1673  ok(hres == S_OK, "get_overflow failed: %08x\n", hres);
1674  ok(!str, "str=%s\n", wine_dbgstr_w(str));
1675  SysFreeString(str);
1676 
1677  /* restore overflow default */
1678  hres = IHTMLStyle_put_overflow(style, sOverflowDefault);
1679  ok(hres == S_OK, "put_overflow failed: %08x\n", hres);
1680  SysFreeString(sOverflowDefault);
1681 
1682  /* Attribute Tests*/
1683  hres = IHTMLStyle_getAttribute(style, NULL, 1, &v);
1684  ok(hres == E_INVALIDARG, "getAttribute failed: %08x\n", hres);
1685 
1686  str = a2bstr("position");
1687  hres = IHTMLStyle_getAttribute(style, str, 1, NULL);
1688  ok(hres == E_INVALIDARG, "getAttribute failed: %08x\n", hres);
1689 
1690  hres = IHTMLStyle_getAttribute(style, str, 1, &v);
1691  ok(hres == S_OK, "getAttribute failed: %08x\n", hres);
1692  ok(V_VT(&v) == VT_BSTR, "type failed: %d\n", V_VT(&v));
1693  VariantClear(&v);
1694 
1695  hres = IHTMLStyle_setAttribute(style, NULL, v, 1);
1696  ok(hres == E_INVALIDARG, "setAttribute failed: %08x\n", hres);
1697 
1698  V_VT(&v) = VT_BSTR;
1699  V_BSTR(&v) = a2bstr("absolute");
1700  hres = IHTMLStyle_setAttribute(style, str, v, 1);
1701  ok(hres == S_OK, "setAttribute failed: %08x\n", hres);
1702  VariantClear(&v);
1703 
1704  hres = IHTMLStyle_getAttribute(style, str, 1, &v);
1705  ok(hres == S_OK, "getAttribute failed: %08x\n", hres);
1706  ok(V_VT(&v) == VT_BSTR, "type failed: %d\n", V_VT(&v));
1707  ok(!strcmp_wa(V_BSTR(&v), "absolute"), "str=%s\n", wine_dbgstr_w(V_BSTR(&v)));
1708  VariantClear(&v);
1709 
1710  V_VT(&v) = VT_BSTR;
1711  V_BSTR(&v) = NULL;
1712  hres = IHTMLStyle_setAttribute(style, str, v, 1);
1713  ok(hres == S_OK, "setAttribute failed: %08x\n", hres);
1714  VariantClear(&v);
1715 
1716  SysFreeString(str);
1717 
1718  str = a2bstr("borderLeftStyle");
1720  SysFreeString(str);
1721 
1722  str = a2bstr("borderbottomstyle");
1724  SysFreeString(str);
1725 
1726  str = a2bstr("borderrightstyle");
1728  SysFreeString(str);
1729 
1730  str = a2bstr("bordertopstyle");
1732  SysFreeString(str);
1733 
1734  hres = IHTMLStyle_get_borderStyle(style, &sDefault);
1735  ok(hres == S_OK, "get_borderStyle failed: %08x\n", hres);
1736 
1737  str = a2bstr("none dotted dashed solid");
1738  hres = IHTMLStyle_put_borderStyle(style, str);
1739  ok(hres == S_OK, "put_borderStyle failed: %08x\n", hres);
1740  SysFreeString(str);
1741 
1742  str = a2bstr("none dotted dashed solid");
1743  hres = IHTMLStyle_get_borderStyle(style, &str);
1744  ok(hres == S_OK, "get_borderStyle failed: %08x\n", hres);
1745  ok(!strcmp_wa(str, "none dotted dashed solid"),
1746  "expected (none dotted dashed solid) = (%s)\n", wine_dbgstr_w(V_BSTR(&v)));
1747  SysFreeString(str);
1748 
1749  str = a2bstr("double groove ridge inset");
1750  hres = IHTMLStyle_put_borderStyle(style, str);
1751  ok(hres == S_OK, "put_borderStyle failed: %08x\n", hres);
1752  SysFreeString(str);
1753 
1754  str = a2bstr("window-inset outset ridge inset");
1755  hres = IHTMLStyle_put_borderStyle(style, str);
1756  ok(hres == S_OK, "put_borderStyle failed: %08x\n", hres);
1757  SysFreeString(str);
1758 
1759  str = a2bstr("window-inset");
1760  hres = IHTMLStyle_put_borderStyle(style, str);
1761  ok(hres == S_OK, "put_borderStyle failed: %08x\n", hres);
1762  SysFreeString(str);
1763 
1764  str = a2bstr("none none none none none");
1765  hres = IHTMLStyle_put_borderStyle(style, str);
1766  ok(hres == S_OK, "put_borderStyle failed: %08x\n", hres);
1767  SysFreeString(str);
1768 
1769  str = a2bstr("invalid none none none");
1770  hres = IHTMLStyle_put_borderStyle(style, str);
1771  ok(hres == E_INVALIDARG, "put_borderStyle failed: %08x\n", hres);
1772  SysFreeString(str);
1773 
1774  str = a2bstr("none invalid none none");
1775  hres = IHTMLStyle_put_borderStyle(style, str);
1776  ok(hres == E_INVALIDARG, "put_borderStyle failed: %08x\n", hres);
1777  SysFreeString(str);
1778 
1779  hres = IHTMLStyle_put_borderStyle(style, sDefault);
1780  ok(hres == S_OK, "put_borderStyle failed: %08x\n", hres);
1781  SysFreeString(sDefault);
1782 
1783  /* backgoundColor */
1784  hres = IHTMLStyle_get_backgroundColor(style, &v);
1785  ok(hres == S_OK, "get_backgroundColor: %08x\n", hres);
1786  ok(V_VT(&v) == VT_BSTR, "type failed: %d\n", V_VT(&v));
1787  ok(!V_BSTR(&v), "str=%s\n", wine_dbgstr_w(V_BSTR(&v)));
1788  VariantClear(&v);
1789 
1790  V_VT(&v) = VT_BSTR;
1791  V_BSTR(&v) = a2bstr("red");
1792  hres = IHTMLStyle_put_backgroundColor(style, v);
1793  ok(hres == S_OK, "put_backgroundColor failed: %08x\n", hres);
1794  VariantClear(&v);
1795 
1796  hres = IHTMLStyle_get_backgroundColor(style, &v);
1797  ok(hres == S_OK, "get_backgroundColor: %08x\n", hres);
1798  ok(V_VT(&v) == VT_BSTR, "type failed: %d\n", V_VT(&v));
1799  ok(!strcmp_wa(V_BSTR(&v), "red"), "str=%s\n", wine_dbgstr_w(V_BSTR(&v)));
1800  VariantClear(&v);
1801 
1802  str = a2bstr("fixed");
1803  hres = IHTMLStyle_put_backgroundAttachment(style, str);
1804  ok(hres == S_OK, "put_backgroundAttachment failed: %08x\n", hres);
1805  SysFreeString(str);
1806 
1807  hres = IHTMLStyle_get_backgroundAttachment(style, &str);
1808  ok(hres == S_OK, "get_backgroundAttachment failed: %08x\n", hres);
1809  ok(!strcmp_wa(str, "fixed"), "ret = %s\n", wine_dbgstr_w(str));
1810  SysFreeString(str);
1811 
1812  /* padding */
1813  hres = IHTMLStyle_get_padding(style, &str);
1814  ok(hres == S_OK, "get_padding failed: %08x\n", hres);
1815  ok(!str, "padding = %s\n", wine_dbgstr_w(str));
1816  SysFreeString(str);
1817 
1818  hres = IHTMLStyle_get_paddingTop(style, &v);
1819  ok(hres == S_OK, "get_paddingTop: %08x\n", hres);
1820  ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
1821  ok(!V_BSTR(&v), "V_BSTR(v) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
1822 
1823  V_VT(&v) = VT_I4;
1824  V_I4(&v) = 6;
1825  hres = IHTMLStyle_put_paddingTop(style, v);
1826  ok(hres == S_OK, "put_paddingTop failed: %08x\n", hres);
1827 
1828  hres = IHTMLStyle_get_paddingTop(style, &v);
1829  ok(hres == S_OK, "get_paddingTop: %08x\n", hres);
1830  ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
1831  ok(!strcmp_wa(V_BSTR(&v), "6px"), "V_BSTR(v) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
1832  VariantClear(&v);
1833 
1834  hres = IHTMLStyle_get_paddingRight(style, &v);
1835  ok(hres == S_OK, "get_paddingRight: %08x\n", hres);
1836  ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
1837  ok(!V_BSTR(&v), "V_BSTR(v) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
1838 
1839  V_VT(&v) = VT_I4;
1840  V_I4(&v) = 6;
1841  hres = IHTMLStyle_put_paddingRight(style, v);
1842  ok(hres == S_OK, "put_paddingRight failed: %08x\n", hres);
1843 
1844  hres = IHTMLStyle_get_paddingRight(style, &v);
1845  ok(hres == S_OK, "get_paddingRight: %08x\n", hres);
1846  ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
1847  ok(!strcmp_wa(V_BSTR(&v), "6px"), "V_BSTR(v) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
1848  VariantClear(&v);
1849 
1850  hres = IHTMLStyle_get_paddingBottom(style, &v);
1851  ok(hres == S_OK, "get_paddingBottom: %08x\n", hres);
1852  ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
1853  ok(!V_BSTR(&v), "V_BSTR(v) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
1854 
1855  V_VT(&v) = VT_I4;
1856  V_I4(&v) = 6;
1857  hres = IHTMLStyle_put_paddingBottom(style, v);
1858  ok(hres == S_OK, "put_paddingBottom failed: %08x\n", hres);
1859 
1860  hres = IHTMLStyle_get_paddingBottom(style, &v);
1861  ok(hres == S_OK, "get_paddingBottom: %08x\n", hres);
1862  ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
1863  ok(!strcmp_wa(V_BSTR(&v), "6px"), "V_BSTR(v) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
1864  VariantClear(&v);
1865 
1866  str = a2bstr("1");
1867  hres = IHTMLStyle_put_padding(style, str);
1868  ok(hres == S_OK, "put_padding failed: %08x\n", hres);
1869  SysFreeString(str);
1870 
1871  hres = IHTMLStyle_get_padding(style, &str);
1872  ok(hres == S_OK, "get_padding failed: %08x\n", hres);
1873  ok(!strcmp_wa(str, "1px"), "padding = %s\n", wine_dbgstr_w(str));
1874  SysFreeString(str);
1875 
1876  /* PaddingLeft */
1877  hres = IHTMLStyle_get_paddingLeft(style, &vDefault);
1878  ok(hres == S_OK, "get_paddingLeft: %08x\n", hres);
1879  ok(V_VT(&vDefault) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&vDefault));
1880  ok(!strcmp_wa(V_BSTR(&vDefault), "1px"), "V_BSTR(v) = %s\n", wine_dbgstr_w(V_BSTR(&vDefault)));
1881 
1882  V_VT(&v) = VT_BSTR;
1883  V_BSTR(&v) = a2bstr("10");
1884  hres = IHTMLStyle_put_paddingLeft(style, v);
1885  ok(hres == S_OK, "put_paddingLeft: %08x\n", hres);
1886  VariantClear(&v);
1887 
1888  hres = IHTMLStyle_get_paddingLeft(style, &v);
1889  ok(hres == S_OK, "get_paddingLeft: %08x\n", hres);
1890  ok(!strcmp_wa(V_BSTR(&v), "10px"), "expecte 10 = %s\n", wine_dbgstr_w(V_BSTR(&v)));
1891  VariantClear(&v);
1892 
1893  hres = IHTMLStyle_put_paddingLeft(style, vDefault);
1894  ok(hres == S_OK, "put_paddingLeft: %08x\n", hres);
1895 
1896  /* BackgroundRepeat */
1897  hres = IHTMLStyle_get_backgroundRepeat(style, &sDefault);
1898  ok(hres == S_OK, "get_backgroundRepeat failed: %08x\n", hres);
1899 
1900  str = a2bstr("invalid");
1901  hres = IHTMLStyle_put_backgroundRepeat(style, str);
1902  ok(hres == E_INVALIDARG, "put_backgroundRepeat failed: %08x\n", hres);
1903  SysFreeString(str);
1904 
1905  str = a2bstr("repeat");
1906  hres = IHTMLStyle_put_backgroundRepeat(style, str);
1907  ok(hres == S_OK, "put_backgroundRepeat failed: %08x\n", hres);
1908  SysFreeString(str);
1909 
1910  str = a2bstr("no-repeat");
1911  hres = IHTMLStyle_put_backgroundRepeat(style, str);
1912  ok(hres == S_OK, "put_backgroundRepeat failed: %08x\n", hres);
1913  SysFreeString(str);
1914 
1915  str = a2bstr("repeat-x");
1916  hres = IHTMLStyle_put_backgroundRepeat(style, str);
1917  ok(hres == S_OK, "put_backgroundRepeat failed: %08x\n", hres);
1918  SysFreeString(str);
1919 
1920  str = a2bstr("repeat-y");
1921  hres = IHTMLStyle_put_backgroundRepeat(style, str);
1922  ok(hres == S_OK, "put_backgroundRepeat failed: %08x\n", hres);
1923  SysFreeString(str);
1924 
1925  hres = IHTMLStyle_get_backgroundRepeat(style, &str);
1926  ok(hres == S_OK, "get_backgroundRepeat failed: %08x\n", hres);
1927  ok(!strcmp_wa(str, "repeat-y"), "str=%s\n", wine_dbgstr_w(str));
1928  SysFreeString(str);
1929 
1930  hres = IHTMLStyle_put_backgroundRepeat(style, sDefault);
1931  ok(hres == S_OK, "put_backgroundRepeat failed: %08x\n", hres);
1932  SysFreeString(sDefault);
1933 
1934  /* BorderColor */
1935  hres = IHTMLStyle_get_borderColor(style, &sDefault);
1936  ok(hres == S_OK, "get_borderColor failed: %08x\n", hres);
1937 
1938  str = a2bstr("red green red blue");
1939  hres = IHTMLStyle_put_borderColor(style, str);
1940  ok(hres == S_OK, "put_borderColor failed: %08x\n", hres);
1941  SysFreeString(str);
1942 
1943  hres = IHTMLStyle_get_borderColor(style, &str);
1944  ok(hres == S_OK, "get_borderColor failed: %08x\n", hres);
1945  ok(!strcmp_wa(str, "red green red blue"), "str=%s\n", wine_dbgstr_w(str));
1946  SysFreeString(str);
1947 
1948  hres = IHTMLStyle_put_borderColor(style, sDefault);
1949  ok(hres == S_OK, "put_borderColor failed: %08x\n", hres);
1950  SysFreeString(sDefault);
1951 
1952  /* BorderRight */
1953  hres = IHTMLStyle_get_borderRight(style, &sDefault);
1954  ok(hres == S_OK, "get_borderRight failed: %08x\n", hres);
1955 
1956  str = a2bstr("thick dotted red");
1957  hres = IHTMLStyle_put_borderRight(style, str);
1958  ok(hres == S_OK, "put_borderRight failed: %08x\n", hres);
1959  SysFreeString(str);
1960 
1961  /* IHTMLStyle_get_borderRight appears to have a bug where
1962  it returns the first letter of the color. So we check
1963  each style individually.
1964  */
1965  V_BSTR(&v) = NULL;
1966  hres = IHTMLStyle_get_borderRightColor(style, &v);
1967  ok(hres == S_OK, "get_borderRightColor failed: %08x\n", hres);
1968  ok(!strcmp_wa(V_BSTR(&v), "red"), "str=%s\n", wine_dbgstr_w(V_BSTR(&v)));
1969  VariantClear(&v);
1970 
1971  V_BSTR(&v) = NULL;
1972  hres = IHTMLStyle_get_borderRightWidth(style, &v);
1973  ok(hres == S_OK, "get_borderRightWidth failed: %08x\n", hres);
1974  ok(!strcmp_wa(V_BSTR(&v), "thick"), "str=%s\n", wine_dbgstr_w(V_BSTR(&v)));
1975  VariantClear(&v);
1976 
1977  hres = IHTMLStyle_get_borderRightStyle(style, &str);
1978  ok(hres == S_OK, "get_borderRightStyle failed: %08x\n", hres);
1979  ok(!strcmp_wa(str, "dotted"), "str=%s\n", wine_dbgstr_w(str));
1980  SysFreeString(str);
1981 
1982  hres = IHTMLStyle_put_borderRight(style, sDefault);
1983  ok(hres == S_OK, "put_borderRight failed: %08x\n", hres);
1984  SysFreeString(sDefault);
1985 
1986  /* BorderTop */
1987  hres = IHTMLStyle_get_borderTop(style, &sDefault);
1988  ok(hres == S_OK, "get_borderTop failed: %08x\n", hres);
1989 
1990  str = a2bstr("thick dotted red");
1991  hres = IHTMLStyle_put_borderTop(style, str);
1992  ok(hres == S_OK, "put_borderTop failed: %08x\n", hres);
1993  SysFreeString(str);
1994 
1995  /* IHTMLStyle_get_borderTop appears to have a bug where
1996  it returns the first letter of the color. So we check
1997  each style individually.
1998  */
1999  V_BSTR(&v) = NULL;
2000  hres = IHTMLStyle_get_borderTopColor(style, &v);
2001  ok(hres == S_OK, "get_borderTopColor failed: %08x\n", hres);
2002  ok(!strcmp_wa(V_BSTR(&v), "red"), "str=%s\n", wine_dbgstr_w(V_BSTR(&v)));
2003  VariantClear(&v);
2004 
2005  V_BSTR(&v) = NULL;
2006  hres = IHTMLStyle_get_borderTopWidth(style, &v);
2007  ok(hres == S_OK, "get_borderTopWidth failed: %08x\n", hres);
2008  ok(!strcmp_wa(V_BSTR(&v), "thick"), "str=%s\n", wine_dbgstr_w(V_BSTR(&v)));
2009  VariantClear(&v);
2010 
2011  hres = IHTMLStyle_get_borderTopStyle(style, &str);
2012  ok(hres == S_OK, "get_borderTopStyle failed: %08x\n", hres);
2013  ok(!strcmp_wa(str, "dotted"), "str=%s\n", wine_dbgstr_w(str));
2014  SysFreeString(str);
2015 
2016  hres = IHTMLStyle_put_borderTop(style, sDefault);
2017  ok(hres == S_OK, "put_borderTop failed: %08x\n", hres);
2018  SysFreeString(sDefault);
2019 
2020  /* BorderBottom */
2021  hres = IHTMLStyle_get_borderBottom(style, &sDefault);
2022  ok(hres == S_OK, "get_borderBottom failed: %08x\n", hres);
2023 
2024  str = a2bstr("thick dotted red");
2025  hres = IHTMLStyle_put_borderBottom(style, str);
2026  ok(hres == S_OK, "put_borderBottom failed: %08x\n", hres);
2027  SysFreeString(str);
2028 
2029  /* IHTMLStyle_get_borderBottom appears to have a bug where
2030  it returns the first letter of the color. So we check
2031  each style individually.
2032  */
2033  V_BSTR(&v) = NULL;
2034  hres = IHTMLStyle_get_borderBottomColor(style, &v);
2035  ok(hres == S_OK, "get_borderBottomColor failed: %08x\n", hres);
2036  ok(!strcmp_wa(V_BSTR(&v), "red"), "str=%s\n", wine_dbgstr_w(V_BSTR(&v)));
2037  VariantClear(&v);
2038 
2039  V_BSTR(&v) = NULL;
2040  hres = IHTMLStyle_get_borderBottomWidth(style, &v);
2041  ok(hres == S_OK, "get_borderBottomWidth failed: %08x\n", hres);
2042  ok(!strcmp_wa(V_BSTR(&v), "thick"), "str=%s\n", wine_dbgstr_w(V_BSTR(&v)));
2043  VariantClear(&v);
2044 
2045  hres = IHTMLStyle_get_borderBottomStyle(style, &str);
2046  ok(hres == S_OK, "get_borderBottomStyle failed: %08x\n", hres);
2047  ok(!strcmp_wa(str, "dotted"), "str=%s\n", wine_dbgstr_w(str));
2048  SysFreeString(str);
2049 
2050  hres = IHTMLStyle_put_borderBottom(style, sDefault);
2051  ok(hres == S_OK, "put_borderBottom failed: %08x\n", hres);
2052  SysFreeString(sDefault);
2053 
2054  /* BorderLeft */
2055  hres = IHTMLStyle_get_borderLeft(style, &sDefault);
2056  ok(hres == S_OK, "get_borderLeft failed: %08x\n", hres);
2057 
2058  str = a2bstr("thick dotted red");
2059  hres = IHTMLStyle_put_borderLeft(style, str);
2060  ok(hres == S_OK, "put_borderLeft failed: %08x\n", hres);
2061  SysFreeString(str);
2062 
2063  /* IHTMLStyle_get_borderLeft appears to have a bug where
2064  it returns the first letter of the color. So we check
2065  each style individually.
2066  */
2067  V_BSTR(&v) = NULL;
2068  hres = IHTMLStyle_get_borderLeftColor(style, &v);
2069  ok(hres == S_OK, "get_borderLeftColor failed: %08x\n", hres);
2070  ok(!strcmp_wa(V_BSTR(&v), "red"), "str=%s\n", wine_dbgstr_w(V_BSTR(&v)));
2071  VariantClear(&v);
2072 
2073  V_BSTR(&v) = NULL;
2074  hres = IHTMLStyle_get_borderLeftWidth(style, &v);
2075  ok(hres == S_OK, "get_borderLeftWidth failed: %08x\n", hres);
2076  ok(!strcmp_wa(V_BSTR(&v), "thick"), "str=%s\n", wine_dbgstr_w(V_BSTR(&v)));
2077  VariantClear(&v);
2078 
2079  hres = IHTMLStyle_get_borderLeftStyle(style, &str);
2080  ok(hres == S_OK, "get_borderLeftStyle failed: %08x\n", hres);
2081  ok(!strcmp_wa(str, "dotted"), "str=%s\n", wine_dbgstr_w(str));
2082  SysFreeString(str);
2083 
2084  hres = IHTMLStyle_put_borderLeft(style, sDefault);
2085  ok(hres == S_OK, "put_borderLeft failed: %08x\n", hres);
2086  SysFreeString(sDefault);
2087 
2088  /* backgroundPositionX */
2089  hres = IHTMLStyle_get_backgroundPositionX(style, &v);
2090  ok(hres == S_OK, "get_backgroundPositionX failed: %08x\n", hres);
2091  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
2092  ok(!V_BSTR(&v), "backgroundPositionX = %s\n", wine_dbgstr_w(V_BSTR(&v)));
2093  VariantClear(&v);
2094 
2095  V_VT(&v) = VT_BSTR;
2096  V_BSTR(&v) = a2bstr("10px");
2097  hres = IHTMLStyle_put_backgroundPositionX(style, v);
2098  ok(hres == S_OK, "put_backgroundPositionX failed: %08x\n", hres);
2099  VariantClear(&v);
2100 
2101  hres = IHTMLStyle_get_backgroundPositionX(style, &v);
2102  ok(hres == S_OK, "get_backgroundPositionX failed: %08x\n", hres);
2103  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
2104  ok(!strcmp_wa(V_BSTR(&v), "10px"), "backgroundPositionX = %s\n", wine_dbgstr_w(V_BSTR(&v)));
2105  VariantClear(&v);
2106 
2107  /* backgroundPositionY */
2108  hres = IHTMLStyle_get_backgroundPositionY(style, &v);
2109  ok(hres == S_OK, "get_backgroundPositionY failed: %08x\n", hres);
2110  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
2111  VariantClear(&v);
2112 
2113  V_VT(&v) = VT_BSTR;
2114  V_BSTR(&v) = a2bstr("15px");
2115  hres = IHTMLStyle_put_backgroundPositionY(style, v);
2116  ok(hres == S_OK, "put_backgroundPositionY failed: %08x\n", hres);
2117  VariantClear(&v);
2118 
2119  hres = IHTMLStyle_get_backgroundPositionY(style, &v);
2120  ok(hres == S_OK, "get_backgroundPositionY failed: %08x\n", hres);
2121  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
2122  ok(!strcmp_wa(V_BSTR(&v), "15px"), "backgroundPositionY = %s\n", wine_dbgstr_w(V_BSTR(&v)));
2123  VariantClear(&v);
2124 
2125  /* backgroundPosition */
2126  str = NULL;
2127  hres = IHTMLStyle_get_backgroundPosition(style, &str);
2128  ok(hres == S_OK, "get_backgroundPosition failed: %08x\n", hres);
2129  ok(!strcmp_wa(str, "10px 15px"), "backgroundPosition = %s\n", wine_dbgstr_w(str));
2130  SysFreeString(str);
2131 
2132  str = a2bstr("center 20%");
2133  hres = IHTMLStyle_put_backgroundPosition(style, str);
2134  ok(hres == S_OK, "put_backgroundPosition failed: %08x\n", hres);
2135  SysFreeString(str);
2136 
2137  str = NULL;
2138  hres = IHTMLStyle_get_backgroundPosition(style, &str);
2139  ok(hres == S_OK, "get_backgroundPosition failed: %08x\n", hres);
2140  ok(!strcmp_wa(str, "center 20%"), "backgroundPosition = %s\n", wine_dbgstr_w(str));
2141  SysFreeString(str);
2142 
2143  hres = IHTMLStyle_get_backgroundPositionX(style, &v);
2144  ok(hres == S_OK, "get_backgroundPositionX failed: %08x\n", hres);
2145  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
2146  ok(!strcmp_wa(V_BSTR(&v), "center"), "backgroundPositionX = %s\n", wine_dbgstr_w(V_BSTR(&v)));
2147  VariantClear(&v);
2148 
2149  hres = IHTMLStyle_get_backgroundPositionY(style, &v);
2150  ok(hres == S_OK, "get_backgroundPositionY failed: %08x\n", hres);
2151  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
2152  ok(!strcmp_wa(V_BSTR(&v), "20%"), "backgroundPositionY = %s\n", wine_dbgstr_w(V_BSTR(&v)));
2153  VariantClear(&v);
2154 
2155  /* borderTopWidth */
2156  hres = IHTMLStyle_get_borderTopWidth(style, &vDefault);
2157  ok(hres == S_OK, "get_borderTopWidth: %08x\n", hres);
2158 
2159  V_VT(&v) = VT_BSTR;
2160  V_BSTR(&v) = a2bstr("10px");
2161  hres = IHTMLStyle_put_borderTopWidth(style, v);
2162  ok(hres == S_OK, "put_borderTopWidth: %08x\n", hres);
2163  VariantClear(&v);
2164 
2165  hres = IHTMLStyle_get_borderTopWidth(style, &v);
2166  ok(hres == S_OK, "get_borderTopWidth: %08x\n", hres);
2167  ok(!strcmp_wa(V_BSTR(&v), "10px"), "expected 10px = %s\n", wine_dbgstr_w(V_BSTR(&v)));
2168  VariantClear(&v);
2169 
2170  hres = IHTMLStyle_put_borderTopWidth(style, vDefault);
2171  ok(hres == S_OK, "put_borderTopWidth: %08x\n", hres);
2172  VariantClear(&vDefault);
2173 
2174  /* borderRightWidth */
2175  hres = IHTMLStyle_get_borderRightWidth(style, &vDefault);
2176  ok(hres == S_OK, "get_borderRightWidth: %08x\n", hres);
2177 
2178  V_VT(&v) = VT_BSTR;
2179  V_BSTR(&v) = a2bstr("10");
2180  hres = IHTMLStyle_put_borderRightWidth(style, v);
2181  ok(hres == S_OK, "put_borderRightWidth: %08x\n", hres);
2182  VariantClear(&v);
2183 
2184  hres = IHTMLStyle_get_borderRightWidth(style, &v);
2185  ok(hres == S_OK, "get_borderRightWidth: %08x\n", hres);
2186  ok(!strcmp_wa(V_BSTR(&v), "10px"), "expected 10px = %s\n", wine_dbgstr_w(V_BSTR(&v)));
2187  VariantClear(&v);
2188 
2189  hres = IHTMLStyle_put_borderRightWidth(style, vDefault);
2190  ok(hres == S_OK, "put_borderRightWidth: %08x\n", hres);
2191  VariantClear(&vDefault);
2192 
2193  /* borderBottomWidth */
2194  hres = IHTMLStyle_get_borderBottomWidth(style, &vDefault);
2195  ok(hres == S_OK, "get_borderBottomWidth: %08x\n", hres);
2196 
2197  V_VT(&v) = VT_BSTR;
2198  V_BSTR(&v) = a2bstr("10");
2199  hres = IHTMLStyle_put_borderBottomWidth(style, v);
2200  ok(hres == S_OK, "put_borderBottomWidth: %08x\n", hres);
2201  VariantClear(&v);
2202 
2203  hres = IHTMLStyle_get_borderBottomWidth(style, &v);
2204  ok(hres == S_OK, "get_borderBottomWidth: %08x\n", hres);
2205  ok(!strcmp_wa(V_BSTR(&v), "10px"), "expected 10px = %s\n", wine_dbgstr_w(V_BSTR(&v)));
2206  VariantClear(&v);
2207 
2208  hres = IHTMLStyle_put_borderBottomWidth(style, vDefault);
2209  ok(hres == S_OK, "put_borderBottomWidth: %08x\n", hres);
2210  VariantClear(&vDefault);
2211 
2212  /* borderLeftWidth */
2213  hres = IHTMLStyle_get_borderLeftWidth(style, &vDefault);
2214  ok(hres == S_OK, "get_borderLeftWidth: %08x\n", hres);
2215 
2216  V_VT(&v) = VT_BSTR;
2217  V_BSTR(&v) = a2bstr("10");
2218  hres = IHTMLStyle_put_borderLeftWidth(style, v);
2219  ok(hres == S_OK, "put_borderLeftWidth: %08x\n", hres);
2220  VariantClear(&v);
2221 
2222  hres = IHTMLStyle_get_borderLeftWidth(style, &v);
2223  ok(hres == S_OK, "get_borderLeftWidth: %08x\n", hres);
2224  ok(!strcmp_wa(V_BSTR(&v), "10px"), "expected 10px = %s\n", wine_dbgstr_w(V_BSTR(&v)));
2225  VariantClear(&v);
2226 
2227  hres = IHTMLStyle_put_borderLeftWidth(style, vDefault);
2228  ok(hres == S_OK, "put_borderLeftWidth: %08x\n", hres);
2229  VariantClear(&vDefault);
2230 
2231  /* wordSpacing */
2232  hres = IHTMLStyle_get_wordSpacing(style, &vDefault);
2233  ok(hres == S_OK, "get_wordSpacing: %08x\n", hres);
2234 
2235  V_VT(&v) = VT_BSTR;
2236  V_BSTR(&v) = a2bstr("10");
2237  hres = IHTMLStyle_put_wordSpacing(style, v);
2238  ok(hres == S_OK, "put_wordSpacing: %08x\n", hres);
2239  VariantClear(&v);
2240 
2241  hres = IHTMLStyle_get_wordSpacing(style, &v);
2242  ok(hres == S_OK, "get_wordSpacing: %08x\n", hres);
2243  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
2244  ok(!strcmp_wa(V_BSTR(&v), "10px"), "expected 10px = %s\n", wine_dbgstr_w(V_BSTR(&v)));
2245  VariantClear(&v);
2246 
2247  hres = IHTMLStyle_put_wordSpacing(style, vDefault);
2248  ok(hres == S_OK, "put_wordSpacing: %08x\n", hres);
2249  VariantClear(&vDefault);
2250 
2251  /* letterSpacing */
2252  hres = IHTMLStyle_get_letterSpacing(style, &vDefault);
2253  ok(hres == S_OK, "get_letterSpacing: %08x\n", hres);
2254 
2255  V_VT(&v) = VT_BSTR;
2256  V_BSTR(&v) = a2bstr("11");
2257  hres = IHTMLStyle_put_letterSpacing(style, v);
2258  ok(hres == S_OK, "put_letterSpacing: %08x\n", hres);
2259  VariantClear(&v);
2260 
2261  hres = IHTMLStyle_get_letterSpacing(style, &v);
2262  ok(hres == S_OK, "get_letterSpacing: %08x\n", hres);
2263  ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
2264  ok(!strcmp_wa(V_BSTR(&v), "11px"), "expected 10px = %s\n", wine_dbgstr_w(V_BSTR(&v)));
2265  VariantClear(&v);
2266 
2267  hres = IHTMLStyle_put_letterSpacing(style, vDefault);
2268  ok(hres == S_OK, "put_letterSpacing: %08x\n", hres);
2269  VariantClear(&vDefault);
2270 
2271  /* borderTopColor */
2272  hres = IHTMLStyle_get_borderTopColor(style, &vDefault);
2273  ok(hres == S_OK, "get_borderTopColor: %08x\n", hres);
2274 
2275  V_VT(&v) = VT_BSTR;
2276  V_BSTR(&v) = a2bstr("red");
2277  hres = IHTMLStyle_put_borderTopColor(style, v);
2278  ok(hres == S_OK, "put_borderTopColor: %08x\n", hres);
2279  VariantClear(&v);
2280 
2281  hres = IHTMLStyle_get_borderTopColor(style, &v);
2282  ok(hres == S_OK, "get_borderTopColor: %08x\n", hres);
2283  ok(!strcmp_wa(V_BSTR(&v), "red"), "expecte red = %s\n", wine_dbgstr_w(V_BSTR(&v)));
2284  VariantClear(&v);
2285 
2286  hres = IHTMLStyle_put_borderTopColor(style, vDefault);
2287  ok(hres == S_OK, "put_borderTopColor: %08x\n", hres);
2288 
2289  /* borderRightColor */
2290  hres = IHTMLStyle_get_borderRightColor(style, &vDefault);
2291  ok(hres == S_OK, "get_borderRightColor: %08x\n", hres);
2292 
2293  V_VT(&v) = VT_BSTR;
2294  V_BSTR(&v) = a2bstr("blue");
2295  hres = IHTMLStyle_put_borderRightColor(style, v);
2296  ok(hres == S_OK, "put_borderRightColor: %08x\n", hres);
2297  VariantClear(&v);
2298 
2299  hres = IHTMLStyle_get_borderRightColor(style, &v);
2300  ok(hres == S_OK, "get_borderRightColor: %08x\n", hres);
2301  ok(!strcmp_wa(V_BSTR(&v), "blue"), "expected blue = %s\n", wine_dbgstr_w(V_BSTR(&v)));
2302  VariantClear(&v);
2303 
2304  hres = IHTMLStyle_put_borderRightColor(style, vDefault);
2305  ok(hres == S_OK, "putborderRightColorr: %08x\n", hres);
2306 
2307  /* borderBottomColor */
2308  hres = IHTMLStyle_get_borderBottomColor(style, &vDefault);
2309  ok(hres == S_OK, "get_borderBottomColor: %08x\n", hres);
2310 
2311  V_VT(&v) = VT_BSTR;
2312  V_BSTR(&v) = a2bstr("cyan");
2313  hres = IHTMLStyle_put_borderBottomColor(style, v);
2314  ok(hres == S_OK, "put_borderBottomColor: %08x\n", hres);
2315  VariantClear(&v);
2316 
2317  hres = IHTMLStyle_get_borderBottomColor(style, &v);
2318  ok(hres == S_OK, "get_borderBottomColor: %08x\n", hres);
2319  ok(!strcmp_wa(V_BSTR(&v), "cyan"), "expected cyan = %s\n", wine_dbgstr_w(V_BSTR(&v)));
2320  VariantClear(&v);
2321 
2322  hres = IHTMLStyle_put_borderBottomColor(style, vDefault);
2323  ok(hres == S_OK, "put_borderBottomColor: %08x\n", hres);
2324 
2325  /* borderLeftColor */
2326  hres = IHTMLStyle_get_borderLeftColor(style, &vDefault);
2327  ok(hres == S_OK, "get_borderLeftColor: %08x\n", hres);
2328 
2329  V_VT(&v) = VT_BSTR;
2330  V_BSTR(&v) = a2bstr("cyan");
2331  hres = IHTMLStyle_put_borderLeftColor(style, v);
2332  ok(hres == S_OK, "put_borderLeftColor: %08x\n", hres);
2333  VariantClear(&v);
2334 
2335  hres = IHTMLStyle_get_borderLeftColor(style, &v);
2336  ok(hres == S_OK, "get_borderLeftColor: %08x\n", hres);
2337  ok(!strcmp_wa(V_BSTR(&v), "cyan"), "expected cyan = %s\n", wine_dbgstr_w(V_BSTR(&v)));
2338  VariantClear(&v);
2339 
2340  hres = IHTMLStyle_put_borderLeftColor(style, vDefault);
2341  ok(hres == S_OK, "put_borderLeftColor: %08x\n", hres);
2342 
2343  /* clip */
2344  hres = IHTMLStyle_get_clip(style, &str);
2345  ok(hres == S_OK, "get_clip failed: %08x\n", hres);
2346  ok(!str, "clip = %s\n", wine_dbgstr_w(str));
2347 
2348  str = a2bstr("rect(0px 1px 500px 505px)");
2349  hres = IHTMLStyle_put_clip(style, str);
2350  ok(hres == S_OK, "put_clip failed: %08x\n", hres);
2351  SysFreeString(str);
2352 
2353  hres = IHTMLStyle_get_clip(style, &str);
2354  ok(hres == S_OK, "get_clip failed: %08x\n", hres);
2355  ok(!strcmp_wa(str, "rect(0px 1px 500px 505px)"), "clip = %s\n", wine_dbgstr_w(str));
2356  SysFreeString(str);
2357 
2358  /* clear */
2359  hres = IHTMLStyle_get_clear(style, &str);
2360  ok(hres == S_OK, "get_clear failed: %08x\n", hres);
2361  ok(!str, "clear = %s\n", wine_dbgstr_w(str));
2362 
2363  str = a2bstr("both");
2364  hres = IHTMLStyle_put_clear(style, str);
2365  ok(hres == S_OK, "put_clear failed: %08x\n", hres);
2366  SysFreeString(str);
2367 
2368  hres = IHTMLStyle_get_clear(style, &str);
2369  ok(hres == S_OK, "get_clear failed: %08x\n", hres);
2370  ok(!strcmp_wa(str, "both"), "clear = %s\n", wine_dbgstr_w(str));
2371  SysFreeString(str);
2372 
2373  /* pageBreakAfter */
2374  hres = IHTMLStyle_get_pageBreakAfter(style, &str);
2375  ok(hres == S_OK, "get_pageBreakAfter failed: %08x\n", hres);
2376  ok(!str, "pageBreakAfter = %s\n", wine_dbgstr_w(str));
2377 
2378  str = a2bstr("always");
2379  hres = IHTMLStyle_put_pageBreakAfter(style, str);
2380  ok(hres == S_OK, "put_pageBreakAfter failed: %08x\n", hres);
2381  SysFreeString(str);
2382 
2383  hres = IHTMLStyle_get_pageBreakAfter(style, &str);
2384  ok(hres == S_OK, "get_pageBreakAfter failed: %08x\n", hres);
2385  ok(!strcmp_wa(str, "always"), "pageBreakAfter = %s\n", wine_dbgstr_w(str));
2386  SysFreeString(str);
2387 
2388  /* pageBreakBefore */
2389  hres = IHTMLStyle_get_pageBreakBefore(style, &str);
2390  ok(hres == S_OK, "get_pageBreakBefore failed: %08x\n", hres);
2391  ok(!str, "pageBreakBefore = %s\n", wine_dbgstr_w(str));
2392 
2393  str = a2bstr("always");
2394  hres = IHTMLStyle_put_pageBreakBefore(style, str);
2395  ok(hres == S_OK, "put_pageBreakBefore failed: %08x\n", hres);
2396  SysFreeString(str);
2397 
2398  hres = IHTMLStyle_get_pageBreakBefore(style, &str);
2399  ok(hres == S_OK, "get_pageBreakBefore failed: %08x\n", hres);
2400  ok(!strcmp_wa(str, "always"), "pageBreakBefore = %s\n", wine_dbgstr_w(str));
2401  SysFreeString(str);
2402 
2403  test_style_remove_attribute(style, "pageBreakBefore", VARIANT_TRUE);
2404  test_style_remove_attribute(style, "pageBreakBefore", VARIANT_FALSE);
2405 
2406  hres = IHTMLStyle_get_pageBreakBefore(style, &str);
2407  ok(hres == S_OK, "get_pageBreakBefore failed: %08x\n", hres);
2408  ok(!str, "pageBreakBefore = %s\n", wine_dbgstr_w(str));
2409 
2410  str = (void*)0xdeadbeef;
2411  hres = IHTMLStyle_get_whiteSpace(style, &str);
2412  ok(hres == S_OK, "get_whiteSpace failed: %08x\n", hres);
2413  ok(!str, "whiteSpace = %s\n", wine_dbgstr_w(str));
2414 
2415  str = a2bstr("nowrap");
2416  hres = IHTMLStyle_put_whiteSpace(style, str);
2417  SysFreeString(str);
2418  ok(hres == S_OK, "put_whiteSpace failed: %08x\n", hres);
2419 
2420  str = NULL;
2421  hres = IHTMLStyle_get_whiteSpace(style, &str);
2422  ok(hres == S_OK, "get_whiteSpace failed: %08x\n", hres);
2423  ok(!strcmp_wa(str, "nowrap"), "whiteSpace = %s\n", wine_dbgstr_w(str));
2424  SysFreeString(str);
2425 
2426  str = a2bstr("normal");
2427  hres = IHTMLStyle_put_whiteSpace(style, str);
2428  SysFreeString(str);
2429  ok(hres == S_OK, "put_whiteSpace failed: %08x\n", hres);
2430 
2431  str = NULL;
2432  hres = IHTMLStyle_get_whiteSpace(style, &str);
2433  ok(hres == S_OK, "get_whiteSpace failed: %08x\n", hres);
2434  ok(!strcmp_wa(str, "normal"), "whiteSpace = %s\n", wine_dbgstr_w(str));
2435  SysFreeString(str);
2436 
2437  /* listStyleType */
2438  hres = IHTMLStyle_get_listStyleType(style, &str);
2439  ok(hres == S_OK, "get_listStyleType failed: %08x\n", hres);
2440  ok(!str, "listStyleType = %s\n", wine_dbgstr_w(str));
2441 
2442  str = a2bstr("square");
2443  hres = IHTMLStyle_put_listStyleType(style, str);
2444  ok(hres == S_OK, "put_listStyleType failed: %08x\n", hres);
2445  SysFreeString(str);
2446 
2447  str = NULL;
2448  hres = IHTMLStyle_get_listStyleType(style, &str);
2449  ok(hres == S_OK, "get_listStyleType failed: %08x\n", hres);
2450  ok(!strcmp_wa(str, "square"), "listStyleType = %s\n", wine_dbgstr_w(str));
2451 
2452  str = a2bstr("inside");
2453  hres = IHTMLStyle_put_listStylePosition(style, str);
2454  ok(hres == S_OK, "put_listStylePosition failed: %08x\n", hres);
2455  SysFreeString(str);
2456 
2457  hres = IHTMLStyle_get_listStylePosition(style, &str);
2458  ok(hres == S_OK, "get_listStylePosition failed: %08x\n", hres);
2459  ok(!strcmp_wa(str, "inside"), "listStyleType = %s\n", wine_dbgstr_w(str));
2460  SysFreeString(str);
2461 
2462  str = a2bstr("decimal-leading-zero none inside");
2463  hres = IHTMLStyle_put_listStyle(style, str);
2464  ok(hres == S_OK || broken(hres == E_INVALIDARG), /* win 2000 */
2465  "put_listStyle(%s) failed: %08x\n", wine_dbgstr_w(str), hres);
2466  SysFreeString(str);
2467 
2468  if (hres != E_INVALIDARG) {
2469  hres = IHTMLStyle_get_listStyle(style, &str);
2470  ok(hres == S_OK, "get_listStyle failed: %08x\n", hres);
2471  ok(strstr_wa(str, "decimal-leading-zero") &&
2472  strstr_wa(str, "none") != NULL &&
2473  strstr_wa(str, "inside") != NULL,
2474  "listStyle = %s\n", wine_dbgstr_w(str));
2475  SysFreeString(str);
2476  } else {
2477  win_skip("IHTMLStyle_put_listStyle already failed\n");
2478  }
2479 
2480  str = (void*)0xdeadbeef;
2481  hres = IHTMLStyle_get_styleFloat(style, &str);
2482  ok(hres == S_OK, "get_styleFloat failed: %08x\n", hres);
2483  ok(!str, "styleFloat = %s\n", wine_dbgstr_w(str));
2484 
2485  str = a2bstr("left");
2486  hres = IHTMLStyle_put_styleFloat(style, str);
2487  ok(hres == S_OK, "put_styleFloat failed: %08x\n", hres);
2488  SysFreeString(str);
2489 
2490  str = NULL;
2491  hres = IHTMLStyle_get_styleFloat(style, &str);
2492  ok(hres == S_OK, "get_styleFloat failed: %08x\n", hres);
2493  ok(!strcmp_wa(str, "left"), "styleFloat = %s\n", wine_dbgstr_w(str));
2494 
2495  hres = IHTMLStyle_QueryInterface(style, &IID_IHTMLStyle2, (void**)&style2);
2496  ok(hres == S_OK, "Could not get IHTMLStyle2 iface: %08x\n", hres);
2497  if(SUCCEEDED(hres)) {
2498  test_style2(style2);
2499  IHTMLStyle2_Release(style2);
2500  }
2501 
2502  hres = IHTMLStyle_QueryInterface(style, &IID_IHTMLStyle3, (void**)&style3);
2503  ok(hres == S_OK, "Could not get IHTMLStyle3 iface: %08x\n", hres);
2504  if(SUCCEEDED(hres)) {
2505  test_style3(style3);
2506  IHTMLStyle3_Release(style3);
2507  }
2508 
2509  hres = IHTMLStyle_QueryInterface(style, &IID_IHTMLStyle4, (void**)&style4);
2510  ok(hres == S_OK, "Could not get IHTMLStyle4 iface: %08x\n", hres);
2511  if(SUCCEEDED(hres)) {
2512  test_style4(style4);
2513  IHTMLStyle4_Release(style4);
2514  }
2515 
2516  hres = IHTMLStyle_QueryInterface(style, &IID_IHTMLStyle5, (void**)&style5);
2517  if(SUCCEEDED(hres)) {
2518  test_style5(style5);
2519  IHTMLStyle5_Release(style5);
2520  }else {
2521  win_skip("IHTMLStyle5 not available\n");
2522  }
2523 
2524  hres = IHTMLStyle_QueryInterface(style, &IID_IHTMLStyle6, (void**)&style6);
2525  if(SUCCEEDED(hres)) {
2526  test_style6(style6);
2527  IHTMLStyle6_Release(style6);
2528  }else {
2529  win_skip("IHTMLStyle6 not available\n");
2530  }
2531 }
2532 
2533 #define test_style_filter(a,b) _test_style_filter(__LINE__,a,b)
2534 static void _test_style_filter(unsigned line, IHTMLStyle *style, const char *exval)
2535 {
2536  BSTR str;
2537  HRESULT hres;
2538 
2539  str = (void*)0xdeadbeef;
2540  hres = IHTMLStyle_get_filter(style, &str);
2541  ok_(__FILE__,line)(hres == S_OK, "get_filter failed: %08x\n", hres);
2542  if(exval)
2543  ok_(__FILE__,line)(str && !strcmp_wa(str, exval), "filter = %s, expected %s\n", wine_dbgstr_w(str), exval);
2544  else
2545  ok_(__FILE__,line)(!str, "str = %s, expected NULL\n", wine_dbgstr_w(str));
2546 
2547  SysFreeString(str);
2548 }
2549 
2550 #define test_current_style_filter(a,b) _test_current_style_filter(__LINE__,a,b)
2551 static void _test_current_style_filter(unsigned line, IHTMLCurrentStyle2 *style, const char *exval)
2552 {
2553  BSTR str;
2554  HRESULT hres;
2555 
2556  str = (void*)0xdeadbeef;
2557  hres = IHTMLCurrentStyle2_get_filter(style, &str);
2558  ok_(__FILE__,line)(hres == S_OK, "get_filter failed: %08x\n", hres);
2559  if(exval)
2560  ok_(__FILE__,line)(str && !strcmp_wa(str, exval), "filter = %s, expected %s\n", wine_dbgstr_w(str), exval);
2561  else
2562  ok_(__FILE__,line)(!str, "str = %s, expected NULL\n", wine_dbgstr_w(str));
2563 
2564  SysFreeString(str);
2565 }
2566 
2567 #define set_style_filter(a,b) _set_style_filter(__LINE__,a,b)
2568 static void _set_style_filter(unsigned line, IHTMLStyle *style, const char *val)
2569 {
2570  BSTR str = a2bstr(val);
2571  HRESULT hres;
2572 
2573  hres = IHTMLStyle_put_filter(style, str);
2574  ok_(__FILE__,line)(hres == S_OK, "put_filter failed: %08x\n", hres);
2575  SysFreeString(str);
2576 
2578 }
2579 
2580 static void test_style_filters(IHTMLElement *elem)
2581 {
2582  IHTMLElement2 *elem2 = get_elem2_iface((IUnknown*)elem);
2583  IHTMLCurrentStyle2 *current_style2;
2584  IHTMLCurrentStyle *current_style;
2585  IHTMLStyle *style;
2586  HRESULT hres;
2587 
2588  hres = IHTMLElement_get_style(elem, &style);
2589  ok(hres == S_OK, "get_style failed: %08x\n", hres);
2590 
2591  hres = IHTMLElement2_get_currentStyle(elem2, &current_style);
2592  ok(hres == S_OK, "get_style failed: %08x\n", hres);
2593 
2594  current_style2 = get_current_style2_iface((IUnknown*)current_style);
2595 
2597  test_current_style_filter(current_style2, NULL);
2598  set_style_filter(style, "alpha(opacity=50.0040)");
2599  test_current_style_filter(current_style2, "alpha(opacity=50.0040)");
2600  set_style_filter(style, "alpha(opacity=100)");
2601 
2602  IHTMLStyle_Release(style);
2603 
2604  hres = IHTMLElement_get_style(elem, &style);
2605  ok(hres == S_OK, "get_style failed: %08x\n", hres);
2606 
2607  test_style_filter(style, "alpha(opacity=100)");
2608  set_style_filter(style, "xxx(a,b,c) alpha(opacity=100)");
2610  set_style_filter(style, "alpha(opacity=100)");
2611  test_style_remove_attribute(style, "filter", VARIANT_TRUE);
2612  test_style_remove_attribute(style, "filter", VARIANT_FALSE);
2614 
2615 
2616  IHTMLCurrentStyle2_Release(current_style2);
2617  IHTMLStyle_Release(style);
2618  IHTMLElement2_Release(elem2);
2619 }
2620 
2621 static void test_current_style(IHTMLCurrentStyle *current_style)
2622 {
2623  IHTMLCurrentStyle2 *current_style2;
2624  IHTMLCurrentStyle3 *current_style3;
2625  VARIANT_BOOL b;
2626  BSTR str;
2627  HRESULT hres;
2628  VARIANT v;
2629 
2630  hres = IHTMLCurrentStyle_get_display(current_style, &str);
2631  ok(hres == S_OK, "get_display failed: %08x\n", hres);
2632  ok(!strcmp_wa(str, "block"), "get_display returned %s\n", wine_dbgstr_w(str));
2633  SysFreeString(str);
2634 
2635  hres = IHTMLCurrentStyle_get_position(current_style, &str);
2636  ok(hres == S_OK, "get_position failed: %08x\n", hres);
2637  ok(!strcmp_wa(str, "absolute"), "get_position returned %s\n", wine_dbgstr_w(str));
2638  SysFreeString(str);
2639 
2640  hres = IHTMLCurrentStyle_get_fontFamily(current_style, &str);
2641  ok(hres == S_OK, "get_fontFamily failed: %08x\n", hres);
2642  SysFreeString(str);
2643 
2644  hres = IHTMLCurrentStyle_get_fontStyle(current_style, &str);
2645  ok(hres == S_OK, "get_fontStyle failed: %08x\n", hres);
2646  ok(!strcmp_wa(str, "normal"), "get_fontStyle returned %s\n", wine_dbgstr_w(str));
2647  SysFreeString(str);
2648 
2649  hres = IHTMLCurrentStyle_get_backgroundImage(current_style, &str);
2650  ok(hres == S_OK, "get_backgroundImage failed: %08x\n", hres);
2651  ok(!strcmp_wa(str, "none"), "get_backgroundImage returned %s\n", wine_dbgstr_w(str));
2652  SysFreeString(str);
2653 
2654  hres = IHTMLCurrentStyle_get_fontVariant(current_style, &str);
2655  ok(hres == S_OK, "get_fontVariant failed: %08x\n", hres);
2656  ok(!strcmp_wa(str, "normal"), "get_fontVariant returned %s\n", wine_dbgstr_w(str));
2657  SysFreeString(str);
2658 
2659  hres = IHTMLCurrentStyle_get_borderTopStyle(current_style, &str);
2660  ok(hres == S_OK, "get_borderTopStyle failed: %08x\n", hres);
2661  ok(!strcmp_wa(str, "none"), "get_borderTopStyle returned %s\n", wine_dbgstr_w(str));
2662  SysFreeString(str);
2663 
2664  hres = IHTMLCurrentStyle_get_borderRightStyle(current_style, &str);
2665  ok(hres == S_OK, "get_borderRightStyle failed: %08x\n", hres);
2666  ok(!strcmp_wa(str, "none"), "get_borderRightStyle returned %s\n", wine_dbgstr_w(str));
2667  SysFreeString(str);
2668 
2669  hres = IHTMLCurrentStyle_get_borderBottomStyle(current_style, &str);
2670  ok(hres == S_OK, "get_borderBottomStyle failed: %08x\n", hres);
2671  ok(!strcmp_wa(str, "none"), "get_borderBottomStyle returned %s\n", wine_dbgstr_w(str));
2672  SysFreeString(str);
2673 
2674  hres = IHTMLCurrentStyle_get_borderLeftStyle(current_style, &str);
2675  ok(hres == S_OK, "get_borderLeftStyle failed: %08x\n", hres);
2676  ok(!strcmp_wa(str, "none"), "get_borderLeftStyle returned %s\n", wine_dbgstr_w(str));
2677  SysFreeString(str);
2678 
2679  hres = IHTMLCurrentStyle_get_textAlign(current_style, &str);
2680  ok(hres == S_OK, "get_textAlign failed: %08x\n", hres);
2681  ok(!strcmp_wa(str, "center"), "get_textAlign returned %s\n", wine_dbgstr_w(str));
2682  SysFreeString(str);
2683 
2684  hres = IHTMLCurrentStyle_get_textDecoration(current_style, &str);
2685  ok(hres == S_OK, "get_textDecoration failed: %08x\n", hres);
2686  ok(!strcmp_wa(str, "none"), "get_textDecoration returned %s\n", wine_dbgstr_w(str));
2687  SysFreeString(str);
2688 
2689  hres = IHTMLCurrentStyle_get_cursor(current_style, &str);
2690  ok(hres == S_OK, "get_cursor failed: %08x\n", hres);
2691  ok(!strcmp_wa(str, "default"), "get_cursor returned %s\n", wine_dbgstr_w(str));
2692  SysFreeString(str);
2693 
2694  hres = IHTMLCurrentStyle_get_backgroundRepeat(current_style, &str);
2695  ok(hres == S_OK, "get_backgroundRepeat failed: %08x\n", hres);
2696  ok(!strcmp_wa(str, "repeat"), "get_backgroundRepeat returned %s\n", wine_dbgstr_w(str));
2697  SysFreeString(str);
2698 
2699  hres = IHTMLCurrentStyle_get_borderColor(current_style, &str);
2700  ok(hres == S_OK, "get_borderColor failed: %08x\n", hres);
2701  SysFreeString(str);
2702 
2703  hres = IHTMLCurrentStyle_get_borderStyle(current_style, &str);
2704  ok(hres == S_OK, "get_borderStyle failed: %08x\n", hres);
2705  SysFreeString(str);
2706 
2707  hres = IHTMLCurrentStyle_get_visibility(current_style, &str);
2708  ok(hres == S_OK, "get_visibility failed: %08x\n", hres);
2709  SysFreeString(str);
2710 
2711  hres = IHTMLCurrentStyle_get_overflow(current_style, &str);
2712  ok(hres == S_OK, "get_overflow failed: %08x\n", hres);
2713  SysFreeString(str);
2714 
2715  hres = IHTMLCurrentStyle_get_borderWidth(current_style, &str);
2716  ok(hres == S_OK, "get_borderWidth failed: %08x\n", hres);
2717  SysFreeString(str);
2718 
2719  hres = IHTMLCurrentStyle_get_margin(current_style, &str);
2720  ok(hres == S_OK, "get_margin failed: %08x\n", hres);
2721  SysFreeString(str);
2722 
2723  hres = IHTMLCurrentStyle_get_padding(current_style, &str);
2724  ok(hres == S_OK, "get_padding failed: %08x\n", hres);
2725  SysFreeString(str);
2726 
2727  hres = IHTMLCurrentStyle_get_fontWeight(current_style, &v);
2728  ok(hres == S_OK, "get_fontWeight failed: %08x\n", hres);
2729  ok(V_VT(&v) == VT_I4, "V_VT(v) = %d\n", V_VT(&v));
2730  ok( V_I4(&v) == 400, "expect 400 got (%d)\n", V_I4(&v));
2731  VariantClear(&v);
2732 
2733  hres = IHTMLCurrentStyle_get_fontSize(current_style, &v);
2734  ok(hres == S_OK, "get_fontSize failed: %08x\n", hres);
2735  ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
2736  VariantClear(&v);
2737 
2738  hres = IHTMLCurrentStyle_get_left(current_style, &v);
2739  ok(hres == S_OK, "get_left failed: %08x\n", hres);
2740  ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
2741  VariantClear(&v);
2742 
2743  hres = IHTMLCurrentStyle_get_top(current_style, &v);
2744  ok(hres == S_OK, "get_top failed: %08x\n", hres);
2745  ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
2746  VariantClear(&v);
2747 
2748  hres = IHTMLCurrentStyle_get_width(current_style, &v);
2749  ok(hres == S_OK, "get_width failed: %08x\n", hres);