Nikolay Sivov : shell32/tests: Some tests for IShellWindows.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Apr 29 09:22:18 CDT 2015
Module: wine
Branch: master
Commit: fae0f6785a110029670d8497e38887750d2eb27b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=fae0f6785a110029670d8497e38887750d2eb27b
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Tue Apr 28 17:38:20 2015 +0300
shell32/tests: Some tests for IShellWindows.
---
dlls/shell32/tests/shelldispatch.c | 97 ++++++++++++++++++++++++++++++++++++++
1 file changed, 97 insertions(+)
diff --git a/dlls/shell32/tests/shelldispatch.c b/dlls/shell32/tests/shelldispatch.c
index 75a06cc..02a45cb 100644
--- a/dlls/shell32/tests/shelldispatch.c
+++ b/dlls/shell32/tests/shelldispatch.c
@@ -385,6 +385,102 @@ static void test_ShellFolderView(void)
IShellFolder_Release(desktop);
}
+static void test_ShellWindows(void)
+{
+ IShellWindows *shellwindows;
+ LONG cookie, cookie2, ret;
+ IDispatch *disp;
+ VARIANT v, v2;
+ HRESULT hr;
+ HWND hwnd;
+
+ hr = CoCreateInstance(&CLSID_ShellWindows, NULL, CLSCTX_LOCAL_SERVER,
+ &IID_IShellWindows, (void**)&shellwindows);
+todo_wine
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ if (hr != S_OK) return;
+
+ /* NULL out argument */
+ hr = IShellWindows_Register(shellwindows, NULL, 0, SWC_EXPLORER, NULL);
+ ok(hr == HRESULT_FROM_WIN32(RPC_X_NULL_REF_POINTER), "got 0x%08x\n", hr);
+
+ hr = IShellWindows_Register(shellwindows, NULL, 0, SWC_EXPLORER, &cookie);
+ ok(hr == E_POINTER, "got 0x%08x\n", hr);
+
+ hr = IShellWindows_Register(shellwindows, (IDispatch*)shellwindows, 0, SWC_EXPLORER, &cookie);
+ ok(hr == E_POINTER, "got 0x%08x\n", hr);
+
+ hr = IShellWindows_Register(shellwindows, (IDispatch*)shellwindows, 0, SWC_EXPLORER, &cookie);
+ ok(hr == E_POINTER, "got 0x%08x\n", hr);
+
+ hwnd = CreateWindowExA(0, "button", "test", BS_CHECKBOX | WS_VISIBLE | WS_POPUP,
+ 0, 0, 50, 14, 0, 0, 0, NULL);
+ ok(hwnd != NULL, "got %p, error %d\n", hwnd, GetLastError());
+
+ cookie = 0;
+ hr = IShellWindows_Register(shellwindows, NULL, HandleToLong(hwnd), SWC_EXPLORER, &cookie);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(cookie != 0, "got %d\n", cookie);
+
+ cookie2 = 0;
+ hr = IShellWindows_Register(shellwindows, NULL, HandleToLong(hwnd), SWC_EXPLORER, &cookie2);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(cookie2 != 0 && cookie2 != cookie, "got %d\n", cookie2);
+
+ hr = IShellWindows_Revoke(shellwindows, cookie);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = IShellWindows_Revoke(shellwindows, cookie2);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ hr = IShellWindows_Revoke(shellwindows, 0);
+ ok(hr == S_FALSE, "got 0x%08x\n", hr);
+
+ /* we can register ourselves as desktop, but FindWindowSW still returns real desktop window */
+ cookie = 0;
+ hr = IShellWindows_Register(shellwindows, NULL, HandleToLong(hwnd), SWC_DESKTOP, &cookie);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(cookie != 0, "got %d\n", cookie);
+
+ disp = (void*)0xdeadbeef;
+ ret = 0xdead;
+ VariantInit(&v);
+ hr = IShellWindows_FindWindowSW(shellwindows, &v, &v, SWC_DESKTOP, &ret, SWFO_NEEDDISPATCH, &disp);
+ ok(hr == S_OK || broken(hr == S_FALSE), "got 0x%08x\n", hr);
+ if (hr == S_FALSE) /* winxp and earlier */ {
+ /* older versions allowed to regiser SWC_DESKTOP and access it with FindWindowSW */
+ ok(disp == NULL, "got %p\n", disp);
+ ok(ret == 0, "got %d\n", ret);
+ }
+ else {
+ ok(disp != NULL, "got %p\n", disp);
+ ok(ret != HandleToUlong(hwnd), "got %d\n", ret);
+ if (disp) IDispatch_Release(disp);
+ }
+
+ disp = (void*)0xdeadbeef;
+ ret = 0xdead;
+ VariantInit(&v);
+ hr = IShellWindows_FindWindowSW(shellwindows, &v, &v, SWC_DESKTOP, &ret, 0, &disp);
+ ok(hr == S_OK || broken(hr == S_FALSE) /* winxp */, "got 0x%08x\n", hr);
+ ok(disp == NULL, "got %p\n", disp);
+ ok(ret != HandleToUlong(hwnd), "got %d\n", ret);
+
+ disp = (void*)0xdeadbeef;
+ ret = 0xdead;
+ V_VT(&v) = VT_I4;
+ V_I4(&v) = cookie;
+ VariantInit(&v2);
+ hr = IShellWindows_FindWindowSW(shellwindows, &v, &v2, SWC_BROWSER, &ret, SWFO_COOKIEPASSED, &disp);
+ ok(hr == S_FALSE, "got 0x%08x\n", hr);
+ ok(disp == NULL, "got %p\n", disp);
+ ok(ret == 0, "got %d\n", ret);
+
+ hr = IShellWindows_Revoke(shellwindows, cookie);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ DestroyWindow(hwnd);
+ IShellWindows_Release(shellwindows);
+}
+
START_TEST(shelldispatch)
{
HRESULT r;
@@ -398,6 +494,7 @@ START_TEST(shelldispatch)
test_namespace();
test_service();
test_ShellFolderView();
+ test_ShellWindows();
CoUninitialize();
}
More information about the wine-cvs
mailing list