msxml3: Implement IXMLParser Get/Set Factory.
This commit is contained in:
parent
461951e3d4
commit
850d077a4b
|
@ -28,10 +28,81 @@
|
||||||
#include "xmlparser.h"
|
#include "xmlparser.h"
|
||||||
#include "wine/test.h"
|
#include "wine/test.h"
|
||||||
|
|
||||||
|
|
||||||
|
static HRESULT WINAPI nodefact_QueryInterface(IXMLNodeFactory *iface,
|
||||||
|
REFIID riid, void **ppvObject)
|
||||||
|
{
|
||||||
|
*ppvObject = NULL;
|
||||||
|
|
||||||
|
if (IsEqualGUID(riid, &IID_IXMLNodeFactory) ||
|
||||||
|
IsEqualGUID(riid, &IID_IUnknown))
|
||||||
|
*ppvObject = iface;
|
||||||
|
else
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI nodefact_AddRef(IXMLNodeFactory *iface)
|
||||||
|
{
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI nodefact_Release(IXMLNodeFactory *iface)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI nodefact_NotifyEvent(IXMLNodeFactory *iface,
|
||||||
|
IXMLNodeSource *pSource, XML_NODEFACTORY_EVENT iEvt)
|
||||||
|
{
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI nodefact_BeginChildren(IXMLNodeFactory *iface,
|
||||||
|
IXMLNodeSource *pSource, XML_NODE_INFO *pNodeInfo)
|
||||||
|
{
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI nodefact_EndChildren(IXMLNodeFactory *iface,
|
||||||
|
IXMLNodeSource *pSource, BOOL fEmpty, XML_NODE_INFO *pNodeInfo)
|
||||||
|
{
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI nodefact_Error(IXMLNodeFactory *iface,
|
||||||
|
IXMLNodeSource *pSource, HRESULT hrErrorCode, USHORT cNumRecs,
|
||||||
|
XML_NODE_INFO **ppNodeInfo)
|
||||||
|
{
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI nodefact_CreateNode(IXMLNodeFactory *iface, IXMLNodeSource *pSource,
|
||||||
|
PVOID pNodeParent, USHORT cNumRecs, XML_NODE_INFO **ppNodeInfo)
|
||||||
|
{
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const IXMLNodeFactoryVtbl nodefactoryVtbl =
|
||||||
|
{
|
||||||
|
nodefact_QueryInterface,
|
||||||
|
nodefact_AddRef,
|
||||||
|
nodefact_Release,
|
||||||
|
nodefact_NotifyEvent,
|
||||||
|
nodefact_BeginChildren,
|
||||||
|
nodefact_EndChildren,
|
||||||
|
nodefact_Error,
|
||||||
|
nodefact_CreateNode
|
||||||
|
};
|
||||||
|
|
||||||
|
static IXMLNodeFactory thenodefactory = { &nodefactoryVtbl };
|
||||||
|
|
||||||
static void create_test(void)
|
static void create_test(void)
|
||||||
{
|
{
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
IXMLParser *parser;
|
IXMLParser *parser;
|
||||||
|
IXMLNodeFactory *nodefactory;
|
||||||
DWORD flags;
|
DWORD flags;
|
||||||
|
|
||||||
hr = CoCreateInstance(&CLSID_XMLParser30, NULL, CLSCTX_INPROC_SERVER, &IID_IXMLParser, (void**)&parser);
|
hr = CoCreateInstance(&CLSID_XMLParser30, NULL, CLSCTX_INPROC_SERVER, &IID_IXMLParser, (void**)&parser);
|
||||||
|
@ -50,6 +121,23 @@ static void create_test(void)
|
||||||
flags = IXMLParser_GetFlags(parser);
|
flags = IXMLParser_GetFlags(parser);
|
||||||
ok(flags == XMLFLAG_SAX, "Expected 0 got %d\n", flags);
|
ok(flags == XMLFLAG_SAX, "Expected 0 got %d\n", flags);
|
||||||
|
|
||||||
|
hr = IXMLParser_GetFactory(parser, NULL);
|
||||||
|
ok(hr == E_INVALIDARG, "Expected S_OK got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
hr = IXMLParser_GetFactory(parser, &nodefactory);
|
||||||
|
ok(hr == S_OK, "Expected S_OK got 0x%08x\n", hr);
|
||||||
|
ok(nodefactory == NULL, "expected NULL\n");
|
||||||
|
|
||||||
|
hr = IXMLParser_SetFactory(parser, &thenodefactory);
|
||||||
|
ok(hr == S_OK, "Expected S_OK got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
hr = IXMLParser_GetFactory(parser, &nodefactory);
|
||||||
|
ok(hr == S_OK, "Expected S_OK got 0x%08x\n", hr);
|
||||||
|
ok(nodefactory == &thenodefactory, "expected NULL\n");
|
||||||
|
|
||||||
|
hr = IXMLParser_SetFactory(parser, NULL);
|
||||||
|
ok(hr == S_OK, "Expected S_OK got 0x%08x\n", hr);
|
||||||
|
|
||||||
hr = IXMLParser_SetFlags(parser, 0);
|
hr = IXMLParser_SetFlags(parser, 0);
|
||||||
ok(hr == S_OK, "Expected S_OK got 0x%08x\n", hr);
|
ok(hr == S_OK, "Expected S_OK got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(msxml);
|
||||||
typedef struct _xmlparser
|
typedef struct _xmlparser
|
||||||
{
|
{
|
||||||
IXMLParser IXMLParser_iface;
|
IXMLParser IXMLParser_iface;
|
||||||
|
IXMLNodeFactory *nodefactory;
|
||||||
LONG ref;
|
LONG ref;
|
||||||
|
|
||||||
int flags;
|
int flags;
|
||||||
|
@ -95,6 +96,9 @@ static ULONG WINAPI xmlparser_Release(IXMLParser* iface)
|
||||||
TRACE("(%p)->(%d)\n", This, ref);
|
TRACE("(%p)->(%d)\n", This, ref);
|
||||||
if ( ref == 0 )
|
if ( ref == 0 )
|
||||||
{
|
{
|
||||||
|
if(This->nodefactory)
|
||||||
|
IXMLNodeFactory_Release(This->nodefactory);
|
||||||
|
|
||||||
heap_free( This );
|
heap_free( This );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,18 +110,33 @@ static HRESULT WINAPI xmlparser_SetFactory(IXMLParser *iface, IXMLNodeFactory *p
|
||||||
{
|
{
|
||||||
xmlparser *This = impl_from_IXMLParser( iface );
|
xmlparser *This = impl_from_IXMLParser( iface );
|
||||||
|
|
||||||
FIXME("(%p %p)\n", This, pNodeFactory);
|
TRACE("(%p %p)\n", This, pNodeFactory);
|
||||||
|
|
||||||
return E_NOTIMPL;
|
if(This->nodefactory)
|
||||||
|
IXMLNodeFactory_Release(This->nodefactory);
|
||||||
|
|
||||||
|
This->nodefactory = pNodeFactory;
|
||||||
|
if(This->nodefactory)
|
||||||
|
IXMLNodeFactory_AddRef(This->nodefactory);
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI xmlparser_GetFactory(IXMLParser *iface, IXMLNodeFactory **ppNodeFactory)
|
static HRESULT WINAPI xmlparser_GetFactory(IXMLParser *iface, IXMLNodeFactory **ppNodeFactory)
|
||||||
{
|
{
|
||||||
xmlparser *This = impl_from_IXMLParser( iface );
|
xmlparser *This = impl_from_IXMLParser( iface );
|
||||||
|
|
||||||
FIXME("(%p, %p)\n", This, ppNodeFactory);
|
TRACE("(%p, %p)\n", This, ppNodeFactory);
|
||||||
|
|
||||||
return E_NOTIMPL;
|
if(!ppNodeFactory)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
*ppNodeFactory = This->nodefactory;
|
||||||
|
|
||||||
|
if(*ppNodeFactory)
|
||||||
|
IXMLNodeFactory_AddRef(*ppNodeFactory);
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI xmlparser_Abort(IXMLParser *iface, BSTR bstrErrorInfo)
|
static HRESULT WINAPI xmlparser_Abort(IXMLParser *iface, BSTR bstrErrorInfo)
|
||||||
|
@ -415,6 +434,7 @@ HRESULT XMLParser_create(IUnknown* pUnkOuter, void**ppObj)
|
||||||
return E_OUTOFMEMORY;
|
return E_OUTOFMEMORY;
|
||||||
|
|
||||||
This->IXMLParser_iface.lpVtbl = &xmlparser_vtbl;
|
This->IXMLParser_iface.lpVtbl = &xmlparser_vtbl;
|
||||||
|
This->nodefactory = NULL;
|
||||||
This->flags = 0;
|
This->flags = 0;
|
||||||
This->ref = 1;
|
This->ref = 1;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue