Nikolay Sivov : msxml3: Fix collection index based support for IXMLDOMSelection.
Alexandre Julliard
julliard at winehq.org
Mon Nov 7 13:30:40 CST 2011
Module: wine
Branch: master
Commit: 2ce0f8fd735650f230b6118b6795258e58c85c86
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2ce0f8fd735650f230b6118b6795258e58c85c86
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Fri Nov 4 19:00:47 2011 +0300
msxml3: Fix collection index based support for IXMLDOMSelection.
---
dlls/msxml3/selection.c | 9 +--------
dlls/msxml3/tests/domdoc.c | 18 ++++++++++++++++++
2 files changed, 19 insertions(+), 8 deletions(-)
diff --git a/dlls/msxml3/selection.c b/dlls/msxml3/selection.c
index 274e239..18b82bb 100644
--- a/dlls/msxml3/selection.c
+++ b/dlls/msxml3/selection.c
@@ -185,13 +185,10 @@ static HRESULT WINAPI domselection_GetTypeInfo(
ITypeInfo** ppTInfo )
{
domselection *This = impl_from_IXMLDOMSelection( iface );
- HRESULT hr;
TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
- hr = get_typeinfo(IXMLDOMSelection_tid, ppTInfo);
-
- return hr;
+ return get_typeinfo(IXMLDOMSelection_tid, ppTInfo);
}
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)
{
- domselection *This = impl_from_IXMLDOMSelection( (IXMLDOMSelection*)iface );
WCHAR *ptr;
int idx = 0;
@@ -615,9 +611,6 @@ static HRESULT domselection_get_dispid(IUnknown *iface, BSTR name, DWORD flags,
if(*ptr)
return DISP_E_UNKNOWNNAME;
- if(idx >= xmlXPathNodeSetGetLength(This->result->nodesetval))
- return DISP_E_UNKNOWNNAME;
-
*dispid = DISPID_DOM_COLLECTION_BASE + idx;
TRACE("ret %x\n", *dispid);
return S_OK;
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index efd8ccc..a883da0 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -9999,10 +9999,12 @@ static void test_selection(void)
IEnumVARIANT *enum1, *enum2, *enum3;
IXMLDOMNodeList *list;
IXMLDOMDocument *doc;
+ IDispatchEx *dispex;
IXMLDOMNode *node;
IDispatch *disp;
VARIANT_BOOL b;
HRESULT hr;
+ DISPID did;
VARIANT v;
BSTR name;
ULONG ret;
@@ -10020,6 +10022,22 @@ static void test_selection(void)
EXPECT_HR(hr, S_OK);
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 */
enum1 = NULL;
hr = IXMLDOMSelection_QueryInterface(selection, &IID_IEnumVARIANT, (void**)&enum1);
More information about the wine-cvs
mailing list