[MSXML3_WINETEST] Sync with Wine Staging 1.9.16. CORE-11866
[reactos.git] / rostests / winetests / msxml3 / xmlparser.c
1 /*
2 * XML Parser implementation
3 *
4 * Copyright 2011 Alistair Leslie-Hughes
5 *
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.
10 *
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.
15 *
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
19 */
20
21 #define WIN32_NO_STATUS
22 #define _INC_WINDOWS
23 #define COM_NO_WINDOWS_H
24
25 #define COBJMACROS
26 #define CONST_VTABLE
27
28 //#include <stdio.h>
29 //#include <assert.h>
30
31 #include <wine/test.h>
32
33 //#include "windows.h"
34 #include <ole2.h>
35 #include <xmlparser.h>
36
37 static HRESULT WINAPI nodefact_QueryInterface(IXMLNodeFactory *iface,
38 REFIID riid, void **ppvObject)
39 {
40 *ppvObject = NULL;
41
42 if (IsEqualGUID(riid, &IID_IXMLNodeFactory) ||
43 IsEqualGUID(riid, &IID_IUnknown))
44 *ppvObject = iface;
45 else
46 return E_NOINTERFACE;
47
48 return S_OK;
49 }
50
51 static ULONG WINAPI nodefact_AddRef(IXMLNodeFactory *iface)
52 {
53 return 2;
54 }
55
56 static ULONG WINAPI nodefact_Release(IXMLNodeFactory *iface)
57 {
58 return 1;
59 }
60
61 static HRESULT WINAPI nodefact_NotifyEvent(IXMLNodeFactory *iface,
62 IXMLNodeSource *pSource, XML_NODEFACTORY_EVENT iEvt)
63 {
64 return E_NOTIMPL;
65 }
66
67 static HRESULT WINAPI nodefact_BeginChildren(IXMLNodeFactory *iface,
68 IXMLNodeSource *pSource, XML_NODE_INFO *pNodeInfo)
69 {
70 return E_NOTIMPL;
71 }
72
73 static HRESULT WINAPI nodefact_EndChildren(IXMLNodeFactory *iface,
74 IXMLNodeSource *pSource, BOOL fEmpty, XML_NODE_INFO *pNodeInfo)
75 {
76 return E_NOTIMPL;
77 }
78
79 static HRESULT WINAPI nodefact_Error(IXMLNodeFactory *iface,
80 IXMLNodeSource *pSource, HRESULT hrErrorCode, USHORT cNumRecs,
81 XML_NODE_INFO **ppNodeInfo)
82 {
83 return E_NOTIMPL;
84 }
85
86 static HRESULT WINAPI nodefact_CreateNode(IXMLNodeFactory *iface, IXMLNodeSource *pSource,
87 PVOID pNodeParent, USHORT cNumRecs, XML_NODE_INFO **ppNodeInfo)
88 {
89 return E_NOTIMPL;
90 }
91
92 static const IXMLNodeFactoryVtbl nodefactoryVtbl =
93 {
94 nodefact_QueryInterface,
95 nodefact_AddRef,
96 nodefact_Release,
97 nodefact_NotifyEvent,
98 nodefact_BeginChildren,
99 nodefact_EndChildren,
100 nodefact_Error,
101 nodefact_CreateNode
102 };
103
104 static IXMLNodeFactory thenodefactory = { &nodefactoryVtbl };
105
106 static void create_test(void)
107 {
108 HRESULT hr;
109 IXMLParser *parser;
110 IXMLNodeFactory *nodefactory;
111 DWORD flags;
112
113 hr = CoCreateInstance(&CLSID_XMLParser30, NULL, CLSCTX_INPROC_SERVER, &IID_IXMLParser, (void**)&parser);
114 if (FAILED(hr))
115 {
116 win_skip("IXMLParser is not available (0x%08x)\n", hr);
117 return;
118 }
119
120 flags = IXMLParser_GetFlags(parser);
121 ok(flags == 0, "Expected 0 got %d\n", flags);
122
123 hr = IXMLParser_SetFlags(parser, XMLFLAG_SAX);
124 ok(hr == S_OK, "Expected S_OK got 0x%08x\n", hr);
125
126 flags = IXMLParser_GetFlags(parser);
127 ok(flags == XMLFLAG_SAX, "Expected 0 got %d\n", flags);
128
129 hr = IXMLParser_GetFactory(parser, NULL);
130 ok(hr == E_INVALIDARG, "Expected S_OK got 0x%08x\n", hr);
131
132 hr = IXMLParser_GetFactory(parser, &nodefactory);
133 ok(hr == S_OK, "Expected S_OK got 0x%08x\n", hr);
134 ok(nodefactory == NULL, "expected NULL\n");
135
136 hr = IXMLParser_SetFactory(parser, &thenodefactory);
137 ok(hr == S_OK, "Expected S_OK got 0x%08x\n", hr);
138
139 hr = IXMLParser_GetFactory(parser, &nodefactory);
140 ok(hr == S_OK, "Expected S_OK got 0x%08x\n", hr);
141 ok(nodefactory == &thenodefactory, "expected NULL\n");
142
143 hr = IXMLParser_SetInput(parser, NULL);
144 ok(hr == E_INVALIDARG, "Expected S_OK got 0x%08x\n", hr);
145
146 hr = IXMLParser_SetFactory(parser, NULL);
147 ok(hr == S_OK, "Expected S_OK got 0x%08x\n", hr);
148
149 hr = IXMLParser_SetFlags(parser, 0);
150 ok(hr == S_OK, "Expected S_OK got 0x%08x\n", hr);
151
152 hr = IXMLParser_GetParserState(parser);
153 ok(hr == XMLPARSER_IDLE, "got 0x%08x\n", hr);
154
155 IXMLParser_Release(parser);
156 }
157
158 START_TEST(xmlparser)
159 {
160 HRESULT hr;
161
162 hr = CoInitialize( NULL );
163 ok( hr == S_OK, "failed to init com\n");
164 if (hr != S_OK)
165 return;
166
167 create_test();
168
169 CoUninitialize();
170 }