msxml3: Fix collection index based support for IXMLDOMSelection.
This commit is contained in:
parent
70e0290dcf
commit
2ce0f8fd73
|
@ -185,13 +185,10 @@ static HRESULT WINAPI domselection_GetTypeInfo(
|
||||||
ITypeInfo** ppTInfo )
|
ITypeInfo** ppTInfo )
|
||||||
{
|
{
|
||||||
domselection *This = impl_from_IXMLDOMSelection( iface );
|
domselection *This = impl_from_IXMLDOMSelection( iface );
|
||||||
HRESULT hr;
|
|
||||||
|
|
||||||
TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
|
TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
|
||||||
|
|
||||||
hr = get_typeinfo(IXMLDOMSelection_tid, ppTInfo);
|
return get_typeinfo(IXMLDOMSelection_tid, ppTInfo);
|
||||||
|
|
||||||
return hr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI domselection_GetIDsOfNames(
|
static HRESULT WINAPI domselection_GetIDsOfNames(
|
||||||
|
@ -606,7 +603,6 @@ static HRESULT create_enumvariant(IXMLDOMSelection *selection, BOOL own, IUnknow
|
||||||
|
|
||||||
static HRESULT domselection_get_dispid(IUnknown *iface, BSTR name, DWORD flags, DISPID *dispid)
|
static HRESULT domselection_get_dispid(IUnknown *iface, BSTR name, DWORD flags, DISPID *dispid)
|
||||||
{
|
{
|
||||||
domselection *This = impl_from_IXMLDOMSelection( (IXMLDOMSelection*)iface );
|
|
||||||
WCHAR *ptr;
|
WCHAR *ptr;
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
|
|
||||||
|
@ -615,9 +611,6 @@ static HRESULT domselection_get_dispid(IUnknown *iface, BSTR name, DWORD flags,
|
||||||
if(*ptr)
|
if(*ptr)
|
||||||
return DISP_E_UNKNOWNNAME;
|
return DISP_E_UNKNOWNNAME;
|
||||||
|
|
||||||
if(idx >= xmlXPathNodeSetGetLength(This->result->nodesetval))
|
|
||||||
return DISP_E_UNKNOWNNAME;
|
|
||||||
|
|
||||||
*dispid = DISPID_DOM_COLLECTION_BASE + idx;
|
*dispid = DISPID_DOM_COLLECTION_BASE + idx;
|
||||||
TRACE("ret %x\n", *dispid);
|
TRACE("ret %x\n", *dispid);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
|
|
@ -9999,10 +9999,12 @@ static void test_selection(void)
|
||||||
IEnumVARIANT *enum1, *enum2, *enum3;
|
IEnumVARIANT *enum1, *enum2, *enum3;
|
||||||
IXMLDOMNodeList *list;
|
IXMLDOMNodeList *list;
|
||||||
IXMLDOMDocument *doc;
|
IXMLDOMDocument *doc;
|
||||||
|
IDispatchEx *dispex;
|
||||||
IXMLDOMNode *node;
|
IXMLDOMNode *node;
|
||||||
IDispatch *disp;
|
IDispatch *disp;
|
||||||
VARIANT_BOOL b;
|
VARIANT_BOOL b;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
DISPID did;
|
||||||
VARIANT v;
|
VARIANT v;
|
||||||
BSTR name;
|
BSTR name;
|
||||||
ULONG ret;
|
ULONG ret;
|
||||||
|
@ -10020,6 +10022,22 @@ static void test_selection(void)
|
||||||
EXPECT_HR(hr, S_OK);
|
EXPECT_HR(hr, S_OK);
|
||||||
IXMLDOMSelection_Release(selection);
|
IXMLDOMSelection_Release(selection);
|
||||||
|
|
||||||
|
/* collection disp id */
|
||||||
|
hr = IXMLDOMSelection_QueryInterface(selection, &IID_IDispatchEx, (void**)&dispex);
|
||||||
|
EXPECT_HR(hr, S_OK);
|
||||||
|
did = 0;
|
||||||
|
hr = IDispatchEx_GetDispID(dispex, _bstr_("0"), 0, &did);
|
||||||
|
EXPECT_HR(hr, S_OK);
|
||||||
|
ok(did == DISPID_DOM_COLLECTION_BASE, "got %d\n", did);
|
||||||
|
len = 0;
|
||||||
|
hr = IXMLDOMSelection_get_length(selection, &len);
|
||||||
|
EXPECT_HR(hr, S_OK);
|
||||||
|
ok(len == 1, "got %d\n", len);
|
||||||
|
hr = IDispatchEx_GetDispID(dispex, _bstr_("10"), 0, &did);
|
||||||
|
EXPECT_HR(hr, S_OK);
|
||||||
|
ok(did == DISPID_DOM_COLLECTION_BASE+10, "got %d\n", did);
|
||||||
|
IDispatchEx_Release(dispex);
|
||||||
|
|
||||||
/* IEnumVARIANT tests */
|
/* IEnumVARIANT tests */
|
||||||
enum1 = NULL;
|
enum1 = NULL;
|
||||||
hr = IXMLDOMSelection_QueryInterface(selection, &IID_IEnumVARIANT, (void**)&enum1);
|
hr = IXMLDOMSelection_QueryInterface(selection, &IID_IEnumVARIANT, (void**)&enum1);
|
||||||
|
|
Loading…
Reference in New Issue