4 * Copyright 2005 Mike McCormack for CodeWeavers
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
30 #include "wine/test.h"
32 const CLSID CLSID_DOMDocument2
= {0xf6d90f11, 0x9c73, 0x11d3, {0xb3, 0x2e, 0x00, 0xc0, 0x4f, 0x99, 0x0b, 0xb4}};
33 const IID IID_IXMLDOMDocument2
= {0x2933bf95, 0x7b36, 0x11d2, {0xb2, 0x0e, 0x00, 0xc0, 0x4f, 0x98, 0x3e, 0x60}};
35 static const WCHAR szEmpty
[] = { 0 };
36 static const WCHAR szIncomplete
[] = {
37 '<','?','x','m','l',' ',
38 'v','e','r','s','i','o','n','=','\'','1','.','0','\'','?','>','\n',0
40 static const WCHAR szComplete1
[] = {
41 '<','?','x','m','l',' ',
42 'v','e','r','s','i','o','n','=','\'','1','.','0','\'','?','>','\n',
43 '<','o','p','e','n','>','<','/','o','p','e','n','>','\n',0
45 static const WCHAR szComplete2
[] = {
46 '<','?','x','m','l',' ',
47 'v','e','r','s','i','o','n','=','\'','1','.','0','\'','?','>','\n',
48 '<','o','>','<','/','o','>','\n',0
50 static const WCHAR szComplete3
[] = {
51 '<','?','x','m','l',' ',
52 'v','e','r','s','i','o','n','=','\'','1','.','0','\'','?','>','\n',
53 '<','a','>','<','/','a','>','\n',0
55 static const WCHAR szComplete4
[] = {
56 '<','?','x','m','l',' ','v','e','r','s','i','o','n','=','\'','1','.','0','\'','?','>','\n',
57 '<','l','c',' ','d','l','=','\'','s','t','r','1','\'','>','\n',
58 '<','b','s',' ','v','r','=','\'','s','t','r','2','\'',' ','s','z','=','\'','1','2','3','4','\'','>',
59 'f','n','1','.','t','x','t','\n',
60 '<','/','b','s','>','\n',
61 '<','p','r',' ','i','d','=','\'','s','t','r','3','\'',' ','v','r','=','\'','1','.','2','.','3','\'',' ',
62 'p','n','=','\'','w','i','n','e',' ','2','0','0','5','0','8','0','4','\'','>','\n',
63 'f','n','2','.','t','x','t','\n',
64 '<','/','p','r','>','\n',
65 '<','e','m','p','t','y','>','<','/','e','m','p','t','y','>','\n',
69 '<','/','b','a','>','\n',
70 '<','/','f','o','>','\n',
71 '<','/','l','c','>','\n',0
73 static const WCHAR szComplete5
[] = {
74 '<','S',':','s','e','a','r','c','h',' ','x','m','l','n','s',':','D','=','"','D','A','V',':','"',' ',
75 'x','m','l','n','s',':','C','=','"','u','r','n',':','s','c','h','e','m','a','s','-','m','i','c','r','o','s','o','f','t','-','c','o','m',':','o','f','f','i','c','e',':','c','l','i','p','g','a','l','l','e','r','y','"',
76 ' ','x','m','l','n','s',':','S','=','"','u','r','n',':','s','c','h','e','m','a','s','-','m','i','c','r','o','s','o','f','t','-','c','o','m',':','o','f','f','i','c','e',':','c','l','i','p','g','a','l','l','e','r','y',':','s','e','a','r','c','h','"','>',
77 '<','S',':','s','c','o','p','e','>',
78 '<','S',':','d','e','e','p','>','/','<','/','S',':','d','e','e','p','>',
79 '<','/','S',':','s','c','o','p','e','>',
80 '<','S',':','c','o','n','t','e','n','t','f','r','e','e','t','e','x','t','>',
81 '<','C',':','t','e','x','t','o','r','p','r','o','p','e','r','t','y','/','>',
82 'c','o','m','p','u','t','e','r',
83 '<','/','S',':','c','o','n','t','e','n','t','f','r','e','e','t','e','x','t','>',
84 '<','/','S',':','s','e','a','r','c','h','>',0
87 static const WCHAR szNonExistentFile
[] = {
88 'c', ':', '\\', 'N', 'o', 'n', 'e', 'x', 'i', 's', 't', 'e', 'n', 't', '.', 'x', 'm', 'l', 0
90 static const WCHAR szDocument
[] = {
91 '#', 'd', 'o', 'c', 'u', 'm', 'e', 'n', 't', 0
94 static const WCHAR szOpen
[] = { 'o','p','e','n',0 };
95 static WCHAR szdl
[] = { 'd','l',0 };
96 static const WCHAR szvr
[] = { 'v','r',0 };
97 static const WCHAR szlc
[] = { 'l','c',0 };
98 static WCHAR szbs
[] = { 'b','s',0 };
99 static const WCHAR szstr1
[] = { 's','t','r','1',0 };
100 static const WCHAR szstr2
[] = { 's','t','r','2',0 };
101 static const WCHAR szstar
[] = { '*',0 };
102 static const WCHAR szfn1_txt
[] = {'f','n','1','.','t','x','t',0};
104 static void test_domdoc( void )
107 IXMLDOMDocument
*doc
= NULL
;
108 IXMLDOMParseError
*error
;
109 IXMLDOMElement
*element
= NULL
;
116 r
= CoCreateInstance( &CLSID_DOMDocument
, NULL
,
117 CLSCTX_INPROC_SERVER
, &IID_IXMLDOMDocument
, (LPVOID
*)&doc
);
121 /* try some stupid things */
122 r
= IXMLDOMDocument_loadXML( doc
, NULL
, NULL
);
123 ok( r
== S_FALSE
, "loadXML failed\n");
126 r
= IXMLDOMDocument_loadXML( doc
, NULL
, &b
);
127 ok( r
== S_FALSE
, "loadXML failed\n");
128 ok( b
== VARIANT_FALSE
, "failed to load XML string\n");
130 /* try to load a document from a nonexistent file */
132 str
= SysAllocString( szNonExistentFile
);
134 V_VT(&var
) = VT_BSTR
;
137 r
= IXMLDOMDocument_load( doc
, var
, &b
);
138 ok( r
== S_FALSE
, "load (from file) failed\n");
139 ok( b
== VARIANT_FALSE
, "failed to load XML file\n");
140 SysFreeString( str
);
142 /* try load an empty document */
144 str
= SysAllocString( szEmpty
);
145 r
= IXMLDOMDocument_loadXML( doc
, str
, &b
);
146 ok( r
== S_FALSE
, "loadXML failed\n");
147 ok( b
== VARIANT_FALSE
, "failed to load XML string\n");
148 SysFreeString( str
);
150 /* check that there's no document element */
152 r
= IXMLDOMDocument_get_documentElement( doc
, &element
);
153 ok( r
== S_FALSE
, "should be no document element\n");
155 /* try finding a node */
157 str
= SysAllocString( szstr1
);
158 r
= IXMLDOMDocument_selectSingleNode( doc
, str
, &node
);
159 ok( r
== S_FALSE
, "ret %08x\n", r
);
160 SysFreeString( str
);
163 str
= SysAllocString( szIncomplete
);
164 r
= IXMLDOMDocument_loadXML( doc
, str
, &b
);
165 ok( r
== S_FALSE
, "loadXML failed\n");
166 ok( b
== VARIANT_FALSE
, "failed to load XML string\n");
167 SysFreeString( str
);
169 /* check that there's no document element */
170 element
= (IXMLDOMElement
*)1;
171 r
= IXMLDOMDocument_get_documentElement( doc
, &element
);
172 ok( r
== S_FALSE
, "should be no document element\n");
173 ok( element
== NULL
, "Element should be NULL\n");
175 /* try to load something valid */
177 str
= SysAllocString( szComplete1
);
178 r
= IXMLDOMDocument_loadXML( doc
, str
, &b
);
179 ok( r
== S_OK
, "loadXML failed\n");
180 ok( b
== VARIANT_TRUE
, "failed to load XML string\n");
181 SysFreeString( str
);
183 /* try with a null out pointer - crashes */
186 r
= IXMLDOMDocument_get_documentElement( doc
, NULL
);
187 ok( r
== S_OK
, "should be no document element\n");
190 /* check if nodename is correct */
191 r
= IXMLDOMDocument_get_nodeName( doc
, NULL
);
192 ok ( r
== E_INVALIDARG
, "get_nodeName (NULL) wrong code\n");
194 /* content doesn't matter here */
195 str
= SysAllocString( szNonExistentFile
);
196 r
= IXMLDOMDocument_get_nodeName( doc
, &str
);
197 ok ( r
== S_OK
, "get_nodeName wrong code\n");
198 ok ( str
!= NULL
, "str is null\n");
199 ok( !lstrcmpW( str
, szDocument
), "incorrect nodeName\n");
200 SysFreeString( str
);
203 /* check that there's a document element */
205 r
= IXMLDOMDocument_get_documentElement( doc
, &element
);
206 ok( r
== S_OK
, "should be a document element\n");
211 /* check if the tag is correct */
212 r
= IXMLDOMElement_get_tagName( element
, &tag
);
213 ok( r
== S_OK
, "couldn't get tag name\n");
214 ok( tag
!= NULL
, "tag was null\n");
215 ok( !lstrcmpW( tag
, szOpen
), "incorrect tag name\n");
216 SysFreeString( tag
);
218 /* figure out what happens if we try to reload the document */
219 str
= SysAllocString( szComplete2
);
220 r
= IXMLDOMDocument_loadXML( doc
, str
, &b
);
221 ok( r
== S_OK
, "loadXML failed\n");
222 ok( b
== VARIANT_TRUE
, "failed to load XML string\n");
223 SysFreeString( str
);
225 /* check if the tag is still correct */
227 r
= IXMLDOMElement_get_tagName( element
, &tag
);
228 ok( r
== S_OK
, "couldn't get tag name\n");
229 ok( tag
!= NULL
, "tag was null\n");
230 ok( !lstrcmpW( tag
, szOpen
), "incorrect tag name\n");
231 SysFreeString( tag
);
233 IXMLDOMElement_Release( element
);
237 /* as soon as we call loadXML again, the document element will disappear */
239 r
= IXMLDOMDocument_loadXML( doc
, NULL
, NULL
);
240 ok( r
== S_FALSE
, "loadXML failed\n");
241 ok( b
== 2, "variant modified\n");
242 r
= IXMLDOMDocument_get_documentElement( doc
, &element
);
243 ok( r
== S_FALSE
, "should be no document element\n");
245 /* try to load something else simple and valid */
247 str
= SysAllocString( szComplete3
);
248 r
= IXMLDOMDocument_loadXML( doc
, str
, &b
);
249 ok( r
== S_OK
, "loadXML failed\n");
250 ok( b
== VARIANT_TRUE
, "failed to load XML string\n");
251 SysFreeString( str
);
253 /* try something a little more complicated */
255 str
= SysAllocString( szComplete4
);
256 r
= IXMLDOMDocument_loadXML( doc
, str
, &b
);
257 ok( r
== S_OK
, "loadXML failed\n");
258 ok( b
== VARIANT_TRUE
, "failed to load XML string\n");
259 SysFreeString( str
);
261 r
= IXMLDOMDocument_get_parseError( doc
, &error
);
262 ok( r
== S_OK
, "returns %08x\n", r
);
264 r
= IXMLDOMParseError_get_errorCode( error
, &code
);
265 ok( r
== S_FALSE
, "returns %08x\n", r
);
266 ok( code
== 0, "code %ld\n", code
);
267 IXMLDOMParseError_Release( error
);
269 r
= IXMLDOMDocument_Release( doc
);
270 ok( r
== 0, "document ref count incorrect\n");
274 static void test_domnode( void )
277 IXMLDOMDocument
*doc
= NULL
, *owner
= NULL
;
278 IXMLDOMElement
*element
= NULL
;
279 IXMLDOMNamedNodeMap
*map
= NULL
;
280 IXMLDOMNode
*node
= NULL
, *next
= NULL
;
281 IXMLDOMNodeList
*list
= NULL
;
282 DOMNodeType type
= NODE_INVALID
;
288 r
= CoCreateInstance( &CLSID_DOMDocument
, NULL
,
289 CLSCTX_INPROC_SERVER
, &IID_IXMLDOMDocument
, (LPVOID
*)&doc
);
294 str
= SysAllocString( szComplete4
);
295 r
= IXMLDOMDocument_loadXML( doc
, str
, &b
);
296 ok( r
== S_OK
, "loadXML failed\n");
297 ok( b
== VARIANT_TRUE
, "failed to load XML string\n");
298 SysFreeString( str
);
303 r
= IXMLDOMNode_hasChildNodes( doc
, &b
);
304 ok( r
== S_OK
, "hasChildNoes bad return\n");
305 ok( b
== VARIANT_TRUE
, "hasChildNoes wrong result\n");
307 r
= IXMLDOMDocument_get_documentElement( doc
, &element
);
308 ok( r
== S_OK
, "should be a document element\n");
309 ok( element
!= NULL
, "should be an element\n");
312 ok( FALSE
, "no document\n");
315 ok( V_VT(&var
) == VT_EMPTY
, "variant init failed\n");
316 r
= IXMLDOMNode_get_nodeValue( doc
, &var
);
317 ok( r
== S_FALSE
, "nextNode returned wrong code\n");
318 ok( V_VT(&var
) == VT_NULL
, "variant wasn't empty\n");
319 ok( V_BSTR(&var
) == NULL
, "variant value wasn't null\n");
324 r
= IXMLDOMNode_get_ownerDocument( element
, &owner
);
326 ok( r
== S_OK
, "get_ownerDocument return code\n");
328 ok( owner
!= doc
, "get_ownerDocument return\n");
331 r
= IXMLDOMNode_get_nodeType( element
, &type
);
332 ok( r
== S_OK
, "getNamedItem returned wrong code\n");
333 ok( type
== NODE_ELEMENT
, "node not an element\n");
336 r
= IXMLDOMNode_get_baseName( element
, &str
);
337 ok( r
== S_OK
, "get_baseName returned wrong code\n");
338 ok( lstrcmpW(str
,szlc
) == 0, "basename was wrong\n");
340 /* check if nodename is correct */
341 r
= IXMLDOMElement_get_nodeName( element
, NULL
);
342 ok ( r
== E_INVALIDARG
, "get_nodeName (NULL) wrong code\n");
344 /* content doesn't matter here */
345 str
= SysAllocString( szNonExistentFile
);
346 r
= IXMLDOMElement_get_nodeName( element
, &str
);
347 ok ( r
== S_OK
, "get_nodeName wrong code\n");
348 ok ( str
!= NULL
, "str is null\n");
349 ok( !lstrcmpW( str
, szlc
), "incorrect nodeName\n");
350 SysFreeString( str
);
352 str
= SysAllocString( szNonExistentFile
);
355 r
= IXMLDOMElement_getAttribute( element
, str
, &var
);
356 ok( r
== E_FAIL
, "getAttribute ret %08x\n", r
);
357 ok( V_VT(&var
) == VT_EMPTY
, "vt = %x\n", V_VT(&var
));
359 SysFreeString( str
);
361 str
= SysAllocString( szdl
);
364 r
= IXMLDOMElement_getAttribute( element
, str
, &var
);
365 ok( r
== S_OK
, "getAttribute ret %08x\n", r
);
366 ok( V_VT(&var
) == VT_BSTR
, "vt = %x\n", V_VT(&var
));
367 ok( !lstrcmpW(V_BSTR(&var
), szstr1
), "wrong attr value\n");
368 VariantClear( &var
);
369 SysFreeString( str
);
371 r
= IXMLDOMElement_get_attributes( element
, &map
);
372 ok( r
== S_OK
, "get_attributes returned wrong code\n");
373 ok( map
!= NULL
, "should be attributes\n");
376 r
= IXMLDOMNode_hasChildNodes( element
, &b
);
377 ok( r
== S_OK
, "hasChildNoes bad return\n");
378 ok( b
== VARIANT_TRUE
, "hasChildNoes wrong result\n");
381 ok( FALSE
, "no element\n");
385 ISupportErrorInfo
*support_error
;
386 r
= IXMLDOMNamedNodeMap_QueryInterface( map
, &IID_ISupportErrorInfo
, (LPVOID
*)&support_error
);
387 ok( r
== S_OK
, "ret %08x\n", r
);
389 r
= ISupportErrorInfo_InterfaceSupportsErrorInfo( support_error
, &IID_IXMLDOMNamedNodeMap
);
392 ok( r
== S_OK
, "ret %08x\n", r
);
394 ISupportErrorInfo_Release( support_error
);
396 str
= SysAllocString( szdl
);
397 r
= IXMLDOMNamedNodeMap_getNamedItem( map
, str
, &node
);
398 ok( r
== S_OK
, "getNamedItem returned wrong code\n");
399 ok( node
!= NULL
, "should be attributes\n");
400 IXMLDOMNode_Release(node
);
401 SysFreeString( str
);
403 str
= SysAllocString( szdl
);
404 r
= IXMLDOMNamedNodeMap_getNamedItem( map
, str
, NULL
);
405 ok( r
== E_INVALIDARG
, "getNamedItem should return E_INVALIDARG\n");
406 SysFreeString( str
);
408 /* something that isn't in szComplete4 */
409 str
= SysAllocString( szOpen
);
410 node
= (IXMLDOMNode
*) 1;
411 r
= IXMLDOMNamedNodeMap_getNamedItem( map
, str
, &node
);
412 ok( r
= S_FALSE
, "getNamedItem found a node that wasn't there\n");
413 ok( node
== NULL
, "getNamedItem should have returned NULL\n");
414 SysFreeString( str
);
416 /* test indexed access of attributes */
417 r
= IXMLDOMNamedNodeMap_get_length( map
, &count
);
418 ok ( r
== S_OK
, "get_length wrong code\n");
419 ok ( count
== 1, "get_length != 1\n");
422 r
= IXMLDOMNamedNodeMap_get_item( map
, -1, &node
);
423 ok ( r
== S_FALSE
, "get_item (-1) wrong code\n");
424 ok ( node
== NULL
, "there is no node\n");
427 r
= IXMLDOMNamedNodeMap_get_item( map
, 1, &node
);
428 ok ( r
== S_FALSE
, "get_item (1) wrong code\n");
429 ok ( node
== NULL
, "there is no attribute\n");
432 r
= IXMLDOMNamedNodeMap_get_item( map
, 0, &node
);
433 ok ( r
== S_OK
, "get_item (0) wrong code\n");
434 ok ( node
!= NULL
, "should be attribute\n");
436 r
= IXMLDOMNode_get_nodeName( node
, NULL
);
437 ok ( r
== E_INVALIDARG
, "get_nodeName (NULL) wrong code\n");
439 /* content doesn't matter here */
440 str
= SysAllocString( szNonExistentFile
);
441 r
= IXMLDOMNode_get_nodeName( node
, &str
);
442 ok ( r
== S_OK
, "get_nodeName wrong code\n");
443 ok ( str
!= NULL
, "str is null\n");
444 ok( !lstrcmpW( str
, szdl
), "incorrect node name\n");
445 SysFreeString( str
);
447 /* test sequential access of attributes */
449 r
= IXMLDOMNamedNodeMap_nextNode( map
, &node
);
450 ok ( r
== S_OK
, "nextNode (first time) wrong code\n");
451 ok ( node
!= NULL
, "nextNode, should be attribute\n");
453 r
= IXMLDOMNamedNodeMap_nextNode( map
, &node
);
454 ok ( r
!= S_OK
, "nextNode (second time) wrong code\n");
455 ok ( node
== NULL
, "nextNode, there is no attribute\n");
457 r
= IXMLDOMNamedNodeMap_reset( map
);
458 ok ( r
== S_OK
, "reset should return S_OK\n");
460 r
= IXMLDOMNamedNodeMap_nextNode( map
, &node
);
461 ok ( r
== S_OK
, "nextNode (third time) wrong code\n");
462 ok ( node
!= NULL
, "nextNode, should be attribute\n");
465 ok( FALSE
, "no map\n");
470 r
= IXMLDOMNode_get_nodeType( node
, &type
);
471 ok( r
== S_OK
, "getNamedItem returned wrong code\n");
472 ok( type
== NODE_ATTRIBUTE
, "node not an attribute\n");
475 r
= IXMLDOMNode_get_baseName( node
, NULL
);
476 ok( r
== E_INVALIDARG
, "get_baseName returned wrong code\n");
479 r
= IXMLDOMNode_get_baseName( node
, &str
);
480 ok( r
== S_OK
, "get_baseName returned wrong code\n");
481 ok( lstrcmpW(str
,szdl
) == 0, "basename was wrong\n");
483 r
= IXMLDOMNode_get_nodeValue( node
, &var
);
484 ok( r
== S_OK
, "returns %08x\n", r
);
485 ok( V_VT(&var
) == VT_BSTR
, "vt %x\n", V_VT(&var
));
486 ok( !lstrcmpW(V_BSTR(&var
), szstr1
), "nodeValue incorrect\n");
489 r
= IXMLDOMNode_get_childNodes( node
, NULL
);
490 ok( r
== E_INVALIDARG
, "get_childNodes returned wrong code\n");
492 r
= IXMLDOMNode_get_childNodes( node
, &list
);
493 ok( r
== S_OK
, "get_childNodes returned wrong code\n");
497 r
= IXMLDOMNodeList_nextNode( list
, &next
);
498 ok( r
== S_OK
, "nextNode returned wrong code\n");
501 ok( FALSE
, "no childlist\n");
506 r
= IXMLDOMNode_hasChildNodes( next
, &b
);
507 ok( r
== S_FALSE
, "hasChildNoes bad return\n");
508 ok( b
== VARIANT_FALSE
, "hasChildNoes wrong result\n");
511 r
= IXMLDOMNode_get_nodeType( next
, &type
);
512 ok( r
== S_OK
, "getNamedItem returned wrong code\n");
513 ok( type
== NODE_TEXT
, "node not text\n");
516 r
= IXMLDOMNode_get_baseName( next
, &str
);
517 ok( r
== S_FALSE
, "get_baseName returned wrong code\n");
518 ok( str
== NULL
, "basename was wrong\n");
521 ok( FALSE
, "no next\n");
524 IXMLDOMNode_Release( next
);
527 IXMLDOMNodeList_Release( list
);
530 IXMLDOMNode_Release( node
);
533 ok( FALSE
, "no node\n");
537 IXMLDOMNamedNodeMap_Release( map
);
539 /* now traverse the tree from the root node */
542 r
= IXMLDOMNode_get_childNodes( element
, &list
);
543 ok( r
== S_OK
, "get_childNodes returned wrong code\n");
546 ok( FALSE
, "no element\n");
548 node
= (void*)0xdeadbeef;
549 r
= IXMLDOMNode_selectSingleNode( element
, szdl
, &node
);
550 ok( r
== S_FALSE
, "ret %08x\n", r
);
551 ok( node
== NULL
, "node %p\n", node
);
552 r
= IXMLDOMNode_selectSingleNode( element
, szbs
, &node
);
553 ok( r
== S_OK
, "ret %08x\n", r
);
554 r
= IXMLDOMNode_Release( node
);
555 ok( r
== 0, "ret %08x\n", r
);
559 r
= IXMLDOMNodeList_get_length( list
, &count
);
560 ok( r
== S_OK
, "get_length returns %08x\n", r
);
561 ok( count
== 4, "get_length got %ld\n", count
);
563 r
= IXMLDOMNodeList_nextNode( list
, &node
);
564 ok( r
== S_OK
, "nextNode returned wrong code\n");
567 ok( FALSE
, "no list\n");
572 r
= IXMLDOMNode_get_nodeType( node
, &type
);
573 ok( r
== S_OK
, "getNamedItem returned wrong code\n");
574 ok( type
== NODE_ELEMENT
, "node not text\n");
577 ok( V_VT(&var
) == VT_EMPTY
, "variant init failed\n");
578 r
= IXMLDOMNode_get_nodeValue( node
, &var
);
579 ok( r
== S_FALSE
, "nextNode returned wrong code\n");
580 ok( V_VT(&var
) == VT_NULL
, "variant wasn't empty\n");
581 ok( V_BSTR(&var
) == NULL
, "variant value wasn't null\n");
583 r
= IXMLDOMNode_hasChildNodes( node
, NULL
);
584 ok( r
== E_INVALIDARG
, "hasChildNoes bad return\n");
587 r
= IXMLDOMNode_hasChildNodes( node
, &b
);
588 ok( r
== S_OK
, "hasChildNoes bad return\n");
589 ok( b
== VARIANT_TRUE
, "hasChildNoes wrong result\n");
592 r
= IXMLDOMNode_get_baseName( node
, &str
);
593 ok( r
== S_OK
, "get_baseName returned wrong code\n");
594 ok( lstrcmpW(str
,szbs
) == 0, "basename was wrong\n");
597 ok( FALSE
, "no node\n");
600 IXMLDOMNode_Release( node
);
602 IXMLDOMNodeList_Release( list
);
604 IXMLDOMElement_Release( element
);
607 str
= SysAllocString( szComplete5
);
608 r
= IXMLDOMDocument_loadXML( doc
, str
, &b
);
609 ok( r
== S_OK
, "loadXML failed\n");
610 ok( b
== VARIANT_TRUE
, "failed to load XML string\n");
611 SysFreeString( str
);
614 r
= IXMLDOMNode_hasChildNodes( doc
, &b
);
615 ok( r
== S_OK
, "hasChildNoes bad return\n");
616 ok( b
== VARIANT_TRUE
, "hasChildNoes wrong result\n");
618 r
= IXMLDOMDocument_get_documentElement( doc
, &element
);
619 ok( r
== S_OK
, "should be a document element\n");
620 ok( element
!= NULL
, "should be an element\n");
624 static const WCHAR szSSearch
[] = {'S',':','s','e','a','r','c','h',0};
627 /* check if the tag is correct */
628 r
= IXMLDOMElement_get_tagName( element
, &tag
);
629 ok( r
== S_OK
, "couldn't get tag name\n");
630 ok( tag
!= NULL
, "tag was null\n");
631 ok( !lstrcmpW( tag
, szSSearch
), "incorrect tag name\n");
632 SysFreeString( tag
);
636 IXMLDOMElement_Release( element
);
638 IXMLDOMDocument_Release( doc
);
641 static void test_refs(void)
646 IXMLDOMDocument
*doc
= NULL
;
647 IXMLDOMElement
*element
= NULL
;
648 IXMLDOMNode
*node
= NULL
, *node2
;
649 IXMLDOMNodeList
*node_list
= NULL
;
651 IUnknown
*unk
, *unk2
;
653 r
= CoCreateInstance( &CLSID_DOMDocument
, NULL
,
654 CLSCTX_INPROC_SERVER
, &IID_IXMLDOMDocument
, (LPVOID
*)&doc
);
657 ref
= IXMLDOMDocument_Release(doc
);
658 ok( ref
== 0, "ref %d\n", ref
);
660 r
= CoCreateInstance( &CLSID_DOMDocument
, NULL
,
661 CLSCTX_INPROC_SERVER
, &IID_IXMLDOMDocument
, (LPVOID
*)&doc
);
665 str
= SysAllocString( szComplete4
);
666 r
= IXMLDOMDocument_loadXML( doc
, str
, &b
);
667 ok( r
== S_OK
, "loadXML failed\n");
668 ok( b
== VARIANT_TRUE
, "failed to load XML string\n");
669 SysFreeString( str
);
671 ref
= IXMLDOMDocument_AddRef( doc
);
672 ok( ref
== 2, "ref %d\n", ref
);
673 ref
= IXMLDOMDocument_AddRef( doc
);
674 ok( ref
== 3, "ref %d\n", ref
);
675 IXMLDOMDocument_Release( doc
);
676 IXMLDOMDocument_Release( doc
);
678 r
= IXMLDOMDocument_get_documentElement( doc
, &element
);
679 ok( r
== S_OK
, "should be a document element\n");
680 ok( element
!= NULL
, "should be an element\n");
682 ref
= IXMLDOMDocument_AddRef( doc
);
683 ok( ref
== 2, "ref %d\n", ref
);
684 IXMLDOMDocument_Release( doc
);
686 r
= IXMLDOMElement_get_childNodes( element
, &node_list
);
687 ok( r
== S_OK
, "rets %08x\n", r
);
688 ref
= IXMLDOMNodeList_AddRef( node_list
);
689 ok( ref
== 2, "ref %d\n", ref
);
690 IXMLDOMNodeList_Release( node_list
);
692 IXMLDOMNodeList_get_item( node_list
, 0, &node
);
693 ok( r
== S_OK
, "rets %08x\n", r
);
695 IXMLDOMNodeList_get_item( node_list
, 0, &node2
);
696 ok( r
== S_OK
, "rets %08x\n", r
);
698 ref
= IXMLDOMNode_AddRef( node
);
699 ok( ref
== 2, "ref %d\n", ref
);
700 IXMLDOMNode_Release( node
);
702 ref
= IXMLDOMNode_Release( node
);
703 ok( ref
== 0, "ref %d\n", ref
);
704 ref
= IXMLDOMNode_Release( node2
);
705 ok( ref
== 0, "ref %d\n", ref
);
707 ref
= IXMLDOMNodeList_Release( node_list
);
708 ok( ref
== 0, "ref %d\n", ref
);
710 ok( node
!= node2
, "node %p node2 %p\n", node
, node2
);
712 ref
= IXMLDOMDocument_Release( doc
);
713 ok( ref
== 0, "ref %d\n", ref
);
715 ref
= IXMLDOMElement_AddRef( element
);
717 ok( ref
== 3, "ref %d\n", ref
);
719 IXMLDOMElement_Release( element
);
721 /* IUnknown must be unique however we obtain it */
722 r
= IXMLDOMElement_QueryInterface( element
, &IID_IUnknown
, (LPVOID
*)&unk
);
723 ok( r
== S_OK
, "rets %08x\n", r
);
724 r
= IXMLDOMElement_QueryInterface( element
, &IID_IXMLDOMNode
, (LPVOID
*)&node
);
725 ok( r
== S_OK
, "rets %08x\n", r
);
726 r
= IXMLDOMNode_QueryInterface( node
, &IID_IUnknown
, (LPVOID
*)&unk2
);
727 ok( r
== S_OK
, "rets %08x\n", r
);
728 ok( unk
== unk2
, "unk %p unk2 %p\n", unk
, unk2
);
730 IUnknown_Release( unk2
);
731 IUnknown_Release( unk
);
732 IXMLDOMNode_Release( node
);
734 IXMLDOMElement_Release( element
);
738 static void test_create(void)
743 IXMLDOMDocument
*doc
;
744 IXMLDOMElement
*element
;
745 IXMLDOMNode
*root
, *node
, *child
;
746 IXMLDOMNamedNodeMap
*attr_map
;
751 r
= CoCreateInstance( &CLSID_DOMDocument
, NULL
,
752 CLSCTX_INPROC_SERVER
, &IID_IXMLDOMDocument
, (LPVOID
*)&doc
);
757 V_I4(&var
) = NODE_ELEMENT
;
758 str
= SysAllocString( szlc
);
759 r
= IXMLDOMDocument_createNode( doc
, var
, str
, NULL
, &node
);
760 ok( r
== S_OK
, "returns %08x\n", r
);
761 r
= IXMLDOMDocument_appendChild( doc
, node
, &root
);
762 ok( r
== S_OK
, "returns %08x\n", r
);
763 ok( node
== root
, "%p %p\n", node
, root
);
765 ref
= IXMLDOMNode_AddRef( node
);
766 ok(ref
== 3, "ref %d\n", ref
);
767 IXMLDOMNode_Release( node
);
769 ref
= IXMLDOMNode_Release( node
);
770 ok(ref
== 1, "ref %d\n", ref
);
771 SysFreeString( str
);
774 V_I4(&var
) = NODE_ELEMENT
;
775 str
= SysAllocString( szbs
);
776 r
= IXMLDOMDocument_createNode( doc
, var
, str
, NULL
, &node
);
777 ok( r
== S_OK
, "returns %08x\n", r
);
779 ref
= IXMLDOMNode_AddRef( node
);
780 ok(ref
== 2, "ref = %d\n", ref
);
781 IXMLDOMNode_Release( node
);
783 r
= IXMLDOMNode_QueryInterface( node
, &IID_IUnknown
, (LPVOID
*)&unk
);
784 ok( r
== S_OK
, "returns %08x\n", r
);
786 ref
= IXMLDOMNode_AddRef( unk
);
787 ok(ref
== 3, "ref = %d\n", ref
);
788 IXMLDOMNode_Release( unk
);
790 V_VT(&var
) = VT_EMPTY
;
791 r
= IXMLDOMNode_insertBefore( root
, (IXMLDOMNode
*)unk
, var
, &child
);
792 ok( r
== S_OK
, "returns %08x\n", r
);
793 ok( unk
== (IUnknown
*)child
, "%p %p\n", unk
, child
);
794 IXMLDOMNode_Release( child
);
795 IUnknown_Release( unk
);
798 V_VT(&var
) = VT_NULL
;
799 V_DISPATCH(&var
) = (IDispatch
*)node
;
800 r
= IXMLDOMNode_insertBefore( root
, node
, var
, &child
);
801 ok( r
== S_OK
, "returns %08x\n", r
);
802 ok( node
== child
, "%p %p\n", node
, child
);
803 IXMLDOMNode_Release( child
);
804 IXMLDOMNode_Release( node
);
807 r
= IXMLDOMNode_QueryInterface( root
, &IID_IXMLDOMElement
, (LPVOID
*)&element
);
808 ok( r
== S_OK
, "returns %08x\n", r
);
810 r
= IXMLDOMElement_get_attributes( element
, &attr_map
);
811 ok( r
== S_OK
, "returns %08x\n", r
);
812 r
= IXMLDOMNamedNodeMap_get_length( attr_map
, &num
);
813 ok( r
== S_OK
, "returns %08x\n", r
);
814 ok( num
== 0, "num %ld\n", num
);
815 IXMLDOMNamedNodeMap_Release( attr_map
);
817 V_VT(&var
) = VT_BSTR
;
818 V_BSTR(&var
) = SysAllocString( szstr1
);
819 name
= SysAllocString( szdl
);
820 r
= IXMLDOMElement_setAttribute( element
, name
, var
);
821 ok( r
== S_OK
, "returns %08x\n", r
);
822 r
= IXMLDOMElement_get_attributes( element
, &attr_map
);
823 ok( r
== S_OK
, "returns %08x\n", r
);
824 r
= IXMLDOMNamedNodeMap_get_length( attr_map
, &num
);
825 ok( r
== S_OK
, "returns %08x\n", r
);
826 ok( num
== 1, "num %ld\n", num
);
827 IXMLDOMNamedNodeMap_Release( attr_map
);
830 V_VT(&var
) = VT_BSTR
;
831 V_BSTR(&var
) = SysAllocString( szstr2
);
832 r
= IXMLDOMElement_setAttribute( element
, name
, var
);
833 ok( r
== S_OK
, "returns %08x\n", r
);
834 r
= IXMLDOMElement_get_attributes( element
, &attr_map
);
835 ok( r
== S_OK
, "returns %08x\n", r
);
836 r
= IXMLDOMNamedNodeMap_get_length( attr_map
, &num
);
837 ok( r
== S_OK
, "returns %08x\n", r
);
838 ok( num
== 1, "num %ld\n", num
);
839 IXMLDOMNamedNodeMap_Release( attr_map
);
841 r
= IXMLDOMElement_getAttribute( element
, name
, &var
);
842 ok( r
== S_OK
, "returns %08x\n", r
);
843 ok( !lstrcmpW(V_BSTR(&var
), szstr2
), "wrong attr value\n");
847 V_VT(&var
) = VT_BSTR
;
848 V_BSTR(&var
) = SysAllocString( szstr1
);
849 name
= SysAllocString( szlc
);
850 r
= IXMLDOMElement_setAttribute( element
, name
, var
);
851 ok( r
== S_OK
, "returns %08x\n", r
);
852 r
= IXMLDOMElement_get_attributes( element
, &attr_map
);
853 ok( r
== S_OK
, "returns %08x\n", r
);
854 r
= IXMLDOMNamedNodeMap_get_length( attr_map
, &num
);
855 ok( r
== S_OK
, "returns %08x\n", r
);
856 ok( num
== 2, "num %ld\n", num
);
857 IXMLDOMNamedNodeMap_Release( attr_map
);
863 name
= SysAllocString( szbs
);
864 r
= IXMLDOMElement_setAttribute( element
, name
, var
);
865 ok( r
== S_OK
, "returns %08x\n", r
);
867 r
= IXMLDOMElement_getAttribute( element
, name
, &var
);
868 ok( r
== S_OK
, "returns %08x\n", r
);
869 ok( V_VT(&var
) == VT_BSTR
, "variant type %x\n", V_VT(&var
));
873 IXMLDOMElement_Release( element
);
874 IXMLDOMNode_Release( root
);
875 IXMLDOMDocument_Release( doc
);
878 static void test_getElementsByTagName(void)
883 IXMLDOMDocument
*doc
;
884 IXMLDOMNodeList
*node_list
;
887 r
= CoCreateInstance( &CLSID_DOMDocument
, NULL
,
888 CLSCTX_INPROC_SERVER
, &IID_IXMLDOMDocument
, (LPVOID
*)&doc
);
892 str
= SysAllocString( szComplete4
);
893 r
= IXMLDOMDocument_loadXML( doc
, str
, &b
);
894 ok( r
== S_OK
, "loadXML failed\n");
895 ok( b
== VARIANT_TRUE
, "failed to load XML string\n");
896 SysFreeString( str
);
898 str
= SysAllocString( szstar
);
899 r
= IXMLDOMDocument_getElementsByTagName(doc
, str
, &node_list
);
900 ok( r
== S_OK
, "ret %08x\n", r
);
901 r
= IXMLDOMNodeList_get_length( node_list
, &len
);
902 ok( r
== S_OK
, "ret %08x\n", r
);
903 ok( len
== 6, "len %ld\n", len
);
904 IXMLDOMNodeList_Release( node_list
);
905 SysFreeString( str
);
907 str
= SysAllocString( szbs
);
908 r
= IXMLDOMDocument_getElementsByTagName(doc
, str
, &node_list
);
909 ok( r
== S_OK
, "ret %08x\n", r
);
910 r
= IXMLDOMNodeList_get_length( node_list
, &len
);
911 ok( r
== S_OK
, "ret %08x\n", r
);
912 ok( len
== 1, "len %ld\n", len
);
913 IXMLDOMNodeList_Release( node_list
);
914 SysFreeString( str
);
916 str
= SysAllocString( szdl
);
917 r
= IXMLDOMDocument_getElementsByTagName(doc
, str
, &node_list
);
918 ok( r
== S_OK
, "ret %08x\n", r
);
919 r
= IXMLDOMNodeList_get_length( node_list
, &len
);
920 ok( r
== S_OK
, "ret %08x\n", r
);
921 ok( len
== 0, "len %ld\n", len
);
922 IXMLDOMNodeList_Release( node_list
);
923 SysFreeString( str
);
925 str
= SysAllocString( szstr1
);
926 r
= IXMLDOMDocument_getElementsByTagName(doc
, str
, &node_list
);
927 ok( r
== S_OK
, "ret %08x\n", r
);
928 r
= IXMLDOMNodeList_get_length( node_list
, &len
);
929 ok( r
== S_OK
, "ret %08x\n", r
);
930 ok( len
== 0, "len %ld\n", len
);
931 IXMLDOMNodeList_Release( node_list
);
932 SysFreeString( str
);
934 IXMLDOMDocument_Release( doc
);
937 static void test_get_text(void)
942 IXMLDOMDocument
*doc
;
943 IXMLDOMNode
*node
, *node2
, *node3
;
944 IXMLDOMNodeList
*node_list
;
945 IXMLDOMNamedNodeMap
*node_map
;
947 r
= CoCreateInstance( &CLSID_DOMDocument
, NULL
,
948 CLSCTX_INPROC_SERVER
, &IID_IXMLDOMDocument
, (LPVOID
*)&doc
);
952 str
= SysAllocString( szComplete4
);
953 r
= IXMLDOMDocument_loadXML( doc
, str
, &b
);
954 ok( r
== S_OK
, "loadXML failed\n");
955 ok( b
== VARIANT_TRUE
, "failed to load XML string\n");
956 SysFreeString( str
);
958 str
= SysAllocString( szbs
);
959 r
= IXMLDOMDocument_getElementsByTagName( doc
, str
, &node_list
);
960 ok( r
== S_OK
, "ret %08x\n", r
);
963 r
= IXMLDOMNodeList_get_item( node_list
, 0, &node
);
964 ok( r
== S_OK
, "ret %08x\n", r
);
965 IXMLDOMNodeList_Release( node_list
);
967 r
= IXMLDOMNode_get_text( node
, &str
);
968 ok( r
== S_OK
, "ret %08x\n", r
);
970 ok( !memcmp(str
, szfn1_txt
, sizeof(szfn1_txt
)), "wrong string\n" );
972 ok( !memcmp(str
, szfn1_txt
, sizeof(szfn1_txt
)-4), "wrong string\n" );
975 r
= IXMLDOMNode_get_attributes( node
, &node_map
);
976 ok( r
== S_OK
, "ret %08x\n", r
);
978 str
= SysAllocString( szvr
);
979 r
= IXMLDOMNamedNodeMap_getNamedItem( node_map
, str
, &node2
);
980 ok( r
== S_OK
, "ret %08x\n", r
);
983 r
= IXMLDOMNode_get_text( node2
, &str
);
984 ok( r
== S_OK
, "ret %08x\n", r
);
985 ok( !memcmp(str
, szstr2
, sizeof(szstr2
)), "wrong string\n" );
988 r
= IXMLDOMNode_get_firstChild( node2
, &node3
);
989 ok( r
== S_OK
, "ret %08x\n", r
);
991 r
= IXMLDOMNode_get_text( node3
, &str
);
992 ok( r
== S_OK
, "ret %08x\n", r
);
993 ok( !memcmp(str
, szstr2
, sizeof(szstr2
)), "wrong string\n" );
997 IXMLDOMNode_Release( node3
);
998 IXMLDOMNode_Release( node2
);
999 IXMLDOMNamedNodeMap_Release( node_map
);
1000 IXMLDOMNode_Release( node
);
1001 IXMLDOMDocument_Release( doc
);
1004 static void test_get_childNodes(void)
1009 IXMLDOMDocument
*doc
;
1010 IXMLDOMElement
*element
;
1011 IXMLDOMNode
*node
, *node2
;
1012 IXMLDOMNodeList
*node_list
, *node_list2
;
1015 r
= CoCreateInstance( &CLSID_DOMDocument
, NULL
,
1016 CLSCTX_INPROC_SERVER
, &IID_IXMLDOMDocument
, (LPVOID
*)&doc
);
1020 str
= SysAllocString( szComplete4
);
1021 r
= IXMLDOMDocument_loadXML( doc
, str
, &b
);
1022 ok( r
== S_OK
, "loadXML failed\n");
1023 ok( b
== VARIANT_TRUE
, "failed to load XML string\n");
1024 SysFreeString( str
);
1026 r
= IXMLDOMDocument_get_documentElement( doc
, &element
);
1027 ok( r
== S_OK
, "ret %08x\n", r
);
1029 r
= IXMLDOMElement_get_childNodes( element
, &node_list
);
1030 ok( r
== S_OK
, "ret %08x\n", r
);
1032 r
= IXMLDOMNodeList_get_length( node_list
, &len
);
1033 ok( r
== S_OK
, "ret %08x\n", r
);
1034 ok( len
== 4, "len %ld\n", len
);
1036 r
= IXMLDOMNodeList_get_item( node_list
, 2, &node
);
1037 ok( r
== S_OK
, "ret %08x\n", r
);
1039 r
= IXMLDOMNode_get_childNodes( node
, &node_list2
);
1040 ok( r
== S_OK
, "ret %08x\n", r
);
1042 r
= IXMLDOMNodeList_get_length( node_list2
, &len
);
1043 ok( r
== S_OK
, "ret %08x\n", r
);
1044 ok( len
== 0, "len %ld\n", len
);
1046 r
= IXMLDOMNodeList_get_item( node_list2
, 0, &node2
);
1047 ok( r
== S_FALSE
, "ret %08x\n", r
);
1049 IXMLDOMNodeList_Release( node_list2
);
1050 IXMLDOMNode_Release( node
);
1051 IXMLDOMNodeList_Release( node_list
);
1052 IXMLDOMElement_Release( element
);
1053 IXMLDOMDocument_Release( doc
);
1056 static void test_removeChild(void)
1061 IXMLDOMDocument
*doc
;
1062 IXMLDOMElement
*element
;
1063 IXMLDOMNode
*node
, *node2
, *node3
, *node4
;
1064 IXMLDOMNodeList
*node_list
, *node_list2
;
1066 r
= CoCreateInstance( &CLSID_DOMDocument
, NULL
,
1067 CLSCTX_INPROC_SERVER
, &IID_IXMLDOMDocument
, (LPVOID
*)&doc
);
1071 str
= SysAllocString( szComplete4
);
1072 r
= IXMLDOMDocument_loadXML( doc
, str
, &b
);
1073 ok( r
== S_OK
, "loadXML failed\n");
1074 ok( b
== VARIANT_TRUE
, "failed to load XML string\n");
1075 SysFreeString( str
);
1077 r
= IXMLDOMDocument_get_documentElement( doc
, &element
);
1078 ok( r
== S_OK
, "ret %08x\n", r
);
1080 r
= IXMLDOMElement_get_childNodes( element
, &node_list
);
1081 ok( r
== S_OK
, "ret %08x\n", r
);
1083 r
= IXMLDOMNodeList_get_item( node_list
, 3, &node
);
1084 ok( r
== S_OK
, "ret %08x\n", r
);
1086 r
= IXMLDOMNode_get_childNodes( node
, &node_list2
);
1087 ok( r
== S_OK
, "ret %08x\n", r
);
1089 r
= IXMLDOMNodeList_get_item( node_list
, 0, &node4
);
1090 ok( r
== S_OK
, "ret %08x\n", r
);
1092 r
= IXMLDOMElement_removeChild( element
, NULL
, &node2
);
1093 ok( r
== E_INVALIDARG
, "ret %08x\n", r
);
1095 r
= IXMLDOMElement_removeChild( element
, node4
, &node2
);
1096 ok( r
== S_OK
, "ret %08x\n", r
);
1097 ok( node4
== node2
, "node %p node2 %p\n", node4
, node2
);
1099 r
= IXMLDOMNode_get_parentNode( node4
, &node3
);
1100 ok( r
== S_FALSE
, "ret %08x\n", r
);
1101 ok( node3
== NULL
, "%p\n", node3
);
1103 IXMLDOMNode_Release( node2
);
1104 IXMLDOMNode_Release( node4
);
1105 IXMLDOMNodeList_Release( node_list2
);
1106 IXMLDOMNode_Release( node
);
1107 IXMLDOMNodeList_Release( node_list
);
1108 IXMLDOMElement_Release( element
);
1109 IXMLDOMDocument_Release( doc
);
1112 static void test_XMLHTTP(void)
1114 static const WCHAR wszBody
[] = {'m','o','d','e','=','T','e','s','t',0};
1115 static WCHAR wszPOST
[] = {'P','O','S','T',0};
1116 static WCHAR wszUrl
[] = {'h','t','t','p',':','/','/',
1117 'c','r','o','s','s','o','v','e','r','.','c','o','d','e','w','e','a','v','e','r','s','.','c','o','m','/',
1118 'p','o','s','t','t','e','s','t','.','p','h','p',0};
1119 static const WCHAR wszExpectedResponse
[] = {'F','A','I','L','E','D',0};
1120 IXMLHttpRequest
*pXMLHttpRequest
;
1125 HRESULT hr
= CoCreateInstance(&CLSID_XMLHTTPRequest
, NULL
,
1126 CLSCTX_INPROC_SERVER
, &IID_IXMLHttpRequest
,
1127 (void **)&pXMLHttpRequest
);
1129 ok(hr
== S_OK
, "CoCreateInstance(CLSID_XMLHTTPRequest) should have succeeded instead of failing with 0x%08x\n", hr
);
1134 VariantInit(&dummy
);
1135 V_VT(&dummy
) = VT_ERROR
;
1136 V_ERROR(&dummy
) = DISP_E_MEMBERNOTFOUND
;
1137 VariantInit(&varfalse
);
1138 V_VT(&varfalse
) = VT_BOOL
;
1139 V_BOOL(&varfalse
) = VARIANT_FALSE
;
1140 V_VT(&varbody
) = VT_BSTR
;
1141 V_BSTR(&varbody
) = SysAllocString(wszBody
);
1143 hr
= IXMLHttpRequest_open(pXMLHttpRequest
, wszPOST
, wszUrl
, varfalse
, dummy
, dummy
);
1144 ok(hr
== S_OK
, "IXMLHttpRequest_open should have succeeded instead of failing with 0x%08x\n", hr
);
1146 hr
= IXMLHttpRequest_send(pXMLHttpRequest
, varbody
);
1147 ok(hr
== S_OK
, "IXMLHttpRequest_send should have succeeded instead of failing with 0x%08x\n", hr
);
1148 VariantClear(&varbody
);
1150 hr
= IXMLHttpRequest_get_responseText(pXMLHttpRequest
, &bstrResponse
);
1151 ok(hr
== S_OK
, "IXMLHttpRequest_get_responseText should have succeeded instead of failing with 0x%08x\n", hr
);
1152 /* the server currently returns "FAILED" because the Content-Type header is
1153 * not what the server expects */
1154 ok(!memcmp(bstrResponse
, wszExpectedResponse
, sizeof(wszExpectedResponse
)), "bstrResponse differs from what was expected\n");
1155 SysFreeString(bstrResponse
);
1158 static void test_IXMLDOMDocument2(void)
1163 IXMLDOMDocument
*doc
;
1164 IXMLDOMDocument2
*doc2
;
1166 r
= CoCreateInstance( &CLSID_DOMDocument
, NULL
,
1167 CLSCTX_INPROC_SERVER
, &IID_IXMLDOMDocument
, (LPVOID
*)&doc
);
1171 str
= SysAllocString( szComplete4
);
1172 r
= IXMLDOMDocument_loadXML( doc
, str
, &b
);
1173 ok( r
== S_OK
, "loadXML failed\n");
1174 ok( b
== VARIANT_TRUE
, "failed to load XML string\n");
1175 SysFreeString( str
);
1177 r
= IXMLDOMDocument_QueryInterface( doc
, &IID_IXMLDOMDocument2
, (void**)&doc2
);
1178 ok( r
== S_OK
, "ret %08x\n", r
);
1179 ok( doc
== (IXMLDOMDocument
*)doc2
, "interfaces differ\n");
1180 IXMLDOMDocument2_Release( doc2
);
1181 IXMLDOMDocument_Release( doc
);
1188 r
= CoInitialize( NULL
);
1189 ok( r
== S_OK
, "failed to init com\n");
1195 test_getElementsByTagName();
1197 test_get_childNodes();
1200 test_IXMLDOMDocument2();