https://git.reactos.org/?p=reactos.git;a=commitdiff;h=d4c87f7aa8e680324be41…
commit d4c87f7aa8e680324be4117a431723818feafc04
Author: Amine Khaldi <amine.khaldi(a)reactos.org>
AuthorDate: Sat Jan 20 12:36:34 2018 +0100
Commit: Amine Khaldi <amine.khaldi(a)reactos.org>
CommitDate: Sat Jan 20 12:36:34 2018 +0100
[MSXML3_WINETEST] Sync with Wine 3.0. CORE-14225
---
modules/rostests/winetests/msxml3/domdoc.c | 110 ++++++++++++++++++++++++----
modules/rostests/winetests/msxml3/httpreq.c | 91 +++++++++++++++++++++--
modules/rostests/winetests/msxml3/schema.c | 26 +++----
3 files changed, 195 insertions(+), 32 deletions(-)
diff --git a/modules/rostests/winetests/msxml3/domdoc.c
b/modules/rostests/winetests/msxml3/domdoc.c
index cf0869f263..03ac01675d 100644
--- a/modules/rostests/winetests/msxml3/domdoc.c
+++ b/modules/rostests/winetests/msxml3/domdoc.c
@@ -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();
diff --git a/modules/rostests/winetests/msxml3/httpreq.c
b/modules/rostests/winetests/msxml3/httpreq.c
index 8d97a48cd7..9c4e48864f 100644
--- a/modules/rostests/winetests/msxml3/httpreq.c
+++ b/modules/rostests/winetests/msxml3/httpreq.c
@@ -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();
}
diff --git a/modules/rostests/winetests/msxml3/schema.c
b/modules/rostests/winetests/msxml3/schema.c
index e082b00f4c..306c65dcf2 100644
--- a/modules/rostests/winetests/msxml3/schema.c
+++ b/modules/rostests/winetests/msxml3/schema.c
@@ -656,26 +656,26 @@ static void test_collection_refs(void)
LONG length;
schema1 = create_document(&IID_IXMLDOMDocument2);
- schema2 = create_document(&IID_IXMLDOMDocument2);
- schema3 = create_document(&IID_IXMLDOMDocument2);
+ ok(schema1 != NULL, "Failed to create a document.\n");
cache1 = create_cache(&IID_IXMLDOMSchemaCollection);
- cache2 = create_cache(&IID_IXMLDOMSchemaCollection);
- cache3 = create_cache(&IID_IXMLDOMSchemaCollection);
+ ok(cache1 != NULL, "Failed to create schema collection.\n");
- if (!schema1 || !schema2 || !schema3 || !cache1 || !cache2 || !cache3)
+ if (!schema1 || !cache1)
{
- 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);
-
+ if (schema1)
+ IXMLDOMDocument2_Release(schema1);
+ if (cache1)
+ IXMLDOMSchemaCollection_Release(cache1);
return;
}
+ schema2 = create_document(&IID_IXMLDOMDocument2);
+ schema3 = create_document(&IID_IXMLDOMDocument2);
+
+ cache2 = create_cache(&IID_IXMLDOMSchemaCollection);
+ cache3 = create_cache(&IID_IXMLDOMSchemaCollection);
+
ole_check(IXMLDOMDocument2_loadXML(schema1, _bstr_(xdr_schema1_xml), &b));
ok(b == VARIANT_TRUE, "failed to load XML\n");