[MSXML3_WINETEST] Sync with Wine 3.0. CORE-14225

This commit is contained in:
Amine Khaldi 2018-01-20 12:36:34 +01:00
parent 0506c9332a
commit d4c87f7aa8
3 changed files with 196 additions and 33 deletions

View file

@ -29,6 +29,7 @@
#undef CLSID_DOMDocument
DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
DEFINE_GUID(IID_transformdest_unknown,0xf5078f3a,0xc551,0x11d3,0x89,0xb9,0x00,0x00,0xf8,0x1f,0xe2,0x21);
static int g_unexpectedcall, g_expectedcall;
@ -6475,7 +6476,8 @@ static void test_save(void)
hr = IXMLDOMDocument_loadXML(doc, _bstr_(win1252xml), &b);
EXPECT_HR(hr, S_OK);
CreateStreamOnHGlobal(NULL, TRUE, &stream);
hr = CreateStreamOnHGlobal(NULL, TRUE, &stream);
ok(hr == S_OK, "got 0x%08x\n", hr);
V_VT(&dest) = VT_UNKNOWN;
V_UNKNOWN(&dest) = (IUnknown*)stream;
hr = IXMLDOMDocument_save(doc, dest);
@ -7482,6 +7484,7 @@ static void test_XSLPattern(void)
ok(hr == S_OK, "query=%s, failed with 0x%08x\n", ptr->query, hr);
len = 0;
hr = IXMLDOMNodeList_get_length(list, &len);
ok(hr == S_OK, "Failed to get list length, hr %#x.\n", hr);
if (*ptr->list)
{
ok(len != 0, "query=%s, empty list\n", ptr->query);
@ -10168,16 +10171,20 @@ static void write_to_file(const char *name, const char *data)
static void test_load(void)
{
IXMLDOMDocument *doc, *doc2;
BSTR pathW, bstr1, bstr2;
IXMLDOMNodeList *list;
IXMLDOMElement *elem;
char path[MAX_PATH];
VARIANT_BOOL b;
VARIANT src;
HRESULT hr;
BSTR path, bstr1, bstr2;
void* ptr;
GetTempPathA(MAX_PATH, path);
strcat(path, "winetest.xml");
/* prepare a file */
write_to_file("test.xml", win1252xml);
write_to_file(path, win1252xml);
doc = create_document(&IID_IXMLDOMDocument);
@ -10188,11 +10195,11 @@ static void test_load(void)
EXPECT_HR(hr, E_INVALIDARG);
ok(b == VARIANT_FALSE, "got %d\n", b);
path = _bstr_("test.xml");
pathW = _bstr_(path);
/* load from path: VT_BSTR */
V_VT(&src) = VT_BSTR;
V_BSTR(&src) = path;
V_BSTR(&src) = pathW;
hr = IXMLDOMDocument_load(doc, src, &b);
EXPECT_HR(hr, S_OK);
ok(b == VARIANT_TRUE, "got %d\n", b);
@ -10204,7 +10211,7 @@ static void test_load(void)
/* load from a path: VT_BSTR|VT_BYREF */
V_VT(&src) = VT_BSTR | VT_BYREF;
V_BSTRREF(&src) = &path;
V_BSTRREF(&src) = &pathW;
hr = IXMLDOMDocument_load(doc, src, &b);
EXPECT_HR(hr, S_OK);
ok(b == VARIANT_TRUE, "got %d\n", b);
@ -10242,13 +10249,13 @@ static void test_load(void)
ok(hr == S_OK, "got 0x%08x\n", hr);
SysFreeString(bstr1);
DeleteFileA("test.xml");
DeleteFileA(path);
/* load from existing path, no xml content */
write_to_file("test.xml", nocontent);
write_to_file(path, nocontent);
V_VT(&src) = VT_BSTR;
V_BSTR(&src) = path;
V_BSTR(&src) = pathW;
b = VARIANT_TRUE;
hr = IXMLDOMDocument_load(doc, src, &b);
ok(hr == S_FALSE, "got 0x%08x\n", hr);
@ -10259,7 +10266,7 @@ static void test_load(void)
ok(hr == S_FALSE, "got 0x%08x\n", hr);
ok(bstr1 == NULL, "got %p\n", bstr1);
DeleteFileA("test.xml");
DeleteFileA(path);
IXMLDOMDocument_Release(doc);
doc = create_document(&IID_IXMLDOMDocument);
@ -10964,7 +10971,8 @@ static void test_dispex(void)
/* IXMLDOMNodeList */
hr = IXMLDOMDocument_getElementsByTagName(doc, _bstr_("*"), &node_list);
EXPECT_HR(hr, S_OK);
IXMLDOMNodeList_QueryInterface(node_list, &IID_IUnknown, (void**)&unk);
hr = IXMLDOMNodeList_QueryInterface(node_list, &IID_IUnknown, (void**)&unk);
ok(hr == S_OK, "got 0x%08x\n", hr);
test_domobj_dispex(unk);
IUnknown_Release(unk);
IXMLDOMNodeList_Release(node_list);
@ -12005,7 +12013,7 @@ static void test_get_namespaces(void)
free_bstrs();
}
static DOMNodeType put_data_types[] = {
static const DOMNodeType put_data_types[] = {
NODE_TEXT,
NODE_CDATA_SECTION,
NODE_PROCESSING_INSTRUCTION,
@ -12018,7 +12026,7 @@ static void test_put_data(void)
static const WCHAR test_data[] = {'t','e','s','t',' ','n','o','d','e',' ','d','a','t','a',0};
WCHAR buff[100], *data;
IXMLDOMDocument *doc;
DOMNodeType *type;
const DOMNodeType *type;
IXMLDOMText *text;
IXMLDOMNode *node;
VARIANT v;
@ -12576,6 +12584,81 @@ static void test_merging_text(void)
free_bstrs();
}
static HRESULT WINAPI transformdest_QueryInterface(IUnknown *iface, REFIID riid, void **obj)
{
BOOL known_iid = IsEqualIID(riid, &IID_IHTMLObjectElement) ||
IsEqualIID(riid, &IID_transformdest_unknown) ||
IsEqualIID(riid, &IID_IServiceProvider) ||
IsEqualIID(riid, &IID_IStream) ||
IsEqualIID(riid, &IID_ISequentialStream) ||
IsEqualIID(riid, &IID_IRequestDictionary);
todo_wine_if(IsEqualIID(riid, &IID_IXMLDOMDocument))
ok(known_iid, "Unexpected riid %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
static ULONG WINAPI transformdest_AddRef(IUnknown *iface)
{
return 2;
}
static ULONG WINAPI transformdest_Release(IUnknown *iface)
{
return 1;
}
static const IUnknownVtbl transformdestvtbl =
{
transformdest_QueryInterface,
transformdest_AddRef,
transformdest_Release,
};
static void test_transformNodeToObject(void)
{
IUnknown transformdest = { &transformdestvtbl };
IXMLDOMDocument *doc, *doc2, *doc3;
VARIANT_BOOL b;
HRESULT hr;
VARIANT v;
doc = create_document(&IID_IXMLDOMDocument);
doc2 = create_document(&IID_IXMLDOMDocument);
doc3 = create_document(&IID_IXMLDOMDocument);
hr = IXMLDOMDocument_loadXML(doc, _bstr_(szTransformXML), &b);
ok(hr == S_OK, "Failed to load document, hr %#x.\n", hr);
hr = IXMLDOMDocument_loadXML(doc2, _bstr_(szTransformSSXML), &b);
ok(hr == S_OK, "Failed to load document, hr %#x.\n", hr);
V_VT(&v) = VT_UNKNOWN;
V_UNKNOWN(&v) = &transformdest;
hr = IXMLDOMDocument_transformNodeToObject(doc, (IXMLDOMNode *)doc2, v);
ok(hr == E_INVALIDARG, "Failed to transform node, hr %#x.\n", hr);
V_VT(&v) = VT_UNKNOWN;
V_UNKNOWN(&v) = NULL;
hr = IXMLDOMDocument_transformNodeToObject(doc, (IXMLDOMNode *)doc2, v);
ok(hr == E_INVALIDARG, "Failed to transform node, hr %#x.\n", hr);
V_VT(&v) = VT_DISPATCH;
V_DISPATCH(&v) = NULL;
hr = IXMLDOMDocument_transformNodeToObject(doc, (IXMLDOMNode *)doc2, v);
ok(hr == E_INVALIDARG, "Failed to transform node, hr %#x.\n", hr);
V_VT(&v) = VT_DISPATCH;
V_DISPATCH(&v) = (IDispatch *)doc3;
hr = IXMLDOMDocument_transformNodeToObject(doc, (IXMLDOMNode *)doc2, v);
ok(hr == S_OK, "Failed to transform node, hr %#x.\n", hr);
IXMLDOMDocument_Release(doc3);
IXMLDOMDocument_Release(doc2);
IXMLDOMDocument_Release(doc);
free_bstrs();
}
START_TEST(domdoc)
{
HRESULT hr;
@ -12657,6 +12740,7 @@ START_TEST(domdoc)
test_xmlns_attribute();
test_url();
test_merging_text();
test_transformNodeToObject();
test_xsltemplate();
test_xsltext();

View file

@ -1322,6 +1322,16 @@ static IXMLHttpRequest *create_xhr(void)
return SUCCEEDED(hr) ? ret : NULL;
}
static IServerXMLHTTPRequest *create_server_xhr(void)
{
IServerXMLHTTPRequest *ret;
HRESULT hr;
hr = CoCreateInstance(&CLSID_ServerXMLHTTP30, NULL, CLSCTX_INPROC_SERVER, &IID_IServerXMLHTTPRequest, (void **)&ret);
return SUCCEEDED(hr) ? ret : NULL;
}
static void set_safety_opt(IUnknown *unk, DWORD mask, DWORD opts)
{
IObjectSafety *obj_safety;
@ -1714,6 +1724,28 @@ static void test_XMLHTTP(void)
EXPECT_HR(hr, S_OK);
IObjectWithSite_Release(obj_site);
/* HEAD request */
hr = IXMLHttpRequest_put_onreadystatechange(xhr, NULL);
ok(hr == S_OK, "Failed to reset state change handler, hr %#x.\n", hr);
test_open(xhr, "HEAD", xmltestA, S_OK);
V_VT(&varbody) = VT_EMPTY;
hr = IXMLHttpRequest_send(xhr, varbody);
ok(hr == S_OK, "Failed to send HEAD request, hr %#x.\n", hr);
str = NULL;
hr = IXMLHttpRequest_get_responseText(xhr, &str);
ok(hr == S_OK, "Failed to get response text, hr %#x.\n", hr);
ok(!*str, "Unexpected text %s.\n", wine_dbgstr_w(str));
SysFreeString(str);
hr = IXMLHttpRequest_getAllResponseHeaders(xhr, &str);
ok(hr == S_OK, "Failed to get response headers, hr %#x.\n", hr);
ok(str && *str, "Expected response headers.\n");
SysFreeString(str);
IXMLHttpRequest_Release(xhr);
free_bstrs();
}
@ -1738,20 +1770,67 @@ static void test_safe_httpreq(void)
free_bstrs();
}
static void test_supporterrorinfo(void)
{
HRESULT hr;
IXMLHttpRequest *xhr;
IServerXMLHTTPRequest *server_xhr;
ISupportErrorInfo *errorinfo, *errorinfo2;
xhr = create_xhr();
EXPECT_REF(xhr, 1);
hr = IXMLHttpRequest_QueryInterface(xhr, &IID_ISupportErrorInfo, (void **)&errorinfo);
ok(hr == S_OK, "Failed to get ISupportErrorInfo, hr %#x.\n", hr);
EXPECT_REF(xhr, 2);
hr = IXMLHttpRequest_QueryInterface(xhr, &IID_ISupportErrorInfo, (void **)&errorinfo2);
ok(hr == S_OK, "Failed to get ISupportErrorInfo, hr %#x.\n", hr);
ok(errorinfo == errorinfo2, "Unexpected error info instance.\n");
EXPECT_REF(xhr, 3);
ISupportErrorInfo_Release(errorinfo2);
ISupportErrorInfo_Release(errorinfo);
IXMLHttpRequest_Release(xhr);
/* ServerXMLHTTP */
server_xhr = create_server_xhr();
EXPECT_REF(server_xhr, 1);
hr = IServerXMLHTTPRequest_QueryInterface(server_xhr, &IID_ISupportErrorInfo, (void **)&errorinfo);
ok(hr == S_OK, "Failed to get ISupportErrorInfo, hr %#x.\n", hr);
EXPECT_REF(server_xhr, 2);
hr = IServerXMLHTTPRequest_QueryInterface(server_xhr, &IID_ISupportErrorInfo, (void **)&errorinfo2);
ok(hr == S_OK, "Failed to get ISupportErrorInfo, hr %#x.\n", hr);
ok(errorinfo == errorinfo2, "Unexpected error info instance.\n");
EXPECT_REF(server_xhr, 3);
ISupportErrorInfo_Release(errorinfo2);
ISupportErrorInfo_Release(errorinfo);
IServerXMLHTTPRequest_Release(server_xhr);
}
START_TEST(httpreq)
{
IXMLHttpRequest *xhr;
CoInitialize(NULL);
if((xhr = create_xhr())) {
IXMLHttpRequest_Release(xhr);
test_XMLHTTP();
test_safe_httpreq();
}else {
if (!(xhr = create_xhr()))
{
win_skip("IXMLHTTPRequest is not available\n");
CoUninitialize();
return;
}
IXMLHttpRequest_Release(xhr);
test_XMLHTTP();
test_safe_httpreq();
test_supporterrorinfo();
CoUninitialize();
}

View file

@ -656,26 +656,26 @@ static void test_collection_refs(void)
LONG length;
schema1 = create_document(&IID_IXMLDOMDocument2);
ok(schema1 != NULL, "Failed to create a document.\n");
cache1 = create_cache(&IID_IXMLDOMSchemaCollection);
ok(cache1 != NULL, "Failed to create schema collection.\n");
if (!schema1 || !cache1)
{
if (schema1)
IXMLDOMDocument2_Release(schema1);
if (cache1)
IXMLDOMSchemaCollection_Release(cache1);
return;
}
schema2 = create_document(&IID_IXMLDOMDocument2);
schema3 = create_document(&IID_IXMLDOMDocument2);
cache1 = create_cache(&IID_IXMLDOMSchemaCollection);
cache2 = create_cache(&IID_IXMLDOMSchemaCollection);
cache3 = create_cache(&IID_IXMLDOMSchemaCollection);
if (!schema1 || !schema2 || !schema3 || !cache1 || !cache2 || !cache3)
{
if (schema1) IXMLDOMDocument2_Release(schema1);
if (schema2) IXMLDOMDocument2_Release(schema2);
if (schema3) IXMLDOMDocument2_Release(schema3);
if (cache1) IXMLDOMSchemaCollection_Release(cache1);
if (cache2) IXMLDOMSchemaCollection_Release(cache2);
if (cache3) IXMLDOMSchemaCollection_Release(cache2);
return;
}
ole_check(IXMLDOMDocument2_loadXML(schema1, _bstr_(xdr_schema1_xml), &b));
ok(b == VARIANT_TRUE, "failed to load XML\n");