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); 44 ret = SysAllocStringLen(NULL, len); 45 MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len); 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**)¤t_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, ¶ms, &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, 164 DISPATCH_PROPERTYPUT, ¶ms, &ret, NULL, NULL); 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, 171 DISPATCH_PROPERTYPUT, ¶ms, &ret, NULL, NULL); 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, 178 DISPATCH_PROPERTYPUT, ¶ms, &ret, NULL, NULL); 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, 185 DISPATCH_PROPERTYPUT, ¶ms, &ret, NULL, NULL); 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, 192 DISPATCH_PROPERTYPUT, ¶ms, &ret, NULL, NULL); 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, 199 DISPATCH_PROPERTYPUT, ¶ms, &ret, NULL, NULL); 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, 206 DISPATCH_PROPERTYPUT, ¶ms, &ret, NULL, NULL); 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, 213 DISPATCH_PROPERTYPUT, ¶ms, &ret, NULL, NULL); 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, 220 DISPATCH_PROPERTYPUT, ¶ms, &ret, NULL, NULL); 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, 227 DISPATCH_PROPERTYPUT, ¶ms, &ret, NULL, NULL); 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, 233 DISPATCH_PROPERTYPUT, ¶ms, &ret, NULL, NULL); 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 252 SysFreeString(text); 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); 275 SysFreeString(str); 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); 289 SysFreeString(str); 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)); 304 SysFreeString(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); 335 SysFreeString(str); 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)); 341 SysFreeString(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); 373 SysFreeString(str); 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)); 379 SysFreeString(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); 406 SysFreeString(str); 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); 422 SysFreeString(str); 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); 433 SysFreeString(str); 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)); 439 SysFreeString(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); 456 SysFreeString(str); 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)); 462 SysFreeString(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)); 658 SysFreeString(str); 659 660 str = a2bstr("1px"); 661 hres = IHTMLStyle6_put_outline(style, str); 662 ok(hres == S_OK, "put_outline failed: %08x\n", hres); 663 SysFreeString(str); 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)); 669 SysFreeString(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)); 675 SysFreeString(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); 680 SysFreeString(str); 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)); 686 SysFreeString(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 706 test_style_csstext(style, NULL); 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); 779 SysFreeString(str); 780 781 str = a2bstr("bold"); 782 hres = IHTMLStyle_put_fontWeight(style, str); 783 ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres); 784 SysFreeString(str); 785 786 str = a2bstr("bolder"); 787 hres = IHTMLStyle_put_fontWeight(style, str); 788 ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres); 789 SysFreeString(str); 790 791 str = a2bstr("lighter"); 792 hres = IHTMLStyle_put_fontWeight(style, str); 793 ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres); 794 SysFreeString(str); 795 796 str = a2bstr("100"); 797 hres = IHTMLStyle_put_fontWeight(style, str); 798 ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres); 799 SysFreeString(str); 800 801 str = a2bstr("200"); 802 hres = IHTMLStyle_put_fontWeight(style, str); 803 ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres); 804 SysFreeString(str); 805 806 str = a2bstr("300"); 807 hres = IHTMLStyle_put_fontWeight(style, str); 808 ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres); 809 SysFreeString(str); 810 811 str = a2bstr("400"); 812 hres = IHTMLStyle_put_fontWeight(style, str); 813 ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres); 814 SysFreeString(str); 815 816 str = a2bstr("500"); 817 hres = IHTMLStyle_put_fontWeight(style, str); 818 ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres); 819 SysFreeString(str); 820 821 str = a2bstr("600"); 822 hres = IHTMLStyle_put_fontWeight(style, str); 823 ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres); 824 SysFreeString(str); 825 826 str = a2bstr("700"); 827 hres = IHTMLStyle_put_fontWeight(style, str); 828 ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres); 829 SysFreeString(str); 830 831 str = a2bstr("800"); 832 hres = IHTMLStyle_put_fontWeight(style, str); 833 ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres); 834 SysFreeString(str); 835 836 str = a2bstr("900"); 837 hres = IHTMLStyle_put_fontWeight(style, str); 838 ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres); 839 SysFreeString(str); 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"); 844 SysFreeString(str); 845 846 str = a2bstr(""); 847 hres = IHTMLStyle_put_fontWeight(style, str); 848 ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres); 849 SysFreeString(str); 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"); 854 SysFreeString(str); 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); 870 SysFreeString(str); 871 872 str = a2bstr("small-caps"); 873 hres = IHTMLStyle_put_fontVariant(style, str); 874 ok(hres == S_OK, "fontVariant failed: %08x\n", hres); 875 SysFreeString(str); 876 877 str = a2bstr("normal"); 878 hres = IHTMLStyle_put_fontVariant(style, str); 879 ok(hres == S_OK, "fontVariant failed: %08x\n", hres); 880 SysFreeString(str); 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"); 1719 test_border_styles(style, str); 1720 SysFreeString(str); 1721 1722 str = a2bstr("borderbottomstyle"); 1723 test_border_styles(style, str); 1724 SysFreeString(str); 1725 1726 str = a2bstr("borderrightstyle"); 1727 test_border_styles(style, str); 1728 SysFreeString(str); 1729 1730 str = a2bstr("bordertopstyle"); 1731 test_border_styles(style, str); 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 2577 _test_style_filter(line, style, val); 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, ¤t_style); 2592 ok(hres == S_OK, "get_style failed: %08x\n", hres); 2593 2594 current_style2 = get_current_style2_iface((IUnknown*)current_style); 2595 2596 test_style_filter(style, NULL); 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)"); 2609 set_style_filter(style, NULL); 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); 2613 test_style_filter(style, NULL); 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); 2750 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2751 VariantClear(&v); 2752 2753 hres = IHTMLCurrentStyle_get_height(current_style, &v); 2754 ok(hres == S_OK, "get_height failed: %08x\n", hres); 2755 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2756 VariantClear(&v); 2757 2758 hres = IHTMLCurrentStyle_get_paddingLeft(current_style, &v); 2759 ok(hres == S_OK, "get_paddingLeft failed: %08x\n", hres); 2760 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2761 VariantClear(&v); 2762 2763 hres = IHTMLCurrentStyle_get_zIndex(current_style, &v); 2764 ok(hres == S_OK, "get_zIndex failed: %08x\n", hres); 2765 ok(V_VT(&v) == VT_I4, "V_VT(v) = %d\n", V_VT(&v)); 2766 ok( V_I4(&v) == 1, "expect 1 got (%d)\n", V_I4(&v)); 2767 VariantClear(&v); 2768 2769 hres = IHTMLCurrentStyle_get_verticalAlign(current_style, &v); 2770 ok(hres == S_OK, "get_verticalAlign failed: %08x\n", hres); 2771 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2772 ok(!strcmp_wa(V_BSTR(&v), "100px"), "get_verticalAlign returned %s\n", wine_dbgstr_w(V_BSTR(&v))); 2773 VariantClear(&v); 2774 2775 hres = IHTMLCurrentStyle_get_marginRight(current_style, &v); 2776 ok(hres == S_OK, "get_marginRight failed: %08x\n", hres); 2777 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2778 VariantClear(&v); 2779 2780 hres = IHTMLCurrentStyle_get_marginLeft(current_style, &v); 2781 ok(hres == S_OK, "get_marginLeft failed: %08x\n", hres); 2782 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2783 VariantClear(&v); 2784 2785 hres = IHTMLCurrentStyle_get_borderLeftWidth(current_style, &v); 2786 ok(hres == S_OK, "get_borderLeftWidth failed: %08x\n", hres); 2787 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2788 VariantClear(&v); 2789 2790 V_BSTR(&v) = NULL; 2791 hres = IHTMLCurrentStyle_get_borderRightWidth(current_style, &v); 2792 ok(hres == S_OK, "get_borderRightWidth failed: %08x\n", hres); 2793 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2794 VariantClear(&v); 2795 2796 hres = IHTMLCurrentStyle_get_borderBottomWidth(current_style, &v); 2797 ok(hres == S_OK, "get_borderBottomWidth failed: %08x\n", hres); 2798 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2799 VariantClear(&v); 2800 2801 hres = IHTMLCurrentStyle_get_borderTopWidth(current_style, &v); 2802 ok(hres == S_OK, "get_borderTopWidth failed: %08x\n", hres); 2803 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2804 VariantClear(&v); 2805 2806 hres = IHTMLCurrentStyle_get_color(current_style, &v); 2807 ok(hres == S_OK, "get_color failed: %08x\n", hres); 2808 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2809 VariantClear(&v); 2810 2811 hres = IHTMLCurrentStyle_get_backgroundColor(current_style, &v); 2812 ok(hres == S_OK, "get_backgroundColor failed: %08x\n", hres); 2813 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2814 VariantClear(&v); 2815 2816 hres = IHTMLCurrentStyle_get_borderLeftColor(current_style, &v); 2817 ok(hres == S_OK, "get_borderLeftColor failed: %08x\n", hres); 2818 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2819 VariantClear(&v); 2820 2821 hres = IHTMLCurrentStyle_get_borderTopColor(current_style, &v); 2822 ok(hres == S_OK, "get_borderTopColor failed: %08x\n", hres); 2823 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2824 VariantClear(&v); 2825 2826 hres = IHTMLCurrentStyle_get_borderRightColor(current_style, &v); 2827 ok(hres == S_OK, "get_borderRightColor failed: %08x\n", hres); 2828 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2829 VariantClear(&v); 2830 2831 hres = IHTMLCurrentStyle_get_borderBottomColor(current_style, &v); 2832 ok(hres == S_OK, "get_borderBottomColor failed: %08x\n", hres); 2833 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2834 VariantClear(&v); 2835 2836 hres = IHTMLCurrentStyle_get_paddingTop(current_style, &v); 2837 ok(hres == S_OK, "get_paddingTop failed: %08x\n", hres); 2838 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2839 VariantClear(&v); 2840 2841 hres = IHTMLCurrentStyle_get_paddingRight(current_style, &v); 2842 ok(hres == S_OK, "get_paddingRight failed: %08x\n", hres); 2843 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2844 VariantClear(&v); 2845 2846 hres = IHTMLCurrentStyle_get_paddingBottom(current_style, &v); 2847 ok(hres == S_OK, "get_paddingRight failed: %08x\n", hres); 2848 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2849 VariantClear(&v); 2850 2851 hres = IHTMLCurrentStyle_get_letterSpacing(current_style, &v); 2852 ok(hres == S_OK, "get_letterSpacing failed: %08x\n", hres); 2853 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2854 VariantClear(&v); 2855 2856 hres = IHTMLCurrentStyle_get_marginTop(current_style, &v); 2857 ok(hres == S_OK, "get_marginTop failed: %08x\n", hres); 2858 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2859 VariantClear(&v); 2860 2861 hres = IHTMLCurrentStyle_get_marginBottom(current_style, &v); 2862 ok(hres == S_OK, "get_marginBottom failed: %08x\n", hres); 2863 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2864 VariantClear(&v); 2865 2866 hres = IHTMLCurrentStyle_get_right(current_style, &v); 2867 ok(hres == S_OK, "get_Right failed: %08x\n", hres); 2868 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2869 VariantClear(&v); 2870 2871 hres = IHTMLCurrentStyle_get_bottom(current_style, &v); 2872 ok(hres == S_OK, "get_bottom failed: %08x\n", hres); 2873 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2874 VariantClear(&v); 2875 2876 hres = IHTMLCurrentStyle_get_lineHeight(current_style, &v); 2877 ok(hres == S_OK, "get_lineHeight failed: %08x\n", hres); 2878 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2879 VariantClear(&v); 2880 2881 hres = IHTMLCurrentStyle_get_textIndent(current_style, &v); 2882 ok(hres == S_OK, "get_textIndent failed: %08x\n", hres); 2883 ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v)); 2884 VariantClear(&v); 2885 2886 hres = IHTMLCurrentStyle_get_textTransform(current_style, &str); 2887 ok(hres == S_OK, "get_textTransform failed: %08x\n", hres); 2888 SysFreeString(str); 2889 2890 current_style2 = get_current_style2_iface((IUnknown*)current_style); 2891 2892 b = 100; 2893 hres = IHTMLCurrentStyle2_get_hasLayout(current_style2, &b); 2894 ok(hres == S_OK, "get_hasLayout failed: %08x\n", hres); 2895 ok(b == VARIANT_TRUE, "hasLayout = %x\n", b); 2896 2897 IHTMLCurrentStyle2_Release(current_style2); 2898 2899 hres = IHTMLCurrentStyle_QueryInterface(current_style, &IID_IHTMLCurrentStyle3, (void**)¤t_style3); 2900 ok(hres == S_OK, "Could not get IHTMLCurrentStyle3 iface: %08x\n", hres); 2901 2902 hres = IHTMLCurrentStyle3_get_whiteSpace(current_style3, &str); 2903 ok(hres == S_OK, "get_whiteSpace failed: %08x\n", hres); 2904 ok(!strcmp_wa(str, "normal"), "whiteSpace = %s\n", wine_dbgstr_w(str)); 2905 SysFreeString(str); 2906 2907 IHTMLCurrentStyle3_Release(current_style3); 2908 } 2909 2910 static const char basic_test_str[] = "<html><body><div id=\"divid\"></div/</body></html>"; 2911 2912 static void basic_style_test(IHTMLDocument2 *doc) 2913 { 2914 IHTMLCurrentStyle *cstyle; 2915 IHTMLElement *elem; 2916 IHTMLStyle *style; 2917 HRESULT hres; 2918 2919 hres = IHTMLDocument2_get_body(doc, &elem); 2920 ok(hres == S_OK, "get_body failed: %08x\n", hres); 2921 2922 hres = IHTMLElement_get_style(elem, &style); 2923 ok(hres == S_OK, "get_style failed: %08x\n", hres); 2924 2925 test_body_style(style); 2926 2927 cstyle = get_current_style(elem); 2928 test_current_style(cstyle); 2929 IHTMLCurrentStyle_Release(cstyle); 2930 IHTMLElement_Release(elem); 2931 2932 elem = get_element_by_id(doc, "divid"); 2933 test_style_filters(elem); 2934 2935 test_set_csstext(style); 2936 IHTMLStyle_Release(style); 2937 IHTMLElement_Release(elem); 2938 } 2939 2940 static const char runtimestyle_test_str[] = 2941 "<html><head><style>body {text-decoration: auto}</style></head><body></body></html>"; 2942 2943 static void runtimestyle_test(IHTMLDocument2 *doc) 2944 { 2945 IHTMLStyle *style, *runtime_style; 2946 IHTMLElement2 *elem2; 2947 IHTMLElement *elem; 2948 BSTR str; 2949 HRESULT hres; 2950 2951 hres = IHTMLDocument2_get_body(doc, &elem); 2952 ok(hres == S_OK, "get_body failed: %08x\n", hres); 2953 2954 elem2 = get_elem2_iface((IUnknown*)elem); 2955 2956 hres = IHTMLElement2_get_runtimeStyle(elem2, &runtime_style); 2957 ok(hres == S_OK, "get_runtimeStyle failed: %08x\n", hres); 2958 2959 hres = IHTMLElement_get_style(elem, &style); 2960 ok(hres == S_OK, "get_style failed: %08x\n", hres); 2961 2962 test_text_decoration(style, NULL); 2963 test_text_decoration(runtime_style, NULL); 2964 set_text_decoration(style, "underline"); 2965 test_text_decoration(style, "underline"); 2966 2967 hres = IHTMLStyle_get_textDecoration(style, &str); 2968 ok(hres == S_OK, "get_textDecoration failed: %08x\n", hres); 2969 ok(broken(!str) || !strcmp_wa(str, "underline"), "textDecoration = %s\n", wine_dbgstr_w(str)); 2970 SysFreeString(str); 2971 2972 set_text_decoration(runtime_style, "blink"); 2973 test_text_decoration(runtime_style, "blink"); 2974 2975 hres = IHTMLStyle_get_textDecoration(style, &str); 2976 ok(hres == S_OK, "get_textDecoration failed: %08x\n", hres); 2977 todo_wine 2978 ok(!strcmp_wa(str, "underline"), "textDecoration = %s\n", wine_dbgstr_w(str)); 2979 SysFreeString(str); 2980 2981 IHTMLStyle_Release(runtime_style); 2982 IHTMLStyle_Release(style); 2983 IHTMLElement2_Release(elem2); 2984 IHTMLElement_Release(elem); 2985 } 2986 2987 static IHTMLDocument2 *notif_doc; 2988 static BOOL doc_complete; 2989 2990 static IHTMLDocument2 *create_document(void) 2991 { 2992 IHTMLDocument2 *doc; 2993 IHTMLDocument5 *doc5; 2994 HRESULT hres; 2995 2996 hres = CoCreateInstance(&CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, 2997 &IID_IHTMLDocument2, (void**)&doc); 2998 ok(hres == S_OK, "CoCreateInstance failed: %08x\n", hres); 2999 if(FAILED(hres)) 3000 return NULL; 3001 3002 hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument5, (void**)&doc5); 3003 if(FAILED(hres)) { 3004 win_skip("Could not get IHTMLDocument5, probably too old IE\n"); 3005 IHTMLDocument2_Release(doc); 3006 return NULL; 3007 } 3008 3009 IHTMLDocument5_Release(doc5); 3010 return doc; 3011 } 3012 3013 static HRESULT WINAPI PropertyNotifySink_QueryInterface(IPropertyNotifySink *iface, 3014 REFIID riid, void**ppv) 3015 { 3016 if(IsEqualGUID(&IID_IPropertyNotifySink, riid)) { 3017 *ppv = iface; 3018 return S_OK; 3019 } 3020 3021 ok(0, "unexpected call\n"); 3022 return E_NOINTERFACE; 3023 } 3024 3025 static ULONG WINAPI PropertyNotifySink_AddRef(IPropertyNotifySink *iface) 3026 { 3027 return 2; 3028 } 3029 3030 static ULONG WINAPI PropertyNotifySink_Release(IPropertyNotifySink *iface) 3031 { 3032 return 1; 3033 } 3034 3035 static HRESULT WINAPI PropertyNotifySink_OnChanged(IPropertyNotifySink *iface, DISPID dispID) 3036 { 3037 if(dispID == DISPID_READYSTATE){ 3038 BSTR state; 3039 HRESULT hres; 3040 3041 hres = IHTMLDocument2_get_readyState(notif_doc, &state); 3042 ok(hres == S_OK, "get_readyState failed: %08x\n", hres); 3043 3044 if(!strcmp_wa(state, "complete")) 3045 doc_complete = TRUE; 3046 3047 SysFreeString(state); 3048 } 3049 3050 return S_OK; 3051 } 3052 3053 static HRESULT WINAPI PropertyNotifySink_OnRequestEdit(IPropertyNotifySink *iface, DISPID dispID) 3054 { 3055 ok(0, "unexpected call\n"); 3056 return E_NOTIMPL; 3057 } 3058 3059 static IPropertyNotifySinkVtbl PropertyNotifySinkVtbl = { 3060 PropertyNotifySink_QueryInterface, 3061 PropertyNotifySink_AddRef, 3062 PropertyNotifySink_Release, 3063 PropertyNotifySink_OnChanged, 3064 PropertyNotifySink_OnRequestEdit 3065 }; 3066 3067 static IPropertyNotifySink PropertyNotifySink = { &PropertyNotifySinkVtbl }; 3068 3069 static IHTMLDocument2 *create_doc_with_string(const char *str) 3070 { 3071 IPersistStreamInit *init; 3072 IStream *stream; 3073 IHTMLDocument2 *doc; 3074 HGLOBAL mem; 3075 SIZE_T len; 3076 3077 notif_doc = doc = create_document(); 3078 if(!doc) 3079 return NULL; 3080 3081 doc_complete = FALSE; 3082 len = strlen(str); 3083 mem = GlobalAlloc(0, len); 3084 memcpy(mem, str, len); 3085 CreateStreamOnHGlobal(mem, TRUE, &stream); 3086 3087 IHTMLDocument2_QueryInterface(doc, &IID_IPersistStreamInit, (void**)&init); 3088 3089 IPersistStreamInit_Load(init, stream); 3090 IPersistStreamInit_Release(init); 3091 IStream_Release(stream); 3092 3093 return doc; 3094 } 3095 3096 static void do_advise(IUnknown *unk, REFIID riid, IUnknown *unk_advise) 3097 { 3098 IConnectionPointContainer *container; 3099 IConnectionPoint *cp; 3100 DWORD cookie; 3101 HRESULT hres; 3102 3103 hres = IUnknown_QueryInterface(unk, &IID_IConnectionPointContainer, (void**)&container); 3104 ok(hres == S_OK, "QueryInterface(IID_IConnectionPointContainer) failed: %08x\n", hres); 3105 3106 hres = IConnectionPointContainer_FindConnectionPoint(container, riid, &cp); 3107 IConnectionPointContainer_Release(container); 3108 ok(hres == S_OK, "FindConnectionPoint failed: %08x\n", hres); 3109 3110 hres = IConnectionPoint_Advise(cp, unk_advise, &cookie); 3111 IConnectionPoint_Release(cp); 3112 ok(hres == S_OK, "Advise failed: %08x\n", hres); 3113 } 3114 3115 typedef void (*style_test_t)(IHTMLDocument2*); 3116 3117 static void run_test(const char *str, style_test_t test) 3118 { 3119 IHTMLDocument2 *doc; 3120 ULONG ref; 3121 MSG msg; 3122 3123 doc = create_doc_with_string(str); 3124 if(!doc) 3125 return; 3126 3127 do_advise((IUnknown*)doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink); 3128 3129 while(!doc_complete && GetMessageW(&msg, NULL, 0, 0)) { 3130 TranslateMessage(&msg); 3131 DispatchMessageW(&msg); 3132 } 3133 3134 test(doc); 3135 3136 ref = IHTMLDocument2_Release(doc); 3137 ok(!ref || broken(ref == 1), /* Vista */ 3138 "ref = %d\n", ref); 3139 } 3140 3141 3142 START_TEST(style) 3143 { 3144 CoInitialize(NULL); 3145 3146 run_test(basic_test_str, basic_style_test); 3147 run_test(runtimestyle_test_str, runtimestyle_test); 3148 3149 CoUninitialize(); 3150 } 3151