[MSHTML_WINETEST] Sync with Wine Staging 1.7.37. CORE-9246

svn path=/trunk/; revision=66929
This commit is contained in:
Amine Khaldi
2015-03-28 15:53:45 +00:00
parent 1974d5fbfa
commit ea0f4ccd4c
12 changed files with 1000 additions and 43 deletions
+79 -4
View File
@@ -217,6 +217,7 @@ static BSTR a2bstr(const char *str)
static IOleClientSite *client_site;
static IDispatch *sink_disp;
static READYSTATE plugin_readystate = READYSTATE_UNINITIALIZED;
static BOOL have_container;
static void set_plugin_readystate(READYSTATE state)
{
@@ -468,15 +469,19 @@ static HRESULT WINAPI QuickActivate_QuickActivate(IQuickActivate *iface, QACONTA
ok(!container->pUnkEventSink, "container->pUnkEventSink != NULL\n");
ok(container->dwAmbientFlags == (QACONTAINER_SUPPORTSMNEMONICS|QACONTAINER_MESSAGEREFLECT|QACONTAINER_USERMODE),
"container->dwAmbientFlags = %x\n", container->dwAmbientFlags);
ok(!container->colorFore, "container->colorFore == 0\n"); /* FIXME */
if(have_container)
ok(!container->colorFore, "container->colorFore = %d\n", container->colorFore); /* FIXME */
todo_wine
ok(container->colorBack, "container->colorBack == 0\n"); /* FIXME */
todo_wine
ok(container->pFont != NULL, "container->pFont == NULL\n");
if(have_container)
todo_wine ok(container->pFont != NULL, "container->pFont == NULL\n");
else
ok(!container->pFont, "container->pFont = %p\n", container->pFont);
todo_wine
ok(container->pUndoMgr != NULL, "container->pUndoMgr == NULL\n");
ok(!container->dwAppearance, "container->dwAppearance = %x\n", container->dwAppearance);
ok(!container->lcid, "container->lcid = %x\n", container->lcid);
if(have_container)
ok(!container->lcid, "container->lcid = %x\n", container->lcid);
ok(!container->hpal, "container->hpal = %p\n", container->hpal);
ok(!container->pBindHost, "container->pBindHost != NULL\n");
ok(!container->pOleControlSite, "container->pOleControlSite != NULL\n");
@@ -2366,6 +2371,7 @@ static void init_test(int behavior)
activex_refcnt = 0;
no_quickact = behavior == TEST_NOQUICKACT || behavior == TEST_DISPONLY;
have_container = TRUE;
}
static void test_event_call(void)
@@ -2605,6 +2611,73 @@ static void test_nooleobj_ax(void)
release_doc(doc);
}
static void test_exec_script(IHTMLDocument2 *doc, const char *codea, const char *langa)
{
IHTMLWindow2 *window;
BSTR code, lang;
VARIANT v;
HRESULT hres;
hres = IHTMLDocument2_get_parentWindow(doc, &window);
ok(hres == S_OK, "get_parentWindow failed: %08x\n", hres);
code = a2bstr(codea);
lang = a2bstr(langa);
hres = IHTMLWindow2_execScript(window, code, lang, &v);
ok(hres == S_OK, "execScript failed: %08x\n", hres);
SysFreeString(lang);
VariantClear(&v);
IHTMLWindow2_Release(window);
}
static void test_create_element(void)
{
IHTMLDocument2 *doc;
init_test(TEST_FLASH);
doc = create_doc("<html></html>");
have_container = FALSE;
SET_EXPECT(CreateInstance);
SET_EXPECT(FreezeEvents_TRUE);
SET_EXPECT(QuickActivate);
SET_EXPECT(IPersistPropertyBag_InitNew);
SET_EXPECT(Invoke_READYSTATE);
SET_EXPECT(FreezeEvents_FALSE);
test_exec_script(doc,
"var test_elem = document.createElement('object');"
"test_elem.classid = 'CLSID:178fc163-f585-4e24-9c13-4bb7f6680746';",
"javascript");
CHECK_CALLED(CreateInstance);
todo_wine CHECK_CALLED(FreezeEvents_TRUE);
CHECK_CALLED(QuickActivate);
CHECK_CALLED(IPersistPropertyBag_InitNew);
CHECK_CALLED(Invoke_READYSTATE);
todo_wine CHECK_CALLED(FreezeEvents_FALSE);
have_container = TRUE;
SET_EXPECT(DoVerb);
test_exec_script(doc,
"document.body.appendChild(test_elem);",
"javascript");
todo_wine CHECK_CALLED(DoVerb);
SET_EXPECT(InPlaceDeactivate);
SET_EXPECT(Close);
SET_EXPECT(SetClientSite_NULL);
release_doc(doc);
todo_wine CHECK_CALLED(InPlaceDeactivate);
CHECK_CALLED(Close);
CHECK_CALLED(SetClientSite_NULL);
}
static LRESULT WINAPI wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
return DefWindowProcW(hwnd, msg, wParam, lParam);
@@ -2741,6 +2814,8 @@ START_TEST(activex)
test_nooleobj_ax();
trace("Testing event object binding...\n");
test_event_binding();
trace("Testing createElement(object)...\n");
test_create_element();
init_registry(FALSE);
}else {
skip("Could not register ActiveX\n");
+454 -15
View File
@@ -264,6 +264,7 @@ static const IID * const text_iids[] = {
&IID_IHTMLDOMNode,
&IID_IHTMLDOMNode2,
&IID_IHTMLDOMTextNode,
&IID_IHTMLDOMTextNode2,
NULL
};
@@ -381,6 +382,7 @@ static const IID * const form_iids[] = {
ELEM_IFACES,
&IID_IHTMLFormElement,
&IID_IConnectionPointContainer,
&DIID_DispHTMLFormElement,
NULL
};
@@ -477,6 +479,20 @@ static int strcmp_wa(LPCWSTR strw, const char *stra)
return lstrcmpA(stra, buf);
}
static BOOL is_prefix_wa(const WCHAR *strw, const char *prefix)
{
int len, prefix_len;
CHAR buf[512];
len = WideCharToMultiByte(CP_ACP, 0, strw, -1, buf, sizeof(buf), NULL, NULL)-1;
prefix_len = lstrlenA(prefix);
if(len < prefix_len)
return FALSE;
buf[prefix_len] = 0;
return !lstrcmpA(buf, prefix);
}
static BSTR a2bstr(const char *str)
{
BSTR ret;
@@ -858,6 +874,17 @@ static IHTMLDOMTextNode *_get_text_iface(unsigned line, IUnknown *unk)
return text;
}
#define get_text2_iface(u) _get_text2_iface(__LINE__,u)
static IHTMLDOMTextNode2 *_get_text2_iface(unsigned line, IUnknown *unk)
{
IHTMLDOMTextNode2 *text2;
HRESULT hres;
hres = IUnknown_QueryInterface(unk, &IID_IHTMLDOMTextNode2, (void**)&text2);
ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLDOMTextNode2: %08x\n", hres);
return text2;
}
#define get_comment_iface(u) _get_comment_iface(__LINE__,u)
static IHTMLCommentElement *_get_comment_iface(unsigned line, IUnknown *unk)
{
@@ -1479,6 +1506,37 @@ static void _test_anchor_hostname(unsigned line, IUnknown *unk, const char *host
SysFreeString(str);
}
#define test_anchor_search(a,h,n) _test_anchor_search(__LINE__,a,h,n)
static void _test_anchor_search(unsigned line, IUnknown *elem, const char *search, BOOL allowbroken)
{
IHTMLAnchorElement *anchor = _get_anchor_iface(line, elem);
BSTR str;
HRESULT hres;
hres = IHTMLAnchorElement_get_search(anchor, &str);
ok_(__FILE__,line)(hres == S_OK, "get_search failed: %08x\n", hres);
if ( ! str && allowbroken)
win_skip("skip ie6 incorrect behavior\n");
else if(search)
ok_(__FILE__,line)(!strcmp_wa(str, search), "search = %s, expected %s\n", wine_dbgstr_w(str), search);
else
ok_(__FILE__,line)(!str, "search = %s, expected NULL\n", wine_dbgstr_w(str));
SysFreeString(str);
}
#define test_anchor_put_search(a,h) _test_anchor_put_search(__LINE__,a,h)
static void _test_anchor_put_search(unsigned line, IUnknown *unk, const char *search)
{
IHTMLAnchorElement *anchor = _get_anchor_iface(line, unk);
BSTR str;
HRESULT hres;
str = search ? a2bstr(search) : NULL;
hres = IHTMLAnchorElement_put_search(anchor, str);
ok_(__FILE__,line)(hres == S_OK, "put_search failed: %08x\n", hres);
SysFreeString(str);
}
#define test_anchor_hash(a,h) _test_anchor_hash(__LINE__,a,h)
static void _test_anchor_hash(unsigned line, IHTMLElement *elem, const char *exhash)
{
@@ -1640,6 +1698,20 @@ static void _test_textarea_type(unsigned line, IUnknown *unk)
SysFreeString(type);
}
#define get_textarea_form(t) _get_textarea_form(__LINE__,t)
static IHTMLFormElement *_get_textarea_form(unsigned line, IUnknown *unk)
{
IHTMLTextAreaElement *textarea = _get_textarea_iface(line, unk);
IHTMLFormElement *form;
HRESULT hres;
hres = IHTMLTextAreaElement_get_form(textarea, &form);
IHTMLTextAreaElement_Release(textarea);
ok_(__FILE__,line)(hres == S_OK, "get_type failed: %08x\n", hres);
return form;
}
#define test_comment_text(c,t) _test_comment_text(__LINE__,c,t)
static void _test_comment_text(unsigned line, IUnknown *unk, const char *extext)
{
@@ -2102,6 +2174,17 @@ static void _test_range_isequal(unsigned line, IHTMLTxtRange *range1, IHTMLTxtRa
}
}
#define test_range_paste_html(a,b) _test_range_paste_html(__LINE__,a,b)
static void _test_range_paste_html(unsigned line, IHTMLTxtRange *range, const char *html)
{
BSTR str = a2bstr(html);
HRESULT hres;
hres = IHTMLTxtRange_pasteHTML(range, str);
ok_(__FILE__,line)(hres == S_OK, "pasteHTML failed: %08x\n", hres);
SysFreeString(str);
}
#define test_range_parent(r,t) _test_range_parent(__LINE__,r,t)
static void _test_range_parent(unsigned line, IHTMLTxtRange *range, elem_type_t type)
{
@@ -2455,6 +2538,18 @@ static void _test_elem_contains(unsigned line, IHTMLElement *elem, IHTMLElement
ok_(__FILE__,line)(b == exval, "contains returned %x, expected %x\n", b, exval);
}
#define test_elem_istextedit(a,b) _test_elem_istextedit(__LINE__,a,b)
static void _test_elem_istextedit(unsigned line, IHTMLElement *elem, VARIANT_BOOL exval)
{
VARIANT_BOOL b;
HRESULT hres;
b = 100;
hres = IHTMLElement_get_isTextEdit(elem, &b);
ok_(__FILE__,line)(hres == S_OK, "isTextEdit failed: %08x\n", hres);
ok_(__FILE__,line)(b == exval, "isTextEdit = %x\n", b);
}
#define get_first_child(n) _get_first_child(__LINE__,n)
static IHTMLDOMNode *_get_first_child(unsigned line, IUnknown *unk)
{
@@ -2638,6 +2733,19 @@ static void _set_text_data(unsigned line, IUnknown *unk, const char *data)
SysFreeString(str);
}
#define text_append_data(a,b) _text_append_data(__LINE__,a,b)
static void _text_append_data(unsigned line, IUnknown *unk, const char *data)
{
IHTMLDOMTextNode2 *text = _get_text2_iface(line, unk);
BSTR str = a2bstr(data);
HRESULT hres;
hres = IHTMLDOMTextNode2_appendData(text, str);
ok_(__FILE__,line)(hres == S_OK, "appendData failed: %08x\n", hres);
IHTMLDOMTextNode2_Release(text);
SysFreeString(str);
}
#define test_select_set_disabled(i,b) _test_select_set_disabled(__LINE__,i,b)
static void _test_select_set_disabled(unsigned line, IHTMLSelectElement *select, VARIANT_BOOL b)
{
@@ -2649,6 +2757,39 @@ static void _test_select_set_disabled(unsigned line, IHTMLSelectElement *select,
_test_select_get_disabled(line, select, b);
}
#define test_elem_dir(u,n) _test_elem_dir(__LINE__,u,n)
static void _test_elem_dir(unsigned line, IUnknown *unk, const char *exdir)
{
IHTMLElement2 *elem = _get_elem2_iface(line, unk);
BSTR dir;
HRESULT hres;
hres = IHTMLElement2_get_dir(elem, &dir);
IHTMLElement2_Release(elem);
ok_(__FILE__, line) (hres == S_OK, "get_dir failed: %08x\n", hres);
if(exdir)
ok_(__FILE__, line) (!strcmp_wa(dir, exdir), "got dir: %s, expected %s\n", wine_dbgstr_w(dir), exdir);
else
ok_(__FILE__, line) (!dir, "got dir: %s, expected NULL\n", wine_dbgstr_w(dir));
SysFreeString(dir);
}
#define set_elem_dir(u,n) _set_elem_dir(__LINE__,u,n)
static void _set_elem_dir(unsigned line, IUnknown *unk, const char *dira)
{
IHTMLElement2 *elem = _get_elem2_iface(line, unk);
BSTR dir = a2bstr(dira);
HRESULT hres;
hres = IHTMLElement2_put_dir(elem, dir);
IHTMLElement2_Release(elem);
ok_(__FILE__, line) (hres == S_OK, "put_dir failed: %08x\n", hres);
SysFreeString(dir);
_test_elem_dir(line, unk, dira);
}
#define elem_get_scroll_height(u) _elem_get_scroll_height(__LINE__,u)
static LONG _elem_get_scroll_height(unsigned line, IUnknown *unk)
{
@@ -3107,6 +3248,36 @@ static void _test_elem_id(unsigned line, IUnknown *unk, const char *exid)
SysFreeString(id);
}
#define test_elem_language(e,i) _test_elem_language(__LINE__,e,i)
static void _test_elem_language(unsigned line, IHTMLElement *elem, const char *exlang)
{
BSTR lang = (void*)0xdeadbeef;
HRESULT hres;
hres = IHTMLElement_get_language(elem, &lang);
ok_(__FILE__,line) (hres == S_OK, "get_language failed: %08x\n", hres);
if(exlang)
ok_(__FILE__,line) (!strcmp_wa(lang, exlang), "unexpected language %s\n", wine_dbgstr_w(lang));
else
ok_(__FILE__,line) (!lang, "language=%s\n", wine_dbgstr_w(lang));
SysFreeString(lang);
}
#define set_elem_language(e,i) _set_elem_language(__LINE__,e,i)
static void _set_elem_language(unsigned line, IHTMLElement *elem, const char *lang)
{
BSTR str = a2bstr(lang);
HRESULT hres;
hres = IHTMLElement_put_language(elem, str);
ok_(__FILE__,line) (hres == S_OK, "get_language failed: %08x\n", hres);
SysFreeString(str);
_test_elem_language(line, elem, lang);
}
#define test_elem_put_id(u,i) _test_elem_put_id(__LINE__,u,i)
static void _test_elem_put_id(unsigned line, IUnknown *unk, const char *new_id)
{
@@ -4742,22 +4913,47 @@ static IHTMLTxtRange *test_create_body_range(IHTMLDocument2 *doc)
return range;
}
#define range_duplicate(a) _range_duplicate(__LINE__,a)
static IHTMLTxtRange *_range_duplicate(unsigned line, IHTMLTxtRange *range)
{
IHTMLTxtRange *ret;
HRESULT hres;
hres = IHTMLTxtRange_duplicate(range, &ret);
ok_(__FILE__,line)(hres == S_OK, "duplicate failed: %08x\n", hres);
return ret;
}
#define test_range_set_end_point(a,b,c,d) _test_range_set_end_point(__LINE__,a,b,c,d)
static void _test_range_set_end_point(unsigned line, IHTMLTxtRange *range, const char *how,
IHTMLTxtRange *ref_range, HRESULT exhres)
{
BSTR str = a2bstr(how);
HRESULT hres;
hres = IHTMLTxtRange_setEndPoint(range, str, ref_range);
ok_(__FILE__,line)(hres == exhres, "setEndPoint failed: %08x, expected %08x\n", hres, exhres);
SysFreeString(str);
}
static void test_txtrange(IHTMLDocument2 *doc)
{
IHTMLTxtRange *body_range, *range, *range2;
IHTMLSelectionObject *selection;
IDispatch *disp_range;
IHTMLElement *body;
HRESULT hres;
body_range = test_create_body_range(doc);
test_disp((IUnknown*)body_range, &IID_IHTMLTxtRange, "[object]");
test_range_text(body_range, "test abc 123\r\nit's text");
hres = IHTMLTxtRange_duplicate(body_range, &range);
ok(hres == S_OK, "duplicate failed: %08x\n", hres);
range = range_duplicate(body_range);
range2 = range_duplicate(body_range);
hres = IHTMLTxtRange_duplicate(body_range, &range2);
ok(hres == S_OK, "duplicate failed: %08x\n", hres);
test_range_isequal(range, range2, VARIANT_TRUE);
test_range_text(range, "test abc 123\r\nit's text");
@@ -4797,8 +4993,7 @@ static void test_txtrange(IHTMLDocument2 *doc)
IHTMLTxtRange_Release(range);
hres = IHTMLTxtRange_duplicate(body_range, &range);
ok(hres == S_OK, "duplicate failed: %08x\n", hres);
range = range_duplicate(body_range);
test_range_text(range, "test abc 123\r\nit's text");
test_range_move(range, characterW, 3, 3);
@@ -4816,8 +5011,7 @@ static void test_txtrange(IHTMLDocument2 *doc)
IHTMLTxtRange_Release(range);
hres = IHTMLTxtRange_duplicate(body_range, &range);
ok(hres == S_OK, "duplicate failed: %08x\n", hres);
range = range_duplicate(body_range);
test_range_move(range, wordW, 1, 1);
test_range_moveend(range, characterW, 2, 2);
@@ -4843,8 +5037,7 @@ static void test_txtrange(IHTMLDocument2 *doc)
IHTMLTxtRange_Release(range);
hres = IHTMLTxtRange_duplicate(body_range, &range);
ok(hres == S_OK, "duplicate failed: %08x\n", hres);
range = range_duplicate(body_range);
test_range_move(range, wordW, 2, 2);
test_range_moveend(range, characterW, 2, 2);
@@ -4868,8 +5061,7 @@ static void test_txtrange(IHTMLDocument2 *doc)
IHTMLTxtRange_Release(range);
hres = IHTMLTxtRange_duplicate(body_range, &range);
ok(hres == S_OK, "duplicate failed: %08x\n", hres);
range = range_duplicate(body_range);
test_range_collapse(range, TRUE);
test_range_expand(range, wordW, VARIANT_TRUE, "test ");
@@ -4892,11 +5084,12 @@ static void test_txtrange(IHTMLDocument2 *doc)
test_range_text(range, NULL);
IHTMLTxtRange_Release(range);
IHTMLTxtRange_Release(body_range);
hres = IHTMLDocument2_get_selection(doc, &selection);
ok(hres == S_OK, "IHTMLDocument2_get_selection failed: %08x\n", hres);
test_disp((IUnknown*)selection, &IID_IHTMLSelectionObject, "[object]");
hres = IHTMLSelectionObject_createRange(selection, &disp_range);
ok(hres == S_OK, "IHTMLSelectionObject_createRange failed: %08x\n", hres);
IHTMLSelectionObject_Release(selection);
@@ -4928,7 +5121,63 @@ static void test_txtrange(IHTMLDocument2 *doc)
test_range_moveend(range, characterW, 2, 2);
test_range_text(range, "ab");
body = doc_get_body(doc);
hres = IHTMLTxtRange_moveToElementText(range, body);
ok(hres == S_OK, "moveToElementText failed: %08x\n", hres);
test_range_text(range, "abc xyz abc 123\r\nit's text");
test_range_parent(range, ET_BODY);
test_range_move(range, wordW, 1, 1);
test_range_moveend(range, characterW, 12, 12);
test_range_text(range, "xyz abc 123");
test_range_collapse(range, VARIANT_TRUE);
test_range_paste_html(range, "<br>paste<br>");
test_range_text(range, NULL);
test_range_moveend(range, characterW, 3, 3);
test_range_text(range, "xyz");
hres = IHTMLTxtRange_moveToElementText(range, body);
ok(hres == S_OK, "moveToElementText failed: %08x\n", hres);
test_range_text(range, "abc \r\npaste\r\nxyz abc 123\r\nit's text");
test_range_move(range, wordW, 2, 2);
test_range_collapse(range, VARIANT_TRUE);
test_range_moveend(range, characterW, 5, 5);
test_range_text(range, "paste");
range2 = range_duplicate(range);
test_range_set_end_point(range, "starttostart", body_range, S_OK);
test_range_text(range, "abc \r\npaste");
test_range_set_end_point(range, "endtoend", body_range, S_OK);
test_range_text(range, "abc \r\npaste\r\nxyz abc 123\r\nit's text");
test_range_set_end_point(range, "starttoend", range2, S_OK);
test_range_text(range, "\r\nxyz abc 123\r\nit's text");
test_range_set_end_point(range, "starttostart", body_range, S_OK);
test_range_set_end_point(range, "endtostart", range2, S_OK);
test_range_text(range, "abc ");
test_range_set_end_point(range, "starttoend", body_range, S_OK);
test_range_text(range, "paste\r\nxyz abc 123\r\nit's text");
test_range_set_end_point(range, "EndToStart", body_range, S_OK);
test_range_text(range, "abc ");
test_range_set_end_point(range, "xxx", body_range, E_INVALIDARG);
IHTMLTxtRange_Release(range);
IHTMLTxtRange_Release(range2);
IHTMLTxtRange_Release(body_range);
IHTMLElement_Release(body);
}
static void test_txtrange2(IHTMLDocument2 *doc)
@@ -5118,6 +5367,27 @@ static void _test_framebase_put_name(unsigned line, IHTMLElement *elem, const ch
IHTMLFrameBase_Release(fbase);
}
#define test_framebase_src(a,b) _test_framebase_src(__LINE__,a,b)
static void _test_framebase_src(unsigned line, IHTMLElement *elem, const char *src)
{
BSTR str = (void*)0xdeadbeef;
IHTMLFrameBase *fbase;
HRESULT hres;
hres = IHTMLElement_QueryInterface(elem, &IID_IHTMLFrameBase, (void**)&fbase);
ok(hres == S_OK, "Could not get IHTMLFrameBase interface: 0x%08x\n", hres);
hres = IHTMLFrameBase_get_src(fbase, &str);
ok_(__FILE__,line)(hres == S_OK, "IHTMLFrameBase_get_src failed: 0x%08x\n", hres);
if(src)
ok_(__FILE__,line)(!strcmp_wa(str, src), "src = %s, expected %s\n", wine_dbgstr_w(str), src);
else
ok_(__FILE__,line)(!str, "src = %s, expected NULL\n", wine_dbgstr_w(str));
SysFreeString(str);
IHTMLFrameBase_Release(fbase);
}
#define test_framebase_marginheight(a,b) _test_framebase_marginheight(__LINE__,a,b)
static void _test_framebase_marginheight(unsigned line, IHTMLFrameBase *framebase, const char *exval)
{
@@ -5549,6 +5819,9 @@ static void test_default_body(IHTMLBodyElement *body)
ok(!l, "scrollTop = %d\n", l);
elem_get_scroll_left((IUnknown*)body);
test_elem_dir((IUnknown*)body, NULL);
set_elem_dir((IUnknown*)body, "ltr");
/* get_text tests */
hres = IHTMLBodyElement_get_text(body, &v);
ok(hres == S_OK, "expect S_OK got 0x%08d\n", hres);
@@ -5791,8 +6064,10 @@ static void test_defaults(IHTMLDocument2 *doc)
IHTMLElement2 *elem2;
IHTMLElement *elem;
IHTMLStyle *style;
VARIANT v;
BSTR str;
LONG l;
VARIANT_BOOL b;
HRESULT hres;
IHTMLElementCollection *collection;
@@ -5859,6 +6134,8 @@ static void test_defaults(IHTMLDocument2 *doc)
test_body_funs(body);
IHTMLBodyElement_Release(body);
test_elem_istextedit(elem, VARIANT_TRUE);
hres = IHTMLElement_get_style(elem, &style);
ok(hres == S_OK, "get_style failed: %08x\n", hres);
@@ -5915,6 +6192,22 @@ static void test_defaults(IHTMLDocument2 *doc)
hres = IHTMLElement_QueryInterface(elem, &IID_IHTMLFiltersCollection, (void**)&body);
ok(hres == E_NOINTERFACE, "got interface IHTMLFiltersCollection\n");
str = a2bstr("xxx");
b = 100;
V_VT(&v) = VT_EMPTY;
hres = IHTMLDocument2_execCommand(doc, str, FALSE, v, &b);
ok(hres == OLECMDERR_E_NOTSUPPORTED || hres == E_INVALIDARG,
"execCommand failed: %08x, expected OLECMDERR_E_NOTSUPPORTED or E_INVALIDARG\n", hres);
SysFreeString(str);
str = a2bstr("respectvisibilityindesign");
b = 100;
V_VT(&v) = VT_BOOL;
V_BOOL(&v) = VARIANT_TRUE;
hres = IHTMLDocument2_execCommand(doc, str, FALSE, v, &b);
ok(hres == S_OK, "execCommand failed: %08x, expected DRAGDROP_E_NOTREGISTERED\n", hres);
SysFreeString(str);
test_default_selection(doc);
test_doc_title(doc, "");
test_dom_implementation(doc);
@@ -5985,6 +6278,8 @@ static void test_button_elem(IHTMLElement *elem)
{
test_button_name(elem, NULL);
set_button_name(elem, "button name");
test_elem_istextedit(elem, VARIANT_TRUE);
}
#define test_tr_possess(e,r,l,i) _test_tr_possess(__LINE__,e,r,l,i)
@@ -6259,6 +6554,23 @@ static void _test_table_cell_spacing(unsigned line, IHTMLTable *table, const cha
VariantClear(&v);
}
#define test_table_cell_padding(a,b) _test_table_cell_padding(__LINE__,a,b)
static void _test_table_cell_padding(unsigned line, IHTMLTable *table, const char *exstr)
{
VARIANT v;
HRESULT hres;
V_VT(&v) = VT_ERROR;
hres = IHTMLTable_get_cellPadding(table, &v);
ok_(__FILE__,line)(hres == S_OK, "get_cellPadding failed: %08x\n", hres);
ok_(__FILE__,line)(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
if(exstr)
ok_(__FILE__,line)(!strcmp_wa(V_BSTR(&v), exstr), "cellPadding = %s, expected %s\n", wine_dbgstr_w(V_BSTR(&v)), exstr);
else
ok_(__FILE__,line)(!V_BSTR(&v), "cellPadding = %s, expected NULL\n", wine_dbgstr_w(V_BSTR(&v)));
VariantClear(&v);
}
static void test_table_modify(IHTMLTable *table)
{
IDispatch *disp;
@@ -6361,6 +6673,27 @@ static void test_table_elem(IHTMLElement *elem)
test_table_cell_spacing(table, "11");
VariantClear(&v);
test_table_cell_padding(table, NULL);
V_VT(&v) = VT_I4;
V_I4(&v) = 10;
hres = IHTMLTable_put_cellPadding(table, v);
ok(hres == S_OK, "put_cellPadding = %08x\n", hres);
test_table_cell_padding(table, "10");
V_VT(&v) = VT_BSTR;
V_BSTR(&v) = a2bstr("11");
hres = IHTMLTable_put_cellPadding(table, v);
ok(hres == S_OK, "put_cellPadding = %08x\n", hres);
test_table_cell_padding(table, "11");
VariantClear(&v);
V_VT(&v) = VT_R8;
V_R8(&v) = 5;
hres = IHTMLTable_put_cellPadding(table, v);
ok(hres == S_OK, "put_cellPadding = %08x\n", hres);
test_table_cell_padding(table, "5");
bstr = a2bstr("left");
hres = IHTMLTable_put_align(table, bstr);
ok(hres == S_OK, "set_align failed: %08x\n", hres);
@@ -6455,7 +6788,6 @@ static void test_table_elem(IHTMLElement *elem)
ok(!strcmp_wa(V_BSTR(&v), "11"), "Expected 11, got %s\n", wine_dbgstr_w(V_BSTR(&v)));
VariantClear(&v);
bstr = a2bstr("box");
hres = IHTMLTable_put_frame(table, bstr);
ok(hres == S_OK, "put_frame = %08x\n", hres);
@@ -6685,6 +7017,7 @@ static void test_iframe_elem(IHTMLElement *elem)
set_iframe_width(elem, "150px");
set_iframe_width(elem, "70%");
test_iframe_width(elem, "70%");
test_framebase_src(elem, "about:blank");
str = a2bstr("text/html");
V_VT(&errv) = VT_ERROR;
@@ -6720,6 +7053,43 @@ static void test_iframe_elem(IHTMLElement *elem)
IHTMLDocument2_Release(content_doc);
}
#define test_stylesheet_csstext(a,b,c) _test_stylesheet_csstext(__LINE__,a,b,c)
static void _test_stylesheet_csstext(unsigned line, IHTMLStyleSheet *stylesheet, const char *exstr, BOOL is_todo)
{
BSTR str;
HRESULT hres;
hres = IHTMLStyleSheet_get_cssText(stylesheet, &str);
ok_(__FILE__,line)(hres == S_OK, "get_cssText failed: %08x\n", hres);
if(!is_todo) {
if(exstr)
ok_(__FILE__,line)(is_prefix_wa(str, exstr), "cssText = %s\n", wine_dbgstr_w(str));
else
ok_(__FILE__,line)(!str, "cssText = %s\n", wine_dbgstr_w(str));
}else todo_wine {
if(exstr)
ok_(__FILE__,line)(is_prefix_wa(str, exstr), "cssText = %s\n", wine_dbgstr_w(str));
else
ok_(__FILE__,line)(!str, "cssText = %s\n", wine_dbgstr_w(str));
}
SysFreeString(str);
}
#define set_stylesheet_csstext(a,b,c) _set_stylesheet_csstext(__LINE__,a,b,c)
static void _set_stylesheet_csstext(unsigned line, IHTMLStyleSheet *stylesheet, const char *csstext, BOOL is_todo)
{
BSTR str = a2bstr(csstext);
HRESULT hres;
hres = IHTMLStyleSheet_put_cssText(stylesheet, str);
if(!is_todo)
ok_(__FILE__,line)(hres == S_OK, "put_cssText failed: %08x\n", hres);
else
todo_wine ok_(__FILE__,line)(hres == S_OK, "put_cssText failed: %08x\n", hres);
SysFreeString(str);
}
static void test_stylesheet(IDispatch *disp)
{
IHTMLStyleSheetRulesCollection *col = NULL;
@@ -6745,6 +7115,14 @@ static void test_stylesheet(IDispatch *disp)
ok(href == NULL, "got href != NULL\n");
SysFreeString(href);
test_stylesheet_csstext(stylesheet, ".body {", FALSE);
set_stylesheet_csstext(stylesheet, ".div { margin-right: 1px; }\n.body { margin-right: 2px; }", TRUE);
test_stylesheet_csstext(stylesheet, ".div {", TRUE);
set_stylesheet_csstext(stylesheet, "", FALSE);
test_stylesheet_csstext(stylesheet, NULL, FALSE);
set_stylesheet_csstext(stylesheet, ".div { margin-right: 1px; }", FALSE);
test_stylesheet_csstext(stylesheet, ".div {", FALSE);
IHTMLStyleSheet_Release(stylesheet);
}
@@ -6989,6 +7367,7 @@ static void test_elems(IHTMLDocument2 *doc)
test_plugins_col(doc);
elem = get_doc_elem(doc);
test_elem_istextedit(elem, VARIANT_FALSE);
test_elem_all((IUnknown*)elem, all_types+1, sizeof(all_types)/sizeof(all_types[0])-1);
IHTMLElement_Release(elem);
@@ -7008,6 +7387,7 @@ static void test_elems(IHTMLDocument2 *doc)
test_elem_tabindex((IUnknown*)elem, 0);
test_elem_set_tabindex((IUnknown*)elem, 1);
test_elem_filters((IUnknown*)elem);
test_elem_istextedit(elem, VARIANT_FALSE);
node = test_node_get_parent((IUnknown*)elem);
ok(node != NULL, "node == NULL\n");
@@ -7068,6 +7448,7 @@ static void test_elems(IHTMLDocument2 *doc)
test_select_elem(select);
test_elem_istextedit(elem, VARIANT_FALSE);
test_elem_title((IUnknown*)select, NULL);
test_elem_set_title((IUnknown*)select, "Title");
test_elem_title((IUnknown*)select, "Title");
@@ -7104,6 +7485,9 @@ static void test_elems(IHTMLDocument2 *doc)
hres = IHTMLElement_QueryInterface(elem, &IID_IHTMLScriptElement, (void**)&script);
ok(hres == S_OK, "Could not get IHTMLScriptElement interface: %08x\n", hres);
test_elem_language(elem, NULL);
test_elem_istextedit(elem, VARIANT_FALSE);
if(hres == S_OK)
{
VARIANT_BOOL vb;
@@ -7143,6 +7527,9 @@ static void test_elems(IHTMLDocument2 *doc)
}
IHTMLScriptElement_Release(script);
set_elem_language(elem, "vbscript");
set_elem_language(elem, "xxx");
}
elem = get_elem_by_id(doc, "in", TRUE);
@@ -7163,6 +7550,7 @@ static void test_elems(IHTMLDocument2 *doc)
test_input_get_disabled(input, VARIANT_FALSE);
test_elem_client_size((IUnknown*)elem);
test_input_type(input, "text");
test_elem_istextedit(elem, VARIANT_TRUE);
test_node_get_value_str((IUnknown*)elem, NULL);
test_node_put_value_str((IUnknown*)elem, "test");
@@ -7331,8 +7719,25 @@ static void test_elems(IHTMLDocument2 *doc)
test_anchor_put_name((IUnknown*)elem, NULL);
test_anchor_put_name((IUnknown*)elem, "x");
test_anchor_put_href((IUnknown*)elem, "http://test/#hash");
test_anchor_put_href((IUnknown*)elem, "http://test/?how#hash");
test_anchor_hash(elem, "#hash");
test_anchor_search((IUnknown*)elem, "?how", FALSE);
test_anchor_put_search((IUnknown*)elem, "?word=press");
test_anchor_search((IUnknown*)elem, "?word=press", FALSE);
test_anchor_put_search((IUnknown*)elem, "?????word???press");
test_anchor_search((IUnknown*)elem, "?????word???press", FALSE);
test_anchor_put_search((IUnknown*)elem, "?q=%E4%BD%A0%E5%A5%BD"); /* encoded cjk characters */
test_anchor_search((IUnknown*)elem, "?q=%E4%BD%A0%E5%A5%BD", FALSE);
test_anchor_put_search((IUnknown*)elem, "?how?old=are");
test_anchor_search((IUnknown*)elem, "?how?old=are", FALSE);
/* due to incorrect behavior of ie6, search string without leading "?" is interpreted
as part of the pathname, and cannot be accessed by get_search. */
test_anchor_put_search((IUnknown*)elem, "word=abc");
test_anchor_search((IUnknown*)elem, "?word=abc", TRUE);
IHTMLElement_Release(elem);
}
@@ -7515,6 +7920,9 @@ static void test_elems(IHTMLDocument2 *doc)
IHTMLElement_Release(elem2);
IHTMLElement_Release(elem);
hres = IHTMLDocument3_recalc(doc3, VARIANT_TRUE);
ok(hres == S_OK, "recalc failed: %08x\n", hres);
IHTMLDocument3_Release(doc3);
elem = get_elem_by_id(doc, "s", TRUE);
@@ -7723,12 +8131,37 @@ static void test_elems2(IHTMLDocument2 *doc)
test_elem_set_innerhtml((IUnknown*)div, "<textarea id=\"ta\"></textarea>");
elem = get_elem_by_id(doc, "ta", TRUE);
if(elem) {
IHTMLFormElement *form;
test_textarea_value((IUnknown*)elem, NULL);
test_textarea_put_value((IUnknown*)elem, "test");
test_textarea_readonly((IUnknown*)elem, VARIANT_FALSE);
test_textarea_put_readonly((IUnknown*)elem, VARIANT_TRUE);
test_textarea_put_readonly((IUnknown*)elem, VARIANT_FALSE);
test_textarea_type((IUnknown*)elem);
form = get_textarea_form((IUnknown*)elem);
ok(!form, "form = %p\n", form);
test_elem_istextedit(elem, VARIANT_TRUE);
IHTMLElement_Release(elem);
}
test_elem_set_innerhtml((IUnknown*)div, "<form id=\"fid\"><textarea id=\"ta\"></textarea></form>");
elem = get_elem_by_id(doc, "ta", TRUE);
if(elem) {
IHTMLFormElement *form;
elem2 = get_elem_by_id(doc, "fid", TRUE);
ok(elem2 != NULL, "elem2 == NULL\n");
form = get_textarea_form((IUnknown*)elem);
ok(form != NULL, "form = NULL\n");
ok(iface_cmp((IUnknown*)form, (IUnknown*)elem2), "form != elem2\n");
IHTMLFormElement_Release(form);
IHTMLElement_Release(elem2);
IHTMLElement_Release(elem);
}
@@ -7835,6 +8268,11 @@ static void test_create_elems(IHTMLDocument2 *doc)
test_text_data((IUnknown*)node, "abc");
set_text_data((IUnknown*)node, "test");
test_text_data((IUnknown*)node, "test");
text_append_data((IUnknown*)node, " append");
test_text_data((IUnknown*)node, "test append");
text_append_data((IUnknown*)node, NULL);
test_text_data((IUnknown*)node, "test append");
set_text_data((IUnknown*)node, "test");
V_VT(&var) = VT_NULL;
node2 = test_node_insertbefore((IUnknown*)body, node, &var);
@@ -8338,6 +8776,7 @@ static void test_frameset(IHTMLDocument2 *doc)
test_framebase_put_name(elem, "frame name");
test_framebase_put_name(elem, NULL);
test_framebase_put_name(elem, "nm1");
test_framebase_src(elem, "about:blank");
IHTMLElement_Release(elem);
/* get_name with no name attr */
-1
View File
@@ -98,7 +98,6 @@ typedef struct {
} xy_test_t;
static const xy_test_t no_xy = {-10,-10,-10,-10};
static const xy_test_t zero_xy = {0,0,0,0};
static const char empty_doc_str[] =
"<html></html>";
+74 -2
View File
@@ -7,6 +7,10 @@ function ok(b,m) {
return external.ok(b, m);
}
function broken(expr) {
return external.broken(expr);
}
function ondataavailable_test() {
var evobj, div, b = false;
@@ -114,8 +118,35 @@ function test_handler_this() {
ok(calls == "div2,div2*,div1,div1*,body,body*", "calls = " + calls);
}
function test_insert_script() {
var e = document.createElement("script");
extern_cnt = 0;
e.src = "externscr.js";
var readystatechange_log = "";
e.onreadystatechange = function() {
readystatechange_log += "," + e.readyState;
ok(extern_cnt === 1, "extern_cnt = " + extern_cnt);
if(e.readyState === "complete") {
ok(readystatechange_log === "append,complete", "readystatechange_log = " + readystatechange_log);
external.reportSuccess();
}
}
document.body.appendChild(e);
ok(extern_cnt === 1, "extern_cnt = " + extern_cnt);
readystatechange_log = "append";
}
window.onload = function() {
try {
ok(inlscr_complete_called, "onreadystatechange not fired");
ok(extern_res_script_rs === "eval,complete1,",
"extern_res_script_rs = " + extern_res_script_rs + " expected eval,complete1,");
ok(extern_http_script_rs === "loading,loaded,complete,",
"extern_http_script_rs = " + extern_http_script_rs + " expected loading,loaded,complete,");
ok(cnt == 1, "cnt=" + cnt + " exception during loading?");
ok(this === window, "this !== window");
@@ -127,11 +158,10 @@ window.onload = function() {
test_scriptfor();
ondataavailable_test();
test_handler_this();
test_insert_script();
}catch(e) {
ok(false, "Got an exception: " + e.message);
}
external.reportSuccess();
}
</script>
<script>
@@ -165,6 +195,48 @@ img.onload = function() {
})();
</script>
<script>
var inlscr_complete_called = false, extern_res_script_rs = "", extern_http_script_rs = "";
var extern_cnt = 0;
function expect_inlscr_complete() {
var elem = document.getElementById("inlscr");
ok(elem.readyState === "complete" || broken(elem.readyState === "loading"), "expect_inlscr_complete: elem.readyState = " + elem.readyState);
if(elem.readyState === "complete")
inlscr_complete_called = true;
}
function extern_res_script_readystatechange() {
var elem = document.getElementById("extscr");
if(elem.readyState != "loading")
extern_res_script_rs += elem.readyState + extern_cnt + ",";
else
external.trace("Got loading readyState from external res script.");
}
function http_script_readystatechange() {
var elem = document.getElementById("httpscr");
extern_http_script_rs += elem.readyState + ",";
}
function on_externscr() {
var elem = document.getElementById("extscr");
ok(elem.readyState === "interactive" || broken(elem.readyState === "loading"),
"on_externscr: elem.readyState = " + elem.readyState);
extern_res_script_rs += "eval,";
}
</script>
<script id="inlscr" onreadystatechange="expect_inlscr_complete();">
(function() {
ok(inlscr_complete_called === false || broken(inlscr_complete_called), "onreadystatechange fired too early");
var elem = document.getElementById("inlscr");
ok(elem.readyState === "interactive", "inlscr: elem.readyState = " + elem.readyState);
})();
</script>
<script id="extscr" onreadystatechange="extern_res_script_readystatechange()" src="externscr.js"></script>
<script id="httpscr" onreadystatechange="http_script_readystatechange()" src="https://test.winehq.org/tests/empty.js?123456"></script>
<script>
document.body.appendChild(img);
</script>
</body>
+2
View File
@@ -1 +1,3 @@
extern_cnt++;
if("on_externscr" in window)
on_externscr();
+35 -5
View File
@@ -2988,6 +2988,9 @@ static HRESULT WINAPI OleCommandTarget_Exec(IOleCommandTarget *iface, const GUID
case 144: /* TODO */
case 178:
case 179:
case 180:
case 181:
case 182:
return E_NOTIMPL;
default:
@@ -6289,7 +6292,7 @@ static void test_clear(IHTMLDocument2 *doc)
ok(hres == S_OK, "clear failed: %08x\n", hres);
}
static const OLECMDF expect_cmds[OLECMDID_GETPRINTTEMPLATE+1] = {
static const OLECMDF expect_cmds[] = {
0,
OLECMDF_SUPPORTED, /* OLECMDID_OPEN */
OLECMDF_SUPPORTED, /* OLECMDID_NEW */
@@ -6344,7 +6347,7 @@ static void _test_QueryStatus(unsigned line, IUnknown *unk, REFIID cgid, ULONG c
return;
hres = IOleCommandTarget_QueryStatus(cmdtrg, cgid, 1, &olecmd, NULL);
ok(hres == S_OK, "QueryStatus(%u) failed: %08x\n", cmdid, hres);
ok(hres == cmdf ? S_OK : OLECMDERR_E_NOTSUPPORTED, "QueryStatus(%u) failed: %08x\n", cmdid, hres);
IOleCommandTarget_Release(cmdtrg);
@@ -6377,7 +6380,7 @@ static void test_MSHTML_QueryStatus(IHTMLDocument2 *doc, DWORD cmdf)
static void test_OleCommandTarget(IHTMLDocument2 *doc)
{
IOleCommandTarget *cmdtrg;
OLECMD cmds[OLECMDID_GETPRINTTEMPLATE];
OLECMD cmds[sizeof(expect_cmds)/sizeof(*expect_cmds)-1];
int i;
HRESULT hres;
@@ -6386,7 +6389,7 @@ static void test_OleCommandTarget(IHTMLDocument2 *doc)
if(FAILED(hres))
return;
for(i=0; i<OLECMDID_GETPRINTTEMPLATE; i++) {
for(i=0; i < sizeof(cmds)/sizeof(*cmds); i++) {
cmds[i].cmdID = i+1;
cmds[i].cmdf = 0xf0f0;
}
@@ -6398,7 +6401,7 @@ static void test_OleCommandTarget(IHTMLDocument2 *doc)
CHECK_CALLED(QueryStatus_OPEN);
CHECK_CALLED(QueryStatus_NEW);
for(i=0; i<OLECMDID_GETPRINTTEMPLATE; i++) {
for(i=0; i < sizeof(cmds)/sizeof(*cmds); i++) {
ok(cmds[i].cmdID == i+1, "cmds[%d].cmdID canged to %x\n", i, cmds[i].cmdID);
if(i+1 == OLECMDID_FIND)
continue;
@@ -6621,6 +6624,31 @@ static void test_exec_noargs(IUnknown *unk, DWORD cmdid)
IOleCommandTarget_Release(cmdtrg);
}
static void test_exec_optical_zoom(IHTMLDocument2 *doc, int factor)
{
IOleCommandTarget *cmdtrg;
VARIANT v;
HRESULT hres;
hres = IHTMLDocument2_QueryInterface(doc, &IID_IOleCommandTarget, (void**)&cmdtrg);
ok(hres == S_OK, "QueryInterface(IID_IOleCommandTarget) failed: %08x\n", hres);
if(FAILED(hres))
return;
V_VT(&v) = VT_I4;
V_I4(&v) = factor;
SET_EXPECT(GetOverrideKeyPath);
hres = IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_OPTICAL_ZOOM,
OLECMDEXECOPT_DODEFAULT, &v, NULL);
ok(hres == S_OK || broken(hres == OLECMDERR_E_NOTSUPPORTED) /* IE6 */, "Exec failed: %08x\n", hres);
CLEAR_CALLED(GetOverrideKeyPath);
IOleCommandTarget_Release(cmdtrg);
test_QueryStatus((IUnknown*)doc, NULL, OLECMDID_OPTICAL_ZOOM, 0);
}
static void test_IsDirty(IHTMLDocument2 *doc, HRESULT exhres)
{
IPersistStreamInit *perinit;
@@ -7486,6 +7514,8 @@ static void test_HTMLDocument(BOOL do_load, BOOL mime)
test_MSHTML_QueryStatus(doc, OLECMDF_SUPPORTED);
test_OleCommandTarget_fail(doc);
test_OleCommandTarget(doc);
test_exec_optical_zoom(doc, 200);
test_exec_optical_zoom(doc, 100);
test_OnAmbientPropertyChange(doc);
test_Window(doc, TRUE);
test_external(doc, TRUE);
+144 -3
View File
@@ -5,6 +5,10 @@ function ok(b,m) {
return external.ok(b, m);
}
function broken(expr) {
return external.broken(expr);
}
function test_removeAttribute(e) {
ok(e.removeAttribute('nonexisting') === false, "removeAttribute('nonexisting') didn't return false");
@@ -98,11 +102,13 @@ function test_clone_node() {
ok(cloned.style.filter === "alpha(opacity=50)", "cloned.style.filter = " + cloned.style.filter);
}
function test_setAttribute() {
var input;
function test_attrs() {
var input, s, x, f, b;
document.body.innerHTML = '<input id="inputid"></input>';
input = document.getElementById("inputid");
s = input.style;
f = input.fireEvent;
ok(input.checked === false, "input.checked = " + input.checked);
input.setAttribute("checked", "test");
@@ -113,6 +119,116 @@ function test_setAttribute() {
input.setAttribute("checked", "");
ok(input.checked === false, "input.checked = " + input.checked);
input.setAttribute("Checked", 1, 0);
ok(input.checked === true, "input.checked = " + input.checked);
ok(!("Checked" in input), "Checked added to input");
input.setAttribute("checked", 0, 0);
input.setAttribute("Checked", 1, 1);
ok(input.checked === false, "input.checked = " + input.checked);
ok("Checked" in input, "checked not added to input");
ok(input.Checked === 1, "input.Checked = " + input.Checked);
input.removeAttribute("Checked", 1);
ok(!("Checked" in input), "Checked is still in input");
ok(input.checked === false, "input.checked = " + input.checked);
input.setAttribute("checked", 1, 0);
input.setAttribute("Checked", 0);
ok(input.checked === true, "input.checked = " + input.checked);
ok("Checked" in input, "checked not added to input");
ok(input.Checked === 0, "input.Checked = " + input.Checked);
input.setAttribute("Checked", 2, 2);
ok(input.Checked === 0, "input.Checked = " + input.Checked);
input.setAttribute("Checked", 3, 3);
ok(input.Checked === 3, "input.Checked = " + input.Checked);
x = input.getAttribute("style");
ok(x === s, "getAttribute('style') = " + x);
ok(s.cssText === "", "s.cssText = " + s.cssText);
x = input.getAttribute("style", 2);
ok(x === "", "getAttribute('style') = " + x);
input.setAttribute("style", "display: none");
x = input.getAttribute("style");
ok(x === s, "getAttribute('style') = " + x);
ok(s.cssText === "", "s.cssText = " + s.cssText);
ok(s.display === "", "s.display = " + s.display);
x = input.getAttribute("style", 2);
ok(x === "", "getAttribute('style') = " + x);
s.display = "none";
ok(s.cssText != "", "s.cssText = " + s.cssText);
ok(s.display === "none", "s.display = " + s.display);
input.setAttribute("style", "");
x = input.getAttribute("style");
ok(x === s, "getAttribute('style') = " + x);
ok(s.cssText != "", "s.cssText = " + s.cssText);
ok(s.display === "none", "s.display = " + s.display);
x = input.getAttribute("style", 2);
ok(x === "", "getAttribute('style') = " + x);
input.setAttribute("style", null);
x = input.getAttribute("style");
ok(input.style === s, "input.style = " + input.style);
ok(x === s, "getAttribute('style') = " + x);
ok(s.cssText != "", "s.cssText = " + s.cssText);
ok(s.display === "none", "s.display = " + s.display);
x = input.getAttribute("fireEvent");
ok(x === input.fireEvent, "input.getAttribute('fireEvent') = " + x);
x = input.getAttribute("fireEvent", 2);
ok(x === "", "getAttribute('fireEvent') = " + x);
input.setAttribute("fireEvent", 3);
ok(input.fireEvent === 3, "input.fireEvent = " + input.fireEvent);
x = input.getAttribute("fireEvent");
ok(x === 3, "input.getAttribute('fireEvent') = " + x);
x = input.getAttribute("fireEvent", 2);
ok(x === "3", "getAttribute('fireEvent') = " + x);
b = input.removeAttribute("style");
ok(b === true, "removeAttribute('style') failed");
ok(input.style === s, "input.style = " + input.style);
x = input.getAttribute("style");
ok(x === s, "getAttribute('style') = " + x);
ok(s.display === "", "s.display = " + s.display);
ok(s.cssText === "", "s.cssText = " + s.cssText);
x = input.getAttribute("style", 2);
ok(x === "", "getAttribute('style') = " + x);
b = input.removeAttribute("style");
ok(b === true, "removeAttribute('style') failed");
b = false;
try {
input.setAttribute("tagName", "xxx");
}catch(e) {
b = true;
}
ok(b, "Expected exception on setAttribute(tagName)");
b = false;
try {
input.setAttribute("parentElement", "xxx");
}catch(e) {
b = true;
}
ok(b, "Expected exception on setAttribute(parentElement)");
b = input.removeAttribute("fireEvent");
ok(b === true, "removeAttribute(fireEvent) failed");
ok(input.fireEvent === f, "input.fireEvent = " + input.fireEvent);
x = input.getAttribute("fireEvent");
ok(x === f, "input.getAttribute('fireEvent') = " + x);
b = input.removeAttribute("fireEvent");
ok(b === false || broken(b === true), "removeAttribute(fireEvent) returned " + b);
input.fireEvent = 3;
x = input.getAttribute("fireEvent");
ok(x === 3, "input.getAttribute('fireEvent') = " + x);
ok(input.fireEvent === 3, "input.fireEvent' = " + input.fireEvent);
}
function test_attribute_collection() {
@@ -215,6 +331,29 @@ function test_whitespace_nodes() {
"t.rows[0].cells[0].childNodes.length = " + t.rows[0].cells[0].childNodes.length);
}
function test_language_attribute() {
document.body.innerHTML = '<div id="did" language="test"></div>';
var elem = document.getElementById("did");
ok(elem.language === "test", "elem.language = " + elem.language);
elem.language = 1;
ok(elem.language === "1", "elem.language = " + elem.language);
}
function test_text_node() {
document.body.innerHTML = 'testing text';
var text = document.body.childNodes[0], text2;
ok(text.data == "testing text", "text.data = " + text.data);
text2 = text.splitText(7);
ok(text.data == "testing", "text.data = " + text.data);
ok(text2.data == " text", "text2.data = " + text2.data);
ok(text.nextSibling === text2, "text.nextSibling !== text2");
text2 = text.splitText(0);
ok(text.data == "", "text.data = " + text.data);
ok(text2.data == "testing", "text2.data = " + text2.data);
}
var globalVar = false;
function runTests() {
@@ -231,13 +370,15 @@ function runTests() {
test_document_name_as_index();
test_remove_style_attribute();
test_getter_call();
test_setAttribute();
test_attrs();
test_attribute_collection();
test_arg_conv();
test_override_functions();
test_forin();
test_customtag();
test_whitespace_nodes();
test_language_attribute();
test_text_node();
var r = window.execScript("globalVar = true;");
ok(r === undefined, "execScript returned " + r);
+37 -4
View File
@@ -5,7 +5,7 @@ function ok(b,m) {
return external.ok(b, m);
}
function nav_back_test() {
function nav_parent_test() {
external.trace("Running _parent navigation tests...");
var iframe = document.getElementById("testframe");
@@ -29,12 +29,12 @@ function nav_back_test() {
}
function window_navigate_test() {
external.trace("Runnint window.navigate() tests...");
external.trace("Running window.navigate() tests...");
var iframe = document.getElementById("testframe");
iframe.onload = function() {
iframe.onlod = null;
iframe.onload = null;
var href = iframe.contentWindow.location.href;
ok(href === "about:blank", "Unexpected href " + href);
next_test();
@@ -43,9 +43,42 @@ function window_navigate_test() {
iframe.contentWindow.navigate("about:blank");
}
function window_open_self_test() {
external.trace("Running window.open(_self) tests...");
var iframe = document.getElementById("testframe");
var iframe_window = iframe.contentWindow;
iframe.onload = function() {
iframe.onload = null;
var href = iframe.contentWindow.location.href;
ok(/.*blank.html\?window_open_self/.test(href), "Unexpected href " + href);
ok(iframe.contentWindow === iframe_window, "iframe.contentWindow !== iframe_window");
next_test();
}
iframe_window.open("blank.html?window_open_self", "_self");
}
function detached_src_test() {
var iframe = document.createElement("iframe");
var onload_called = false;
iframe.onload = function() {
onload_called = true;
next_test();
}
iframe.src = "blank.html";
document.body.appendChild(iframe);
ok(onload_called === false, "called onload too early?");
}
var tests = [
nav_back_test,
nav_parent_test,
window_navigate_test,
window_open_self_test,
detached_src_test,
function() { external.reportSuccess(); }
];
+19 -8
View File
@@ -137,13 +137,16 @@ static HRESULT WINAPI ProtocolSink_ReportResult(IInternetProtocolSink *iface, HR
{
CHECK_EXPECT(ReportResult);
if(expect_hr_win32err)
if(expect_hr_win32err) {
ok((hrResult&0xffff0000) == ((FACILITY_WIN32 << 16)|0x80000000) || expect_hrResult,
"expected win32 err or %08x got: %08x\n", expect_hrResult, hrResult);
else
ok(hrResult == expect_hrResult || ((expect_hrResult == E_INVALIDARG ||
expect_hrResult == HRESULT_FROM_WIN32(ERROR_RESOURCE_TYPE_NOT_FOUND)) &&
hrResult == MK_E_SYNTAX), "expected: %08x got: %08x\n", expect_hrResult, hrResult);
}else {
ok(hrResult == expect_hrResult || (expect_hrResult == E_INVALIDARG && hrResult == MK_E_SYNTAX)
|| (expect_hrResult == HRESULT_FROM_WIN32(ERROR_RESOURCE_TYPE_NOT_FOUND) &&
(hrResult == MK_E_SYNTAX || hrResult == HRESULT_FROM_WIN32(ERROR_DLL_NOT_FOUND))),
"expected: %08x got: %08x\n", expect_hrResult, hrResult);
expect_hrResult = hrResult;
}
ok(dwError == 0, "dwError = %d\n", dwError);
ok(!szResult, "szResult != NULL\n");
@@ -232,9 +235,7 @@ static void test_protocol_fail(IInternetProtocol *protocol, LPCWSTR url, HRESULT
ok((hres&0xffff0000) == ((FACILITY_WIN32 << 16)|0x80000000) || hres == expect_hrResult,
"expected win32 err or %08x got: %08x\n", expected_hres, hres);
else
ok(hres == expected_hres || ((expected_hres == E_INVALIDARG ||
expected_hres == HRESULT_FROM_WIN32(ERROR_RESOURCE_TYPE_NOT_FOUND)) && hres == MK_E_SYNTAX),
"expected: %08x got: %08x\n", expected_hres, hres);
ok(hres == expect_hrResult, "expected: %08x got: %08x\n", expect_hrResult, hres);
CHECK_CALLED(GetBindInfo);
CHECK_CALLED(ReportResult);
@@ -601,6 +602,16 @@ static void test_res_protocol(void)
test_res_url("/jstest.html");
test_res_url("/Test/res.html");
test_res_url("/test/dir/dir2/res.html");
if(GetProcAddress(LoadLibraryA("urlmon.dll"), "CreateUri")) {
test_res_url("/test/dir/dir2/res.html?query_part");
test_res_url("/test/dir/dir2/res.html#hash_part");
test_res_url("/#123");
test_res_url("/#23/#123");
test_res_url("/#123#456");
}else {
win_skip("IUri not supported\n");
}
}
static void do_test_about_protocol(IClassFactory *factory, DWORD bf)
+3
View File
@@ -40,6 +40,9 @@ blank.html HTML "blank.html"
/* @makedep: blank.html */
blank2.html HTML "blank.html"
/* @makedep: blank.html */
123 HTML "blank.html"
/* @makedep: test_tlb.tlb */
1 TYPELIB test_tlb.tlb
+20 -1
View File
@@ -146,6 +146,7 @@ DEFINE_EXPECT(ChangeType);
#define DISPID_EXTERNAL_TRACE 0x300001
#define DISPID_EXTERNAL_REPORTSUCCESS 0x300002
#define DISPID_EXTERNAL_TODO_WINE_OK 0x300003
#define DISPID_EXTERNAL_BROKEN 0x300004
static const GUID CLSID_TestScript =
{0x178fc163,0xf585,0x4e24,{0x9c,0x13,0x4b,0xb7,0xfa,0xf8,0x07,0x46}};
@@ -594,6 +595,10 @@ static HRESULT WINAPI externalDisp_GetDispID(IDispatchEx *iface, BSTR bstrName,
*pid = DISPID_EXTERNAL_TODO_WINE_OK;
return S_OK;
}
if(!strcmp_wa(bstrName, "broken")) {
*pid = DISPID_EXTERNAL_BROKEN;
return S_OK;
}
ok(0, "unexpected name %s\n", wine_dbgstr_w(bstrName));
return DISP_E_UNKNOWNNAME;
@@ -673,6 +678,20 @@ static HRESULT WINAPI externalDisp_InvokeEx(IDispatchEx *iface, DISPID id, LCID
return S_OK;
case DISPID_EXTERNAL_BROKEN:
ok(wFlags == INVOKE_FUNC || wFlags == (INVOKE_FUNC|INVOKE_PROPERTYGET), "wFlags = %x\n", wFlags);
ok(pdp != NULL, "pdp == NULL\n");
ok(pdp->rgvarg != NULL, "rgvarg == NULL\n");
ok(!pdp->rgdispidNamedArgs, "rgdispidNamedArgs != NULL\n");
ok(pdp->cArgs == 1, "cArgs = %d\n", pdp->cArgs);
ok(!pdp->cNamedArgs, "cNamedArgs = %d\n", pdp->cNamedArgs);
ok(pei != NULL, "pei == NULL\n");
ok(V_VT(pdp->rgvarg) == VT_BOOL, "V_VT(psp->rgvargs) = %d\n", V_VT(pdp->rgvarg));
V_VT(pvarRes) = VT_BOOL;
V_BOOL(pvarRes) = broken(V_BOOL(pdp->rgvarg)) ? VARIANT_TRUE : VARIANT_FALSE;
return S_OK;
default:
ok(0, "unexpected call\n");
return E_NOTIMPL;
@@ -1915,7 +1934,7 @@ static void test_func(IDispatchEx *obj)
V_VT(&var) = VT_I4;
V_I4(&var) = 100;
hres = dispex_propput(obj, id, 0, &var, NULL);
ok(hres == E_NOTIMPL, "InvokeEx failed: %08x\n", hres);
todo_wine ok(hres == E_NOTIMPL, "InvokeEx failed: %08x\n", hres);
hres = dispex_propget(dispex, DISPID_VALUE, &var, NULL);
ok(hres == E_ACCESSDENIED, "InvokeEx returned: %08x, expected E_ACCESSDENIED\n", hres);
+133
View File
@@ -453,6 +453,7 @@ static void test_style2(IHTMLStyle2 *style2)
static void test_style3(IHTMLStyle3 *style3)
{
VARIANT v;
BSTR str;
HRESULT hres;
@@ -471,6 +472,37 @@ static void test_style3(IHTMLStyle3 *style3)
ok(hres == S_OK, "get_wordWrap failed: %08x\n", hres);
ok(!strcmp_wa(str, "break-word"), "get_wordWrap returned %s\n", wine_dbgstr_w(str));
SysFreeString(str);
V_VT(&v) = VT_ERROR;
hres = IHTMLStyle3_get_zoom(style3, &v);
ok(hres == S_OK, "get_zoom failed: %08x\n", hres);
ok(V_VT(&v) == VT_BSTR, "V_VT(zoom) = %d\n", V_VT(&v));
ok(!V_BSTR(&v), "V_BSTR(zoom) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
VariantClear(&v);
V_VT(&v) = VT_BSTR;
V_BSTR(&v) = a2bstr("100%");
hres = IHTMLStyle3_put_zoom(style3, v);
ok(hres == S_OK, "put_zoom failed: %08x\n", hres);
V_VT(&v) = VT_ERROR;
hres = IHTMLStyle3_get_zoom(style3, &v);
ok(hres == S_OK, "get_zoom failed: %08x\n", hres);
ok(V_VT(&v) == VT_BSTR, "V_VT(zoom) = %d\n", V_VT(&v));
ok(!strcmp_wa(V_BSTR(&v), "100%"), "V_BSTR(zoom) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
VariantClear(&v);
V_VT(&v) = VT_I4;
V_I4(&v) = 1;
hres = IHTMLStyle3_put_zoom(style3, v);
ok(hres == S_OK, "put_zoom failed: %08x\n", hres);
V_VT(&v) = VT_ERROR;
hres = IHTMLStyle3_get_zoom(style3, &v);
ok(hres == S_OK, "get_zoom failed: %08x\n", hres);
ok(V_VT(&v) == VT_BSTR, "V_VT(zoom) = %d\n", V_VT(&v));
ok(!strcmp_wa(V_BSTR(&v), "1"), "V_BSTR(zoom) = %s\n", wine_dbgstr_w(V_BSTR(&v)));
VariantClear(&v);
}
static void test_style4(IHTMLStyle4 *style4)
@@ -548,6 +580,82 @@ static void test_style5(IHTMLStyle5 *style5)
hres = IHTMLStyle5_put_minWidth(style5, vdefault);
ok(hres == S_OK, "put_minWidth failed: %08x\n", hres);
VariantClear(&vdefault);
/* maxWidth */
hres = IHTMLStyle5_get_maxWidth(style5, &vdefault);
ok(hres == S_OK, "get_maxWidth failed: %08x\n", hres);
V_VT(&v) = VT_BSTR;
V_BSTR(&v) = a2bstr("200px");
hres = IHTMLStyle5_put_maxWidth(style5, v);
ok(hres == S_OK, "put_maxWidth failed: %08x\n", hres);
VariantClear(&v);
hres = IHTMLStyle5_get_maxWidth(style5, &v);
ok(hres == S_OK, "get_maxWidth failed: %08x\n", hres);
ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n",V_VT(&v));
ok(!strcmp_wa(V_BSTR(&v), "200px"), "expect 200px got (%s)\n", wine_dbgstr_w(V_BSTR(&v)));
VariantClear(&v);
V_VT(&v) = VT_BSTR;
V_BSTR(&v) = a2bstr("70%");
hres = IHTMLStyle5_put_maxWidth(style5, v);
ok(hres == S_OK, "put_maxWidth failed: %08x\n", hres);
VariantClear(&v);
hres = IHTMLStyle5_get_maxWidth(style5, &v);
ok(hres == S_OK, "get maxWidth failed: %08x\n", hres);
ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
ok(!strcmp_wa(V_BSTR(&v), "70%"), "expect 70%% got (%s)\n", wine_dbgstr_w(V_BSTR(&v)));
VariantClear(&v);
hres = IHTMLStyle5_put_maxWidth(style5,vdefault);
ok(hres == S_OK, "put_maxWidth failed: %08x\n", hres);
VariantClear(&vdefault);
/* maxHeight */
hres = IHTMLStyle5_get_maxHeight(style5, &vdefault);
ok(hres == S_OK, "get maxHeight failed: %08x\n", hres);
V_VT(&v) = VT_BSTR;
V_BSTR(&v) = a2bstr("200px");
hres = IHTMLStyle5_put_maxHeight(style5, v);
ok(hres == S_OK, "put maxHeight failed: %08x\n", hres);
VariantClear(&v);
hres = IHTMLStyle5_get_maxHeight(style5, &v);
ok(hres == S_OK, "get maxHeight failed: %08x\n", hres);
ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
ok(!strcmp_wa(V_BSTR(&v), "200px"), "expect 200px got (%s)\n", wine_dbgstr_w(V_BSTR(&v)));
VariantClear(&v);
V_VT(&v) = VT_BSTR;
V_BSTR(&v) = a2bstr("70%");
hres = IHTMLStyle5_put_maxHeight(style5, v);
ok(hres == S_OK, "put maxHeight failed: %08x\n", hres);
VariantClear(&v);
hres = IHTMLStyle5_get_maxHeight(style5, &v);
ok(hres == S_OK, "get_maxHeight failed: %08x\n", hres);
ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
ok(!strcmp_wa(V_BSTR(&v), "70%"), "expect 70%% got (%s)\n", wine_dbgstr_w(V_BSTR(&v)));
VariantClear(&v);
V_VT(&v) = VT_BSTR;
V_BSTR(&v) = a2bstr("100");
hres = IHTMLStyle5_put_maxHeight(style5, v);
ok(hres == S_OK, "put maxHeight failed: %08x\n", hres);
VariantClear(&v);
hres = IHTMLStyle5_get_maxHeight(style5, &v);
ok(hres == S_OK, "get_maxHeight failed: %08x\n", hres);
ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
ok(!strcmp_wa(V_BSTR(&v), "100px"), "expect 100 got (%s)\n", wine_dbgstr_w(V_BSTR(&v)));
VariantClear(&v);
hres = IHTMLStyle5_put_maxHeight(style5, vdefault);
ok(hres == S_OK, "put maxHeight failed:%08x\n", hres);
VariantClear(&vdefault);
}
static void test_style6(IHTMLStyle6 *style)
@@ -747,6 +855,16 @@ static void test_body_style(IHTMLStyle *style)
ok(!strcmp_wa(str, "900"), "str != style900\n");
SysFreeString(str);
str = a2bstr("");
hres = IHTMLStyle_put_fontWeight(style, str);
ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres);
SysFreeString(str);
hres = IHTMLStyle_get_fontWeight(style, &str);
ok(hres == S_OK, "get_fontWeight failed: %08x\n", hres);
ok(!str, "str != NULL\n");
SysFreeString(str);
hres = IHTMLStyle_put_fontWeight(style, sDefault);
ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres);
SysFreeString(sDefault);
@@ -2360,6 +2478,21 @@ static void test_body_style(IHTMLStyle *style)
win_skip("IHTMLStyle_put_listStyle already failed\n");
}
str = (void*)0xdeadbeef;
hres = IHTMLStyle_get_styleFloat(style, &str);
ok(hres == S_OK, "get_styleFloat failed: %08x\n", hres);
ok(!str, "styleFloat = %s\n", wine_dbgstr_w(str));
str = a2bstr("left");
hres = IHTMLStyle_put_styleFloat(style, str);
ok(hres == S_OK, "put_styleFloat failed: %08x\n", hres);
SysFreeString(str);
str = NULL;
hres = IHTMLStyle_get_styleFloat(style, &str);
ok(hres == S_OK, "get_styleFloat failed: %08x\n", hres);
ok(!strcmp_wa(str, "left"), "styleFloat = %s\n", wine_dbgstr_w(str));
hres = IHTMLStyle_QueryInterface(style, &IID_IHTMLStyle2, (void**)&style2);
ok(hres == S_OK, "Could not get IHTMLStyle2 iface: %08x\n", hres);
if(SUCCEEDED(hres)) {