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