From akhaldi@svn.reactos.org Sat Mar 5 10:36:23 2016 From: akhaldi@svn.reactos.org To: ros-diffs@reactos.org Subject: [ros-diffs] [akhaldi] 70886: [MSXML3_WINETEST] Sync with Wine Staging 1.9.4. CORE-10912 Date: Sat, 05 Mar 2016 10:36:23 +0000 Message-ID: <167036579713.185962.11159557327138021083.generated@iserv.reactos.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============6908857603518626044==" --===============6908857603518626044== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Author: akhaldi Date: Thu Mar 3 14:05:59 2016 New Revision: 70886 URL: http://svn.reactos.org/svn/reactos?rev=3D70886&view=3Drev Log: [MSXML3_WINETEST] Sync with Wine Staging 1.9.4. CORE-10912 Modified: trunk/rostests/winetests/msxml3/domdoc.c trunk/rostests/winetests/msxml3/httpreq.c trunk/rostests/winetests/msxml3/saxreader.c trunk/rostests/winetests/msxml3/schema.c Modified: trunk/rostests/winetests/msxml3/domdoc.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/msxml3/domdo= c.c?rev=3D70886&r1=3D70885&r2=3D70886&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- trunk/rostests/winetests/msxml3/domdoc.c [iso-8859-1] (original) +++ trunk/rostests/winetests/msxml3/domdoc.c [iso-8859-1] Thu Mar 3 14:05:59= 2016 @@ -489,7 +489,7 @@ " D1 field\n" " \n" " \n" -" This is a description. \n" +" This is a description= . \n" " \n" " \n" " This is a description with preserve= d whitespace. \n" @@ -3146,8 +3146,7 @@ { r =3D IXMLDOMNode_get_text( nodeRoot, &str ); ok( r =3D=3D S_OK, "ret %08x\n", r ); - ok( compareIgnoreReturns(str, _bstr_("fn1.txt\n\n fn2.txt \n\nf1\n")= ), "wrong get_text: %s\n", wine_dbgstr_w(str)); - SysFreeString(str); + expect_bstr_eq_and_free(str, "fn1.txt\n \nfn2.txt\n \nf1"); =20 IXMLDOMNode_Release(nodeRoot); } @@ -4175,81 +4174,97 @@ ok_(__FILE__, line)(r =3D=3D S_OK, "=3D> %i: " #expr " returned %08x\n",= __LINE__, r); \ } =20 +#define helper_ole_check_ver(expr) { \ + HRESULT r =3D expr; \ + ok_(__FILE__, line)(r =3D=3D S_OK, "-> %i (%s): " #expr " returned %08x\= n", __LINE__, ver, r); \ +} + #define helper_expect_list_and_release(list, expstr) { \ char *str =3D list_to_string(list); \ - ok_(__FILE__, line)(strcmp(str, expstr)=3D=3D0, "=3D> %i: Invalid node l= ist: %s, expected %s\n", __LINE__, str, expstr); \ + ok_(__FILE__, line)(strcmp(str, expstr)=3D=3D0, "=3D> %i (%s): Invalid n= ode list: %s, expected %s\n", __LINE__, ver, str, expstr); \ if (list) IXMLDOMNodeList_Release(list); \ } =20 #define helper_expect_bstr_and_release(bstr, str) { \ ok_(__FILE__, line)(lstrcmpW(bstr, _bstr_(str)) =3D=3D 0, \ - "=3D> %i: got %s\n", __LINE__, wine_dbgstr_w(bstr)); \ + "=3D> %i (%s): got %s\n", __LINE__, ver, wine_dbgstr_w(bstr)); \ SysFreeString(bstr); \ } =20 -#define check_ws_ignored(doc, str) _check_ws_ignored(__LINE__, doc, str) -static inline void _check_ws_ignored(int line, IXMLDOMDocument2* doc, char c= onst* str) +#define check_ws_ignored(ver, doc, str) _check_ws_ignored(__LINE__, ver, doc= , str) +static inline void _check_ws_ignored(int line, const char *ver, IXMLDOMDocum= ent2* doc, char const* str) { IXMLDOMNode *node1, *node2; IXMLDOMNodeList *list; BSTR bstr; =20 - helper_ole_check(IXMLDOMDocument2_selectNodes(doc, _bstr_("//*[local-nam= e()=3D'html']"), &list)); - helper_ole_check(IXMLDOMNodeList_get_item(list, 0, &node1)); - helper_ole_check(IXMLDOMNodeList_get_item(list, 1, &node2)); - helper_ole_check(IXMLDOMNodeList_reset(list)); + helper_ole_check_ver(IXMLDOMDocument2_selectNodes(doc, _bstr_("//*[local= -name()=3D'html']"), &list)); + helper_ole_check_ver(IXMLDOMNodeList_get_item(list, 0, &node1)); + helper_ole_check_ver(IXMLDOMNodeList_get_item(list, 1, &node2)); + helper_ole_check_ver(IXMLDOMNodeList_reset(list)); helper_expect_list_and_release(list, "E1.E5.E1.E2.D1 E2.E5.E1.E2.D1"); =20 - helper_ole_check(IXMLDOMNode_get_childNodes(node1, &list)); - helper_expect_list_and_release(list, "T1.E1.E5.E1.E2.D1 E2.E1.E5.E1.E2.D= 1 E3.E1.E5.E1.E2.D1 T4.E1.E5.E1.E2.D1 E5.E1.E5.E1.E2.D1"); - helper_ole_check(IXMLDOMNode_get_text(node1, &bstr)); + helper_ole_check_ver(IXMLDOMNode_get_childNodes(node1, &list)); + helper_expect_list_and_release(list, + "[4]1.E1.E5.E1.E2.D1 T2.E1.E5.E1.E2.D1 E3.E1.E5.E1.E2.D1 " + "E4.E1.E5.E1.E2.D1 E5.E1.E5.E1.E2.D1 E6.E1.E5.E1.E2.D1"); + helper_ole_check_ver(IXMLDOMNode_get_text(node1, &bstr)); if (str) { helper_expect_bstr_and_release(bstr, str); } else { - helper_expect_bstr_and_release(bstr, "This is a description."); + helper_expect_bstr_and_release(bstr, " This is a description."); } IXMLDOMNode_Release(node1); =20 - helper_ole_check(IXMLDOMNode_get_childNodes(node2, &list)); - helper_expect_list_and_release(list, "T1.E2.E5.E1.E2.D1 E2.E2.E5.E1.E2.D= 1 T3.E2.E5.E1.E2.D1 E4.E2.E5.E1.E2.D1 T5.E2.E5.E1.E2.D1 E6.E2.E5.E1.E2.D1 T7.= E2.E5.E1.E2.D1"); - helper_ole_check(IXMLDOMNode_get_text(node2, &bstr)); - helper_expect_bstr_and_release(bstr, "\n This is a descri= ption with preserved whitespace. \n "); + helper_ole_check_ver(IXMLDOMNode_get_childNodes(node2, &list)); + helper_expect_list_and_release(list, + "T1.E2.E5.E1.E2.D1 E2.E2.E5.E1.E2.D1 T3.E2.E5.E1.E2.D1 " + "E4.E2.E5.E1.E2.D1 T5.E2.E5.E1.E2.D1 E6.E2.E5.E1.E2.D1 T7.E2.E5.= E1.E2.D1"); + helper_ole_check_ver(IXMLDOMNode_get_text(node2, &bstr)); + helper_expect_bstr_and_release(bstr, + "\n This is a description with preserved whitespa= ce. \n "); IXMLDOMNode_Release(node2); } =20 -#define check_ws_preserved(doc, str) _check_ws_preserved(__LINE__, doc, str) -static inline void _check_ws_preserved(int line, IXMLDOMDocument2* doc, char= const* str) +#define check_ws_preserved(ver, doc, str) _check_ws_preserved(__LINE__, ver,= doc, str) +static inline void _check_ws_preserved(int line, const char *ver, IXMLDOMDoc= ument2* doc, char const* str) { IXMLDOMNode *node1, *node2; IXMLDOMNodeList *list; BSTR bstr; =20 - helper_ole_check(IXMLDOMDocument2_selectNodes(doc, _bstr_("//*[local-nam= e()=3D'html']"), &list)); - helper_ole_check(IXMLDOMNodeList_get_item(list, 0, &node1)); - helper_ole_check(IXMLDOMNodeList_get_item(list, 1, &node2)); - helper_ole_check(IXMLDOMNodeList_reset(list)); + helper_ole_check_ver(IXMLDOMDocument2_selectNodes(doc, _bstr_("//*[local= -name()=3D'html']"), &list)); + helper_ole_check_ver(IXMLDOMNodeList_get_item(list, 0, &node1)); + helper_ole_check_ver(IXMLDOMNodeList_get_item(list, 1, &node2)); + helper_ole_check_ver(IXMLDOMNodeList_reset(list)); helper_expect_list_and_release(list, "E2.E10.E2.E2.D1 E4.E10.E2.E2.D1"); =20 - helper_ole_check(IXMLDOMNode_get_childNodes(node1, &list)); - helper_expect_list_and_release(list, "T1.E2.E10.E2.E2.D1 E2.E2.E10.E2.E2= .D1 T3.E2.E10.E2.E2.D1 E4.E2.E10.E2.E2.D1 T5.E2.E10.E2.E2.D1 E6.E2.E10.E2.E2.= D1 T7.E2.E10.E2.E2.D1"); - helper_ole_check(IXMLDOMNode_get_text(node1, &bstr)); + helper_ole_check_ver(IXMLDOMNode_get_childNodes(node1, &list)); + helper_expect_list_and_release(list, + "T1.E2.E10.E2.E2.D1 [4]2.E2.E10.E2.E2.D1 T3.E2.E10.E2.E2.D1 " + "E4.E2.E10.E2.E2.D1 T5.E2.E10.E2.E2.D1 E6.E2.E10.E2.E2.D1 " + "E7.E2.E10.E2.E2.D1 E8.E2.E10.E2.E2.D1 T9.E2.E10.E2.E2.D1"); + helper_ole_check_ver(IXMLDOMNode_get_text(node1, &bstr)); if (str) { helper_expect_bstr_and_release(bstr, str); } else { - helper_expect_bstr_and_release(bstr, "\n This is a de= scription. \n "); + helper_expect_bstr_and_release(bstr, "\n This is a = description. \n "); } IXMLDOMNode_Release(node1); =20 - helper_ole_check(IXMLDOMNode_get_childNodes(node2, &list)); - helper_expect_list_and_release(list, "T1.E4.E10.E2.E2.D1 E2.E4.E10.E2.E2= .D1 T3.E4.E10.E2.E2.D1 E4.E4.E10.E2.E2.D1 T5.E4.E10.E2.E2.D1 E6.E4.E10.E2.E2.= D1 T7.E4.E10.E2.E2.D1"); - helper_ole_check(IXMLDOMNode_get_text(node2, &bstr)); - helper_expect_bstr_and_release(bstr, "\n This is a descri= ption with preserved whitespace. \n "); + helper_ole_check_ver(IXMLDOMNode_get_childNodes(node2, &list)); + helper_expect_list_and_release(list, + "T1.E4.E10.E2.E2.D1 E2.E4.E10.E2.E2.D1 T3.E4.E10.E2.E2.D1 " + "E4.E4.E10.E2.E2.D1 T5.E4.E10.E2.E2.D1 E6.E4.E10.E2.E2.D1 T7.E4.= E10.E2.E2.D1"); + helper_ole_check_ver(IXMLDOMNode_get_text(node2, &bstr)); + helper_expect_bstr_and_release(bstr, + "\n This is a description with preserved whitespa= ce. \n "); IXMLDOMNode_Release(node2); } =20 @@ -4301,110 +4316,142 @@ IXMLDOMNodeList_Release(list); } =20 +struct whitespace_t { + const CLSID *clsid; + const char *name; +}; + +static const struct whitespace_t whitespace_test_data[] =3D { + { &CLSID_DOMDocument, "CLSID_DOMDocument" }, + { &CLSID_DOMDocument2, "CLSID_DOMDocument2" }, + { &CLSID_DOMDocument26, "CLSID_DOMDocument26" }, + { &CLSID_DOMDocument30, "CLSID_DOMDocument30" }, + { &CLSID_DOMDocument40, "CLSID_DOMDocument40" }, + { &CLSID_DOMDocument60, "CLSID_DOMDocument60" }, + { 0 } +}; + static void test_whitespace(void) { - IXMLDOMDocument2 *doc1, *doc2, *doc3, *doc4; - IXMLDOMNodeList *list; - IXMLDOMElement *root; - VARIANT_BOOL b; - HRESULT hr; - LONG len; - - if (!is_clsid_supported(&CLSID_DOMDocument2, &IID_IXMLDOMDocument2)) ret= urn; - doc1 =3D create_document(&IID_IXMLDOMDocument2); - doc2 =3D create_document(&IID_IXMLDOMDocument2); - - ole_check(IXMLDOMDocument2_put_preserveWhiteSpace(doc2, VARIANT_TRUE)); - ole_check(IXMLDOMDocument2_get_preserveWhiteSpace(doc1, &b)); - ok(b =3D=3D VARIANT_FALSE, "expected false\n"); - ole_check(IXMLDOMDocument2_get_preserveWhiteSpace(doc2, &b)); - ok(b =3D=3D VARIANT_TRUE, "expected true\n"); - - ole_check(IXMLDOMDocument2_loadXML(doc1, _bstr_(szExampleXML), &b)); - ok(b =3D=3D VARIANT_TRUE, "failed to load XML string\n"); - ole_check(IXMLDOMDocument2_loadXML(doc2, _bstr_(szExampleXML), &b)); - ok(b =3D=3D VARIANT_TRUE, "failed to load XML string\n"); - - /* switch to XPath */ - ole_check(IXMLDOMDocument2_setProperty(doc1, _bstr_("SelectionLanguage")= , _variantbstr_("XPath"))); - ole_check(IXMLDOMDocument2_setProperty(doc2, _bstr_("SelectionLanguage")= , _variantbstr_("XPath"))); - - check_ws_ignored(doc1, NULL); - check_ws_preserved(doc2, NULL); - - /* new instances copy the property */ - ole_check(IXMLDOMDocument2_QueryInterface(doc1, &IID_IXMLDOMDocument2, (= void**) &doc3)); - ole_check(IXMLDOMDocument2_QueryInterface(doc2, &IID_IXMLDOMDocument2, (= void**) &doc4)); - - ole_check(IXMLDOMDocument2_get_preserveWhiteSpace(doc3, &b)); - ok(b =3D=3D VARIANT_FALSE, "expected false\n"); - ole_check(IXMLDOMDocument2_get_preserveWhiteSpace(doc4, &b)); - ok(b =3D=3D VARIANT_TRUE, "expected true\n"); - - check_ws_ignored(doc3, NULL); - check_ws_preserved(doc4, NULL); - - /* setting after loading xml affects trimming of leading/trailing ws onl= y */ - ole_check(IXMLDOMDocument2_put_preserveWhiteSpace(doc1, VARIANT_TRUE)); - ole_check(IXMLDOMDocument2_put_preserveWhiteSpace(doc2, VARIANT_FALSE)); - - /* the trailing "\n " isn't there, because it was ws-only nod= e */ - check_ws_ignored(doc1, "\n This is a description. "); - check_ws_preserved(doc2, "This is a description."); - - /* it takes effect on reload */ - ole_check(IXMLDOMDocument2_get_preserveWhiteSpace(doc1, &b)); - ok(b =3D=3D VARIANT_TRUE, "expected true\n"); - ole_check(IXMLDOMDocument2_get_preserveWhiteSpace(doc2, &b)); - ok(b =3D=3D VARIANT_FALSE, "expected false\n"); - - ole_check(IXMLDOMDocument2_loadXML(doc1, _bstr_(szExampleXML), &b)); - ok(b =3D=3D VARIANT_TRUE, "failed to load XML string\n"); - ole_check(IXMLDOMDocument2_loadXML(doc2, _bstr_(szExampleXML), &b)); - ok(b =3D=3D VARIANT_TRUE, "failed to load XML string\n"); - - check_ws_preserved(doc1, NULL); - check_ws_ignored(doc2, NULL); - - /* other instances follow suit */ - ole_check(IXMLDOMDocument2_get_preserveWhiteSpace(doc3, &b)); - ok(b =3D=3D VARIANT_TRUE, "expected true\n"); - ole_check(IXMLDOMDocument2_get_preserveWhiteSpace(doc4, &b)); - ok(b =3D=3D VARIANT_FALSE, "expected false\n"); - - check_ws_preserved(doc3, NULL); - check_ws_ignored(doc4, NULL); - - IXMLDOMDocument2_Release(doc2); - IXMLDOMDocument2_Release(doc3); - IXMLDOMDocument2_Release(doc4); - - /* text with char references */ - test_preserve_charref(doc1, VARIANT_TRUE); - test_preserve_charref(doc1, VARIANT_FALSE); - - /* formatting whitespaces */ - hr =3D IXMLDOMDocument2_put_preserveWhiteSpace(doc1, VARIANT_FALSE); - ok(hr =3D=3D S_OK, "got 0x%08x\n", hr); - - hr =3D IXMLDOMDocument2_loadXML(doc1, _bstr_(complete7), &b); - ok(hr =3D=3D S_OK, "got 0x%08x\n", hr); - ok(b =3D=3D VARIANT_TRUE, "for %x\n", b); - - hr =3D IXMLDOMDocument2_get_documentElement(doc1, &root); - ok(hr =3D=3D S_OK, "got 0x%08x\n", hr); - hr =3D IXMLDOMElement_get_childNodes(root, &list); - ok(hr =3D=3D S_OK, "got 0x%08x\n", hr); - len =3D 0; - hr =3D IXMLDOMNodeList_get_length(list, &len); - ok(hr =3D=3D S_OK, "got 0x%08x\n", hr); - ok(len =3D=3D 3, "got %d\n", len); - IXMLDOMNodeList_Release(list); - IXMLDOMElement_Release(root); - - IXMLDOMDocument2_Release(doc1); - - free_bstrs(); + const struct whitespace_t *class_ptr =3D whitespace_test_data; + + while (class_ptr->clsid) + { + IXMLDOMDocument2 *doc1, *doc2, *doc3, *doc4; + IXMLDOMNodeList *list; + IXMLDOMElement *root; + VARIANT_BOOL b; + HRESULT hr; + LONG len; + + if (!is_clsid_supported(class_ptr->clsid, &IID_IXMLDOMDocument2)) + { + class_ptr++; + continue; + } + + hr =3D CoCreateInstance(class_ptr->clsid, NULL, CLSCTX_INPROC_SERVER, + &IID_IXMLDOMDocument2, (void**)&doc1); + ok(hr =3D=3D S_OK, "got 0x%08x\n", hr); + + hr =3D CoCreateInstance(class_ptr->clsid, NULL, CLSCTX_INPROC_SERVER, + &IID_IXMLDOMDocument2, (void**)&doc2); + ok(hr =3D=3D S_OK, "got 0x%08x\n", hr); + + ole_check(IXMLDOMDocument2_put_preserveWhiteSpace(doc2, VARIANT_TRUE= )); + ole_check(IXMLDOMDocument2_get_preserveWhiteSpace(doc1, &b)); + ok(b =3D=3D VARIANT_FALSE, "expected false\n"); + ole_check(IXMLDOMDocument2_get_preserveWhiteSpace(doc2, &b)); + ok(b =3D=3D VARIANT_TRUE, "expected true\n"); + + ole_check(IXMLDOMDocument2_loadXML(doc1, _bstr_(szExampleXML), &b)); + ok(b =3D=3D VARIANT_TRUE, "failed to load XML string\n"); + ole_check(IXMLDOMDocument2_loadXML(doc2, _bstr_(szExampleXML), &b)); + ok(b =3D=3D VARIANT_TRUE, "failed to load XML string\n"); + + /* switch to XPath */ + ole_check(IXMLDOMDocument2_setProperty(doc1, _bstr_("SelectionLangua= ge"), _variantbstr_("XPath"))); + ole_check(IXMLDOMDocument2_setProperty(doc2, _bstr_("SelectionLangua= ge"), _variantbstr_("XPath"))); + + check_ws_ignored(class_ptr->name, doc1, NULL); + check_ws_preserved(class_ptr->name, doc2, NULL); + + /* new instances copy the property */ + ole_check(IXMLDOMDocument2_QueryInterface(doc1, &IID_IXMLDOMDocument= 2, (void**) &doc3)); + ole_check(IXMLDOMDocument2_QueryInterface(doc2, &IID_IXMLDOMDocument= 2, (void**) &doc4)); + + ole_check(IXMLDOMDocument2_get_preserveWhiteSpace(doc3, &b)); + ok(b =3D=3D VARIANT_FALSE, "expected false\n"); + ole_check(IXMLDOMDocument2_get_preserveWhiteSpace(doc4, &b)); + ok(b =3D=3D VARIANT_TRUE, "expected true\n"); + + check_ws_ignored(class_ptr->name, doc3, NULL); + check_ws_preserved(class_ptr->name, doc4, NULL); + + /* setting after loading xml affects trimming of leading/trailing ws= only */ + ole_check(IXMLDOMDocument2_put_preserveWhiteSpace(doc1, VARIANT_TRUE= )); + ole_check(IXMLDOMDocument2_put_preserveWhiteSpace(doc2, VARIANT_FALS= E)); + + /* the trailing "\n " isn't there, because it was ws-only= node */ + check_ws_ignored(class_ptr->name, doc1, " This is a description. "); + check_ws_preserved(class_ptr->name, doc2, " This is a description."); + + /* it takes effect on reload */ + ole_check(IXMLDOMDocument2_get_preserveWhiteSpace(doc1, &b)); + ok(b =3D=3D VARIANT_TRUE, "expected true\n"); + ole_check(IXMLDOMDocument2_get_preserveWhiteSpace(doc2, &b)); + ok(b =3D=3D VARIANT_FALSE, "expected false\n"); + + ole_check(IXMLDOMDocument2_loadXML(doc1, _bstr_(szExampleXML), &b)); + ok(b =3D=3D VARIANT_TRUE, "failed to load XML string\n"); + ole_check(IXMLDOMDocument2_loadXML(doc2, _bstr_(szExampleXML), &b)); + ok(b =3D=3D VARIANT_TRUE, "failed to load XML string\n"); + + check_ws_preserved(class_ptr->name, doc1, NULL); + check_ws_ignored(class_ptr->name, doc2, NULL); + + /* other instances follow suit */ + ole_check(IXMLDOMDocument2_get_preserveWhiteSpace(doc3, &b)); + ok(b =3D=3D VARIANT_TRUE, "expected true\n"); + ole_check(IXMLDOMDocument2_get_preserveWhiteSpace(doc4, &b)); + ok(b =3D=3D VARIANT_FALSE, "expected false\n"); + + check_ws_preserved(class_ptr->name, doc3, NULL); + check_ws_ignored(class_ptr->name, doc4, NULL); + + IXMLDOMDocument2_Release(doc2); + IXMLDOMDocument2_Release(doc3); + IXMLDOMDocument2_Release(doc4); + + /* text with char references */ + test_preserve_charref(doc1, VARIANT_TRUE); + test_preserve_charref(doc1, VARIANT_FALSE); + + /* formatting whitespaces */ + hr =3D IXMLDOMDocument2_put_preserveWhiteSpace(doc1, VARIANT_FALSE); + ok(hr =3D=3D S_OK, "got 0x%08x\n", hr); + + hr =3D IXMLDOMDocument2_loadXML(doc1, _bstr_(complete7), &b); + ok(hr =3D=3D S_OK, "got 0x%08x\n", hr); + ok(b =3D=3D VARIANT_TRUE, "for %x\n", b); + + hr =3D IXMLDOMDocument2_get_documentElement(doc1, &root); + ok(hr =3D=3D S_OK, "got 0x%08x\n", hr); + hr =3D IXMLDOMElement_get_childNodes(root, &list); + ok(hr =3D=3D S_OK, "got 0x%08x\n", hr); + len =3D 0; + hr =3D IXMLDOMNodeList_get_length(list, &len); + ok(hr =3D=3D S_OK, "got 0x%08x\n", hr); + ok(len =3D=3D 3, "got %d\n", len); + IXMLDOMNodeList_Release(list); + IXMLDOMElement_Release(root); + + IXMLDOMDocument2_Release(doc1); + + free_bstrs(); + + class_ptr++; + } } =20 typedef struct { @@ -4640,7 +4687,7 @@ ole_check(IXMLDOMNode_selectNodes(elem1Node, _bstr_("//test:c"), &list)); expect_list_and_release(list, "E3.E3.E2.D1 E3.E4.E2.D1"); ole_check(IXMLDOMNode_selectNodes(elem1Node, _bstr_(".//test:x"), &list)= ); - expect_list_and_release(list, "E5.E1.E5.E1.E2.D1 E6.E2.E5.E1.E2.D1"); + expect_list_and_release(list, "E6.E1.E5.E1.E2.D1 E6.E2.E5.E1.E2.D1"); =20 /* SelectionNamespaces syntax error - the namespaces doesn't work anymor= e but the value is stored */ ole_expect(IXMLDOMDocument2_setProperty(doc, _bstr_("SelectionNamespaces= "), @@ -4812,7 +4859,8 @@ =20 static void test_cloneNode(void ) { - IXMLDOMDocument *doc, *doc2; + IXMLDOMDocument2 *doc, *doc_clone; + IXMLDOMDocument *doc2; VARIANT_BOOL b; IXMLDOMNodeList *pList; IXMLDOMNamedNodeMap *mapAttr; @@ -4821,14 +4869,52 @@ IXMLDOMNode *node, *attr; IXMLDOMNode *node_clone; IXMLDOMNode *node_first; + VARIANT v; HRESULT hr; =20 - doc =3D create_document(&IID_IXMLDOMDocument); - - ole_check(IXMLDOMDocument_loadXML(doc, _bstr_(complete4A), &b)); + doc =3D create_document(&IID_IXMLDOMDocument2); + + hr =3D IXMLDOMDocument2_loadXML(doc, _bstr_(complete4A), &b); + ok(hr =3D=3D S_OK, "got 0x%08x\n", hr); ok(b =3D=3D VARIANT_TRUE, "failed to load XML string\n"); =20 - hr =3D IXMLDOMDocument_selectSingleNode(doc, _bstr_("lc/pr"), &node); + hr =3D IXMLDOMDocument2_getProperty(doc, _bstr_("SelectionLanguage"), &v= ); + ok(hr =3D=3D S_OK, "got 0x%08x\n", hr); + ok(!lstrcmpW(V_BSTR(&v), _bstr_("XSLPattern")), "got prop value %s\n", w= ine_dbgstr_w(V_BSTR(&v))); + VariantClear(&v); + + V_BSTR(&v) =3D _bstr_("XPath"); + V_VT(&v) =3D VT_BSTR; + hr =3D IXMLDOMDocument2_setProperty(doc, _bstr_("SelectionLanguage"), v); + ok(hr =3D=3D S_OK, "got 0x%08x\n", hr); + VariantClear(&v); + + /* clone document node */ + hr =3D IXMLDOMDocument2_cloneNode(doc, VARIANT_TRUE, &node); + ok( hr =3D=3D S_OK, "ret %08x\n", hr ); + ok( node !=3D NULL, "node %p\n", node ); + + hr =3D IXMLDOMNode_get_childNodes(node, &pList); + ok( hr =3D=3D S_OK, "ret %08x\n", hr ); + length =3D 0; + hr =3D IXMLDOMNodeList_get_length(pList, &length); + ok( hr =3D=3D S_OK, "ret %08x\n", hr ); + ok(length =3D=3D 2, "got %d\n", length); + IXMLDOMNodeList_Release(pList); + + hr =3D IXMLDOMNode_QueryInterface(node, &IID_IXMLDOMDocument2, (void**)&= doc_clone); + ok(hr =3D=3D S_OK, "got 0x%08x\n", hr); + + /* cloned document inherits properties */ + hr =3D IXMLDOMDocument2_getProperty(doc_clone, _bstr_("SelectionLanguage= "), &v); + ok(hr =3D=3D S_OK, "got 0x%08x\n", hr); + ok(!lstrcmpW(V_BSTR(&v), _bstr_("XPath")), "got prop value %s\n", wine_d= bgstr_w(V_BSTR(&v))); + VariantClear(&v); + + IXMLDOMDocument2_Release(doc_clone); + IXMLDOMNode_Release(node); + + hr =3D IXMLDOMDocument2_selectSingleNode(doc, _bstr_("lc/pr"), &node); ok( hr =3D=3D S_OK, "ret %08x\n", hr ); ok( node !=3D NULL, "node %p\n", node ); =20 @@ -4916,7 +5002,7 @@ IXMLDOMNode_Release(node_clone); =20 IXMLDOMNode_Release(node); - IXMLDOMDocument_Release(doc); + IXMLDOMDocument2_Release(doc); free_bstrs(); } =20 @@ -6932,7 +7018,7 @@ =20 static const xslpattern_test_t xslpattern_test_no_ns[] =3D { /* prefixes don't need to be registered, you may use them as they are in= the doc */ - { "//bar:x", "E5.E1.E5.E1.E2.D1 E6.E2.E5.E1.E2.D1" }, + { "//bar:x", "E6.E1.E5.E1.E2.D1 E6.E2.E5.E1.E2.D1" }, /* prefixes must be explicitly specified in the name */ { "//foo:elem", "" }, { "//foo:c", "E3.E4.E2.D1" }, Modified: trunk/rostests/winetests/msxml3/httpreq.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/msxml3/httpr= eq.c?rev=3D70886&r1=3D70885&r2=3D70886&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- trunk/rostests/winetests/msxml3/httpreq.c [iso-8859-1] (original) +++ trunk/rostests/winetests/msxml3/httpreq.c [iso-8859-1] Thu Mar 3 14:05:5= 9 2016 @@ -1690,6 +1690,7 @@ hr =3D GetHGlobalFromStream((IStream*)V_UNKNOWN(&varbody), &g); EXPECT_HR(hr, S_OK); ok(g !=3D NULL, "got %p\n", g); + VariantClear(&varbody); =20 IDispatch_Release(event); =20 @@ -1757,6 +1758,7 @@ test_open(xhr, "GET", "http://www.test.winehq.org/tests/hello.html", E_A= CCESSDENIED); =20 IXMLHttpRequest_Release(xhr); + free_bstrs(); } =20 START_TEST(httpreq) Modified: trunk/rostests/winetests/msxml3/saxreader.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/msxml3/saxre= ader.c?rev=3D70886&r1=3D70885&r2=3D70886&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- trunk/rostests/winetests/msxml3/saxreader.c [iso-8859-1] (original) +++ trunk/rostests/winetests/msxml3/saxreader.c [iso-8859-1] Thu Mar 3 14:05= :59 2016 @@ -302,7 +302,10 @@ SysFreeString(call_seq->sequence[i].attributes[j].uriW); SysFreeString(call_seq->sequence[i].attributes[j].localW); SysFreeString(call_seq->sequence[i].attributes[j].qnameW); + SysFreeString(call_seq->sequence[i].attributes[j].valueW); } + HeapFree(GetProcessHeap(), 0, call_seq->sequence[i].attributes); + call_seq->sequence[i].attr_count =3D 0; =20 SysFreeString(call_seq->sequence[i].arg1W); SysFreeString(call_seq->sequence[i].arg2W); @@ -2868,9 +2871,7 @@ CloseHandle(file); =20 hr =3D ISAXXMLReader_parseURL(reader, testXmlW); - if (entry->todo) - todo_wine ok(hr =3D=3D entry->hr, "Expected 0x%08x, got 0x%08x. = CLSID %s\n", entry->hr, hr, entry->clsid); - else + todo_wine_if(entry->todo) ok(hr =3D=3D entry->hr, "Expected 0x%08x, got 0x%08x. CLSID %s\n= ", entry->hr, hr, entry->clsid); =20 DeleteFileA(testXmlA); Modified: trunk/rostests/winetests/msxml3/schema.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/msxml3/schem= a.c?rev=3D70886&r1=3D70885&r2=3D70886&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- trunk/rostests/winetests/msxml3/schema.c [iso-8859-1] (original) +++ trunk/rostests/winetests/msxml3/schema.c [iso-8859-1] Thu Mar 3 14:05:59= 2016 @@ -1324,15 +1324,13 @@ EXPECT_HR(hr, S_FALSE); ok(V_VT(&type) =3D=3D VT_NULL, "%s: got type %i\n", ptr->query, = V_VT(&type)); } + VariantClear(&type); =20 VariantClear(&v); hr =3D IXMLDOMNode_get_nodeTypedValue(node, &v); EXPECT_HR(hr, S_OK); =20 - if (ptr->todo) - todo_wine - ok(V_VT(&v) =3D=3D ptr->type_schema, "%s: got variant type %i\n"= , ptr->query, V_VT(&v)); - else + todo_wine_if(ptr->todo) ok(V_VT(&v) =3D=3D ptr->type_schema, "%s: got variant type %i\n"= , ptr->query, V_VT(&v)); =20 switch (ptr->type_schema) --===============6908857603518626044==--