Robert Shearman : ole32: Add a tests for OleSetMenuDescriptor and the global interface table.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Jun 15 07:12:31 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: fa757df8837d6c276cf0a74c14c54fe13de4cf41
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=fa757df8837d6c276cf0a74c14c54fe13de4cf41

Author: Robert Shearman <rob at codeweavers.com>
Date:   Wed Jun 14 13:20:01 2006 +0100

ole32: Add a tests for OleSetMenuDescriptor and the global interface table.

---

 dlls/ole32/tests/compobj.c |   32 +++++++++++++++++++++++
 dlls/ole32/tests/marshal.c |   61 +++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 92 insertions(+), 1 deletions(-)

diff --git a/dlls/ole32/tests/compobj.c b/dlls/ole32/tests/compobj.c
index 535d891..06bf381 100644
--- a/dlls/ole32/tests/compobj.c
+++ b/dlls/ole32/tests/compobj.c
@@ -100,10 +100,42 @@ static void test_CoCreateInstance(void)
     ok(hr == CO_E_NOTINITIALIZED, "CoCreateInstance should have returned CO_E_NOTINITIALIZED instead of 0x%08lx\n", hr);
 }
 
+static ATOM register_dummy_class(void)
+{
+    WNDCLASS wc =
+    {
+        0,
+        DefWindowProc,
+        0,
+        0,
+        GetModuleHandle(NULL),
+        NULL,
+        LoadCursor(NULL, IDC_ARROW),
+        (HBRUSH)(COLOR_BTNFACE+1),
+        NULL,
+        TEXT("WineOleTestClass"),
+    };
+    
+    return RegisterClass(&wc);
+}
+
+static void test_ole_menu(void)
+{
+	HWND hwndFrame;
+	HRESULT hr;
+
+	hwndFrame = CreateWindow(MAKEINTATOM(register_dummy_class()), "Test", 0, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, NULL, NULL);
+	hr = OleSetMenuDescriptor(NULL, hwndFrame, NULL, NULL, NULL);
+	todo_wine ok_ole_success(hr, "OleSetMenuDescriptor");
+
+	DestroyWindow(hwndFrame);
+}
+
 START_TEST(compobj)
 {
     test_ProgIDFromCLSID();
     test_CLSIDFromProgID();
     test_CLSIDFromString();
     test_CoCreateInstance();
+    test_ole_menu();
 }
diff --git a/dlls/ole32/tests/marshal.c b/dlls/ole32/tests/marshal.c
index 061a843..32e2d93 100644
--- a/dlls/ole32/tests/marshal.c
+++ b/dlls/ole32/tests/marshal.c
@@ -1959,6 +1959,65 @@ static void test_ROT(void)
     ok_no_locks();
 }
 
+struct git_params
+{
+	DWORD cookie;
+	IGlobalInterfaceTable *git;
+};
+
+static DWORD CALLBACK get_global_interface_proc(LPVOID pv)
+{
+	HRESULT hr;
+	struct git_params *params = (struct git_params *)pv;
+	IClassFactory *cf;
+
+	hr = IGlobalInterfaceTable_GetInterfaceFromGlobal(params->git, params->cookie, &IID_IClassFactory, (void **)&cf);
+	ok(hr == CO_E_NOTINITIALIZED,
+		"IGlobalInterfaceTable_GetInterfaceFromGlobal should have failed with error CO_E_NOTINITIALIZED instead of 0x%08lx\n",
+		hr);
+
+	CoInitialize(NULL);
+	hr = IGlobalInterfaceTable_GetInterfaceFromGlobal(params->git, params->cookie, &IID_IClassFactory, (void **)&cf);
+	todo_wine ok_ole_success(hr, IGlobalInterfaceTable_GetInterfaceFromGlobal);
+	CoUninitialize();
+
+	return hr;
+}
+
+static void test_globalinterfacetable(void)
+{
+	HRESULT hr;
+	IGlobalInterfaceTable *git;
+	DWORD cookie;
+	HANDLE thread;
+	DWORD tid;
+	struct git_params params;
+	DWORD ret;
+
+	hr = CoCreateInstance(&CLSID_StdGlobalInterfaceTable, NULL, CLSCTX_INPROC_SERVER, &IID_IGlobalInterfaceTable, (void **)&git);
+	ok_ole_success(hr, CoCreateInstance);
+
+	hr = IGlobalInterfaceTable_RegisterInterfaceInGlobal(git, (IUnknown *)&Test_ClassFactory, &IID_IClassFactory, &cookie);
+	ok_ole_success(hr, IGlobalInterfaceTable_RegisterInterfaceInGlobal);
+
+	params.cookie = cookie;
+	params.git = git;
+	/* note: params is on stack so we MUST wait for get_global_interface_proc
+	 * to exit before we can return */
+	thread = CreateThread(NULL, 0, get_global_interface_proc, &params, 0, &tid);
+
+	ret = MsgWaitForMultipleObjects(1, &thread, FALSE, INFINITE, QS_ALLINPUT);
+	while (ret == WAIT_OBJECT_0 + 1)
+	{
+		MSG msg;
+		while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+			DispatchMessage(&msg);
+		ret = MsgWaitForMultipleObjects(1, &thread, FALSE, INFINITE, QS_ALLINPUT);
+	}
+
+	CloseHandle(thread);
+}
+
 static const char cf_marshaled[] =
 {
     0x9, 0x0, 0x0, 0x0,
@@ -2197,7 +2256,7 @@ START_TEST(marshal)
     if (0) test_out_of_process_com();
 
     test_ROT();
-    /* FIXME: test GIT */
+    test_globalinterfacetable();
 
     test_marshal_CLIPFORMAT();
     test_marshal_HWND();




More information about the wine-cvs mailing list