msxml3: Fix collection index based support for IXMLDOMSelection.

oldstable
Nikolay Sivov 2011-11-04 19:00:47 +03:00 committed by Alexandre Julliard
parent 70e0290dcf
commit 2ce0f8fd73
2 changed files with 19 additions and 8 deletions

View File

@ -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;

View File

@ -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);