msxml3: Add stub ISAXAttributes for MXAttributes implementation.

This commit is contained in:
Nikolay Sivov 2012-03-09 11:55:03 +03:00 committed by Alexandre Julliard
parent d69afaa95d
commit c2d792475b
2 changed files with 175 additions and 16 deletions

View File

@ -122,6 +122,7 @@ typedef struct
{
DispatchEx dispex;
IMXAttributes IMXAttributes_iface;
ISAXAttributes ISAXAttributes_iface;
LONG ref;
} mxattributes;
@ -130,6 +131,11 @@ static inline mxattributes *impl_from_IMXAttributes( IMXAttributes *iface )
return CONTAINING_RECORD(iface, mxattributes, IMXAttributes_iface);
}
static inline mxattributes *impl_from_ISAXAttributes( ISAXAttributes *iface )
{
return CONTAINING_RECORD(iface, mxattributes, ISAXAttributes_iface);
}
static xml_encoding parse_encoding_name(const WCHAR *encoding)
{
static const WCHAR utf8W[] = {'U','T','F','-','8',0};
@ -1463,6 +1469,10 @@ static HRESULT WINAPI MXAttributes_QueryInterface(IMXAttributes *iface, REFIID r
{
*ppObj = iface;
}
else if ( IsEqualGUID( riid, &IID_ISAXAttributes ))
{
*ppObj = &This->ISAXAttributes_iface;
}
else if (dispex_query_interface(&This->dispex, riid, ppObj))
{
return *ppObj ? S_OK : E_NOINTERFACE;
@ -1639,6 +1649,149 @@ static const IMXAttributesVtbl MXAttributesVtbl = {
MXAttributes_setValue
};
static HRESULT WINAPI SAXAttributes_QueryInterface(ISAXAttributes *iface, REFIID riid, void **ppObj)
{
mxattributes *This = impl_from_ISAXAttributes( iface );
return IMXAttributes_QueryInterface(&This->IMXAttributes_iface, riid, ppObj);
}
static ULONG WINAPI SAXAttributes_AddRef(ISAXAttributes *iface)
{
mxattributes *This = impl_from_ISAXAttributes( iface );
return IMXAttributes_AddRef(&This->IMXAttributes_iface);
}
static ULONG WINAPI SAXAttributes_Release(ISAXAttributes *iface)
{
mxattributes *This = impl_from_ISAXAttributes( iface );
return IMXAttributes_Release(&This->IMXAttributes_iface);
}
static HRESULT WINAPI SAXAttributes_getLength(ISAXAttributes *iface, int *length)
{
mxattributes *This = impl_from_ISAXAttributes( iface );
FIXME("(%p)->(%p): stub\n", This, length);
return E_NOTIMPL;
}
static HRESULT WINAPI SAXAttributes_getURI(ISAXAttributes *iface, int nIndex, const WCHAR **pUrl,
int *pUriSize)
{
mxattributes *This = impl_from_ISAXAttributes( iface );
FIXME("(%p)->(%d %p %p): stub\n", This, nIndex, pUrl, pUriSize);
return E_NOTIMPL;
}
static HRESULT WINAPI SAXAttributes_getLocalName(ISAXAttributes *iface, int nIndex, const WCHAR **localName,
int *length)
{
mxattributes *This = impl_from_ISAXAttributes( iface );
FIXME("(%p)->(%d %p %p): stub\n", This, nIndex, localName, length);
return E_NOTIMPL;
}
static HRESULT WINAPI SAXAttributes_getQName(ISAXAttributes *iface, int index, const WCHAR **qname, int *length)
{
mxattributes *This = impl_from_ISAXAttributes( iface );
FIXME("(%p)->(%d %p %p): stub\n", This, index, qname, length);
return E_NOTIMPL;
}
static HRESULT WINAPI SAXAttributes_getName(ISAXAttributes *iface, int nIndex, const WCHAR **pUri, int *pUriLength,
const WCHAR ** pLocalName, int * pLocalNameSize, const WCHAR ** pQName, int * pQNameLength)
{
mxattributes *This = impl_from_ISAXAttributes( iface );
FIXME("(%p)->(%d %p %p %p %p %p %p): stub\n", This, nIndex, pUri, pUriLength, pLocalName, pLocalNameSize,
pQName, pQNameLength);
return E_NOTIMPL;
}
static HRESULT WINAPI SAXAttributes_getIndexFromName(ISAXAttributes *iface, const WCHAR * pUri, int cUriLength,
const WCHAR * pLocalName, int cocalNameLength, int * index)
{
mxattributes *This = impl_from_ISAXAttributes( iface );
FIXME("(%p)->(%s:%d %s:%d %p): stub\n", This, debugstr_wn(pUri, cUriLength), cUriLength,
debugstr_wn(pLocalName, cocalNameLength), cocalNameLength, index);
return E_NOTIMPL;
}
static HRESULT WINAPI SAXAttributes_getIndexFromQName(ISAXAttributes *iface, const WCHAR * pQName,
int nQNameLength, int * index)
{
mxattributes *This = impl_from_ISAXAttributes( iface );
FIXME("(%p)->(%s:%d %p): stub\n", This, debugstr_wn(pQName, nQNameLength), nQNameLength, index);
return E_NOTIMPL;
}
static HRESULT WINAPI SAXAttributes_getType(ISAXAttributes *iface, int nIndex, const WCHAR ** pType,
int * pTypeLength)
{
mxattributes *This = impl_from_ISAXAttributes( iface );
FIXME("(%p)->(%d %p %p): stub\n", This, nIndex, pType, pTypeLength);
return E_NOTIMPL;
}
static HRESULT WINAPI SAXAttributes_getTypeFromName(ISAXAttributes *iface, const WCHAR * pUri, int nUri,
const WCHAR * pLocalName, int nLocalName, const WCHAR ** pType, int * nType)
{
mxattributes *This = impl_from_ISAXAttributes( iface );
FIXME("(%p)->(%s:%d %s:%d %p %p): stub\n", This, debugstr_wn(pUri, nUri), nUri,
debugstr_wn(pLocalName, nLocalName), nLocalName, pType, nType);
return E_NOTIMPL;
}
static HRESULT WINAPI SAXAttributes_getTypeFromQName(ISAXAttributes *iface, const WCHAR * pQName,
int nQName, const WCHAR ** pType, int * nType)
{
mxattributes *This = impl_from_ISAXAttributes( iface );
FIXME("(%p)->(%s:%d %p %p): stub\n", This, debugstr_wn(pQName, nQName), nQName, pType, nType);
return E_NOTIMPL;
}
static HRESULT WINAPI SAXAttributes_getValue(ISAXAttributes *iface, int nIndex, const WCHAR ** pValue,
int * nValue)
{
mxattributes *This = impl_from_ISAXAttributes( iface );
FIXME("(%p)->(%d %p %p): stub\n", This, nIndex, pValue, nValue);
return E_NOTIMPL;
}
static HRESULT WINAPI SAXAttributes_getValueFromName(ISAXAttributes *iface, const WCHAR * pUri,
int nUri, const WCHAR * pLocalName, int nLocalName, const WCHAR ** pValue, int * nValue)
{
mxattributes *This = impl_from_ISAXAttributes( iface );
FIXME("(%p)->(%s:%d %s:%d %p %p): stub\n", This, debugstr_wn(pUri, nUri), nUri,
debugstr_wn(pLocalName, nLocalName), nLocalName, pValue, nValue);
return E_NOTIMPL;
}
static HRESULT WINAPI SAXAttributes_getValueFromQName(ISAXAttributes *iface, const WCHAR * pQName,
int nQName, const WCHAR ** pValue, int * nValue)
{
mxattributes *This = impl_from_ISAXAttributes( iface );
FIXME("(%p)->(%s:%d %p %p): stub\n", This, debugstr_wn(pQName, nQName), nQName, pValue, nValue);
return E_NOTIMPL;
}
static const ISAXAttributesVtbl SAXAttributesVtbl = {
SAXAttributes_QueryInterface,
SAXAttributes_AddRef,
SAXAttributes_Release,
SAXAttributes_getLength,
SAXAttributes_getURI,
SAXAttributes_getLocalName,
SAXAttributes_getQName,
SAXAttributes_getName,
SAXAttributes_getIndexFromName,
SAXAttributes_getIndexFromQName,
SAXAttributes_getType,
SAXAttributes_getTypeFromName,
SAXAttributes_getTypeFromQName,
SAXAttributes_getValue,
SAXAttributes_getValueFromName,
SAXAttributes_getValueFromQName
};
static const tid_t mxattrs_iface_tids[] = {
IMXAttributes_tid,
0
@ -1662,6 +1815,7 @@ HRESULT SAXAttributes_create(MSXML_VERSION version, IUnknown *outer, void **ppOb
return E_OUTOFMEMORY;
This->IMXAttributes_iface.lpVtbl = &MXAttributesVtbl;
This->ISAXAttributes_iface.lpVtbl = &SAXAttributesVtbl;
This->ref = 1;
*ppObj = &This->IMXAttributes_iface;

View File

@ -3313,40 +3313,37 @@ static void test_mxattr_addAttribute(void)
EXPECT_HR(hr, S_OK);
hr = IMXAttributes_QueryInterface(mxattr, &IID_ISAXAttributes, (void**)&saxattr);
todo_wine
EXPECT_HR(hr, S_OK);
if (hr != S_OK)
{
IMXAttributes_Release(mxattr);
table++;
i++;
continue;
}
/* SAXAttributes30 and SAXAttributes60 both crash on this test */
if (IsEqualGUID(table->clsid, &CLSID_SAXAttributes) ||
IsEqualGUID(table->clsid, &CLSID_SAXAttributes30))
{
hr = ISAXAttributes_getLength(saxattr, NULL);
todo_wine
EXPECT_HR(hr, E_POINTER);
}
len = -1;
hr = ISAXAttributes_getLength(saxattr, &len);
todo_wine {
EXPECT_HR(hr, S_OK);
ok(len == 0, "got %d\n", len);
}
hr = IMXAttributes_addAttribute(mxattr, _bstr_(table->uri), _bstr_(table->local),
_bstr_(table->qname), _bstr_(table->type), _bstr_(table->value));
todo_wine
ok(hr == table->hr, "%d: got 0x%08x, expected 0x%08x\n", i, hr, table->hr);
len = -1;
hr = ISAXAttributes_getLength(saxattr, &len);
todo_wine {
EXPECT_HR(hr, S_OK);
if (table->hr == S_OK)
ok(len == 1, "%d: got %d length, expected 0\n", i, len);
else
ok(len == 0, "%d: got %d length, expected 1\n", i, len);
}
ISAXAttributes_Release(saxattr);
IMXAttributes_Release(mxattr);
@ -3371,56 +3368,64 @@ static void test_mxattr_clear(void)
EXPECT_HR(hr, S_OK);
hr = IMXAttributes_QueryInterface(mxattr, &IID_ISAXAttributes, (void**)&saxattr);
todo_wine
EXPECT_HR(hr, S_OK);
if (hr != S_OK)
{
IMXAttributes_Release(mxattr);
return;
}
hr = ISAXAttributes_getQName(saxattr, 0, NULL, NULL);
todo_wine
EXPECT_HR(hr, E_INVALIDARG);
hr = ISAXAttributes_getQName(saxattr, 0, &ptr, &len);
todo_wine
EXPECT_HR(hr, E_INVALIDARG);
hr = IMXAttributes_addAttribute(mxattr, _bstr_("uri"), _bstr_("local"),
_bstr_("qname"), _bstr_("type"), _bstr_("value"));
todo_wine
EXPECT_HR(hr, S_OK);
len = -1;
hr = ISAXAttributes_getLength(saxattr, &len);
todo_wine {
EXPECT_HR(hr, S_OK);
ok(len == 1, "got %d\n", len);
}
len = -1;
hr = ISAXAttributes_getQName(saxattr, 0, NULL, &len);
todo_wine
EXPECT_HR(hr, E_POINTER);
ok(len == -1, "got %d\n", len);
ptr = (void*)0xdeadbeef;
hr = ISAXAttributes_getQName(saxattr, 0, &ptr, NULL);
todo_wine
EXPECT_HR(hr, E_POINTER);
ok(ptr == (void*)0xdeadbeef, "got %p\n", ptr);
len = 0;
hr = ISAXAttributes_getQName(saxattr, 0, &ptr, &len);
todo_wine {
EXPECT_HR(hr, S_OK);
ok(len == 5, "got %d\n", len);
if (hr == S_OK)
ok(!lstrcmpW(ptr, _bstr_("qname")), "got %s\n", wine_dbgstr_w(ptr));
}
hr = IMXAttributes_clear(mxattr);
todo_wine
EXPECT_HR(hr, S_OK);
len = -1;
hr = ISAXAttributes_getLength(saxattr, &len);
todo_wine {
EXPECT_HR(hr, S_OK);
ok(len == 0, "got %d\n", len);
}
len = -1;
ptr = (void*)0xdeadbeef;
hr = ISAXAttributes_getQName(saxattr, 0, &ptr, &len);
todo_wine
EXPECT_HR(hr, E_INVALIDARG);
ok(len == -1, "got %d\n", len);
ok(ptr == (void*)0xdeadbeef, "got %p\n", ptr);