Piotr Caban : oleacc: Add initial LresultFromObject tests.

Alexandre Julliard julliard at winehq.org
Fri Apr 25 14:15:25 CDT 2014


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Fri Apr 25 14:04:34 2014 +0200

oleacc: Add initial LresultFromObject tests.

---

 dlls/oleacc/tests/Makefile.in |    2 +-
 dlls/oleacc/tests/main.c      |  101 ++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 101 insertions(+), 2 deletions(-)

diff --git a/dlls/oleacc/tests/Makefile.in b/dlls/oleacc/tests/Makefile.in
index 47f3e57..374f15d 100644
--- a/dlls/oleacc/tests/Makefile.in
+++ b/dlls/oleacc/tests/Makefile.in
@@ -1,5 +1,5 @@
 TESTDLL   = oleacc.dll
-IMPORTS   = oleacc
+IMPORTS   = ole32 oleacc
 
 C_SRCS = \
 	main.c
diff --git a/dlls/oleacc/tests/main.c b/dlls/oleacc/tests/main.c
index db7ee9e..e3daefe 100644
--- a/dlls/oleacc/tests/main.c
+++ b/dlls/oleacc/tests/main.c
@@ -18,8 +18,13 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
-#include <oleacc.h>
+#define COBJMACROS
+
 #include "wine/test.h"
+#include <stdio.h>
+
+#include "initguid.h"
+#include <oleacc.h>
 
 static void test_getroletext(void)
 {
@@ -135,7 +140,101 @@ static void test_getroletext(void)
     }
 }
 
+static int Object_ref = 1;
+static HRESULT WINAPI Object_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
+{
+    if(IsEqualIID(riid, &IID_IUnknown)) {
+        *ppv = iface;
+        IUnknown_AddRef(iface);
+        return S_OK;
+    }
+    return E_NOINTERFACE;
+}
+
+static ULONG WINAPI Object_AddRef(IUnknown *iface)
+{
+    return InterlockedIncrement(&Object_ref);
+}
+
+static ULONG WINAPI Object_Release(IUnknown *iface)
+{
+    return InterlockedDecrement(&Object_ref);
+}
+
+static IUnknownVtbl ObjectVtbl = {
+    Object_QueryInterface,
+    Object_AddRef,
+    Object_Release
+};
+
+static IUnknown Object = {&ObjectVtbl};
+
+static void test_LresultFromObject(const char *name)
+{
+    PROCESS_INFORMATION proc;
+    STARTUPINFOA startup;
+    char cmdline[MAX_PATH];
+    IUnknown *unk;
+    HRESULT hres;
+    LRESULT lres;
+
+    lres = LresultFromObject(NULL, 0, 0);
+    ok(lres == E_INVALIDARG, "got %lx\n", lres);
+
+    hres = ObjectFromLresult(0, &IID_IUnknown, 0, (void**)&unk);
+    ok(hres==MAKE_HRESULT(SEVERITY_ERROR,FACILITY_WIN32,ERROR_INVALID_ADDRESS)
+            || hres==E_FAIL, "got %x\n", hres);
+    hres = ObjectFromLresult(0x10000, &IID_IUnknown, 0, (void**)&unk);
+    ok(hres==MAKE_HRESULT(SEVERITY_ERROR,FACILITY_WIN32,ERROR_INVALID_ADDRESS)
+            || hres==E_FAIL, "got %x\n", hres);
+
+    ok(Object_ref == 1, "Object_ref = %d\n", Object_ref);
+    lres = LresultFromObject(&IID_IUnknown, 0, &Object);
+    ok(SUCCEEDED(lres), "got %lx\n", lres);
+    ok(Object_ref > 1, "Object_ref = %d\n", Object_ref);
+
+    hres = ObjectFromLresult(lres, &IID_IUnknown, 0, (void**)&unk);
+    ok(hres == S_OK, "hres = %x\n", hres);
+    ok(unk == &Object, "unk != &Object\n");
+    IUnknown_Release(unk);
+    ok(Object_ref == 1, "Object_ref = %d\n", Object_ref);
+
+    lres = LresultFromObject(&IID_IUnknown, 0, &Object);
+    ok(SUCCEEDED(lres), "got %lx\n", lres);
+    ok(Object_ref > 1, "Object_ref = %d\n", Object_ref);
+
+    sprintf(cmdline, "\"%s\" main ObjectFromLresult %lx", name, lres);
+    memset(&startup, 0, sizeof(startup));
+    startup.cb = sizeof(startup);
+    CreateProcessA(NULL, cmdline, NULL, NULL, FALSE, 0, NULL, NULL, &startup, &proc);
+    winetest_wait_child_process(proc.hProcess);
+    ok(Object_ref == 1, "Object_ref = %d\n", Object_ref);
+}
+
 START_TEST(main)
 {
+    int argc;
+    char **argv;
+
+    CoInitializeEx(NULL, COINIT_MULTITHREADED);
+
+    argc = winetest_get_mainargs(&argv);
+    if(argc == 4 && !strcmp(argv[2], "ObjectFromLresult")) {
+        IUnknown *unk;
+        HRESULT hres;
+        LRESULT lres;
+
+        sscanf(argv[3], "%lx", &lres);
+        hres = ObjectFromLresult(lres, &IID_IUnknown, 0, (void**)&unk);
+        ok(hres == S_OK, "hres = %x\n", hres);
+        IUnknown_Release(unk);
+
+        CoUninitialize();
+        return;
+    }
+
     test_getroletext();
+    test_LresultFromObject(argv[0]);
+
+    CoUninitialize();
 }




More information about the wine-cvs mailing list