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