Nikolay Sivov : scrrun: Store compare method for dictionary.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Feb 24 10:33:23 CST 2015


Module: wine
Branch: master
Commit: 075fe10ba5bc9e882acc7944697286e6cafcdda2
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=075fe10ba5bc9e882acc7944697286e6cafcdda2

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Tue Feb 24 11:28:41 2015 +0300

scrrun: Store compare method for dictionary.

---

 dlls/scrrun/dictionary.c       | 18 ++++++++------
 dlls/scrrun/tests/dictionary.c | 55 ++++++++++++++++++++++++++++++++++++++----
 2 files changed, 61 insertions(+), 12 deletions(-)

diff --git a/dlls/scrrun/dictionary.c b/dlls/scrrun/dictionary.c
index 4fcaedd..c1122fa 100644
--- a/dlls/scrrun/dictionary.c
+++ b/dlls/scrrun/dictionary.c
@@ -34,8 +34,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(scrrun);
 typedef struct
 {
     IDictionary IDictionary_iface;
-
     LONG ref;
+
+    CompareMethod method;
 } dictionary;
 
 static inline dictionary *impl_from_IDictionary(IDictionary *iface)
@@ -260,22 +261,24 @@ static HRESULT WINAPI dictionary_RemoveAll(IDictionary *iface)
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI dictionary_put_CompareMode(IDictionary *iface, CompareMethod pcomp)
+static HRESULT WINAPI dictionary_put_CompareMode(IDictionary *iface, CompareMethod method)
 {
     dictionary *This = impl_from_IDictionary(iface);
 
-    FIXME("(%p)->()\n", This);
+    TRACE("(%p)->(%d)\n", This, method);
 
-    return E_NOTIMPL;
+    This->method = method;
+    return S_OK;
 }
 
-static HRESULT WINAPI dictionary_get_CompareMode(IDictionary *iface, CompareMethod *pcomp)
+static HRESULT WINAPI dictionary_get_CompareMode(IDictionary *iface, CompareMethod *method)
 {
     dictionary *This = impl_from_IDictionary(iface);
 
-    FIXME("(%p)->(%p)\n", This, pcomp);
+    TRACE("(%p)->(%p)\n", This, method);
 
-    return E_NOTIMPL;
+    *method = This->method;
+    return S_OK;
 }
 
 static HRESULT WINAPI dictionary__NewEnum(IDictionary *iface, IUnknown **ppunk)
@@ -336,6 +339,7 @@ HRESULT WINAPI Dictionary_CreateInstance(IClassFactory *factory,IUnknown *outer,
 
     This->IDictionary_iface.lpVtbl = &dictionary_vtbl;
     This->ref = 1;
+    This->method = BinaryCompare;
 
     *obj = &This->IDictionary_iface;
 
diff --git a/dlls/scrrun/tests/dictionary.c b/dlls/scrrun/tests/dictionary.c
index e28bbb1..cad387d 100644
--- a/dlls/scrrun/tests/dictionary.c
+++ b/dlls/scrrun/tests/dictionary.c
@@ -44,10 +44,7 @@ static void test_interfaces(void)
 
     hr = CoCreateInstance(&CLSID_Dictionary, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
             &IID_IDispatch, (void**)&disp);
-    if(FAILED(hr)) {
-        win_skip("Could not create FileSystem object: %08x\n", hr);
-        return;
-    }
+    ok(hr == S_OK, "got 0x%08x\n", hr);
 
     VariantInit(&key);
     VariantInit(&value);
@@ -91,12 +88,60 @@ static void test_interfaces(void)
     IDispatch_Release(disp);
 }
 
+static void test_comparemode(void)
+{
+    CompareMethod method;
+    IDictionary *dict;
+    HRESULT hr;
+
+    hr = CoCreateInstance(&CLSID_Dictionary, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
+            &IID_IDictionary, (void**)&dict);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+if (0) /* crashes on native */
+    hr = IDictionary_get_CompareMode(dict, NULL);
+
+    method = 10;
+    hr = IDictionary_get_CompareMode(dict, &method);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    ok(method == BinaryCompare, "got %d\n", method);
+
+    /* invalid mode value is not checked */
+    hr = IDictionary_put_CompareMode(dict, 10);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+    hr = IDictionary_get_CompareMode(dict, &method);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    ok(method == 10, "got %d\n", method);
+
+    hr = IDictionary_put_CompareMode(dict, DatabaseCompare);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+    hr = IDictionary_get_CompareMode(dict, &method);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    ok(method == DatabaseCompare, "got %d\n", method);
+
+    IDictionary_Release(dict);
+}
+
 START_TEST(dictionary)
 {
+    IDispatch *disp;
+    HRESULT hr;
+
     CoInitialize(NULL);
 
-    test_interfaces();
+    hr = CoCreateInstance(&CLSID_Dictionary, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
+            &IID_IDispatch, (void**)&disp);
+    if(FAILED(hr)) {
+        win_skip("Dictionary object is not supported: %08x\n", hr);
+        CoUninitialize();
+        return;
+    }
+    IDispatch_Release(disp);
 
+    test_interfaces();
+    test_comparemode();
 
     CoUninitialize();
 }




More information about the wine-cvs mailing list