From: Piotr Caban piotr@codeweavers.com
--- dlls/comctl32/tests/propsheet.c | 79 +++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+)
diff --git a/dlls/comctl32/tests/propsheet.c b/dlls/comctl32/tests/propsheet.c index ca99e11df36..184a04c13f2 100644 --- a/dlls/comctl32/tests/propsheet.c +++ b/dlls/comctl32/tests/propsheet.c @@ -42,6 +42,7 @@ static HPROPSHEETPAGE (WINAPI *pCreatePropertySheetPageA)(const PROPSHEETPAGEA * static HPROPSHEETPAGE (WINAPI *pCreatePropertySheetPageW)(const PROPSHEETPAGEW *desc); static BOOL (WINAPI *pDestroyPropertySheetPage)(HPROPSHEETPAGE proppage); static INT_PTR (WINAPI *pPropertySheetA)(const PROPSHEETHEADERA *header); +static INT_PTR (WINAPI *pPropertySheetW)(const PROPSHEETHEADERW *header);
static BOOL (WINAPI *pIsThemeActive)(void); static BOOL (WINAPI *pIsThemeDialogTextureEnabled)(HWND); @@ -1301,6 +1302,82 @@ static void test_page_dialog_texture(void) DestroyWindow(hdlg); }
+static void test_invalid_hpropsheetpage(void) +{ + HPROPSHEETPAGE hpsp[1]; + PROPSHEETHEADERW pshW; + PROPSHEETHEADERA psh; + PROPSHEETPAGEW pspW; + PROPSHEETPAGEA psp; + LRESULT ret; + HWND hdlg; + + memset(&psp, 0, sizeof(psp)); + psp.dwSize = sizeof(psp); + psp.hInstance = GetModuleHandleA(NULL); + U(psp).pszTemplate = "prop_page1"; + U2(psp).pszIcon = NULL; + psp.pfnDlgProc = page_dlg_proc; + psp.lParam = 0; + + hpsp[0] = (HPROPSHEETPAGE)&psp; + + memset(&psh, 0, sizeof(psh)); + psh.dwSize = PROPSHEETHEADERA_V1_SIZE; + psh.dwFlags = PSH_MODELESS | PSH_USECALLBACK; + psh.pszCaption = "test caption"; + psh.nPages = 1; + psh.hwndParent = GetDesktopWindow(); + U3(psh).phpage = hpsp; + psh.pfnCallback = sheet_callback; + + hdlg = (HWND)pPropertySheetA(&psh); + ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle value %p\n", hdlg); + + ret = SendMessageA(hdlg, PSM_INDEXTOPAGE, 0, 0); + ok(ret, "page was not created\n"); + todo_wine ok((HPROPSHEETPAGE)ret != hpsp[0], "invalid HPROPSHEETPAGE was preserved\n"); + DestroyWindow(hdlg); + + memset(&pspW, 0, sizeof(pspW)); + pspW.dwSize = sizeof(pspW); + pspW.hInstance = GetModuleHandleA(NULL); + U(pspW).pszTemplate = L"prop_page1"; + U2(pspW).pszIcon = NULL; + pspW.pfnDlgProc = page_dlg_proc; + pspW.lParam = 0; + + hpsp[0] = (HPROPSHEETPAGE)&pspW; + + hdlg = (HWND)pPropertySheetA(&psh); + ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle value %p\n", hdlg); + + ok(!SendMessageA(hdlg, PSM_INDEXTOPAGE, 0, 0), "there should be no pages\n"); + ok(!SendMessageW(hdlg, PSM_ADDPAGE, 0, (LPARAM)&pspW), "PSM_ADDPAGE succeeded\n"); + ok(SendMessageW(hdlg, PSM_ADDPAGE, 0, (LPARAM)&psp), "PSM_ADDPAGE failed\n"); + ok(SendMessageA(hdlg, PSM_INDEXTOPAGE, 0, 0), "no pages after PSM_ADDPAGE\n"); + DestroyWindow(hdlg); + + hpsp[0] = (HPROPSHEETPAGE)&pspW; + + memset(&pshW, 0, sizeof(pshW)); + pshW.dwSize = PROPSHEETHEADERA_V1_SIZE; + pshW.dwFlags = PSH_MODELESS | PSH_USECALLBACK; + pshW.pszCaption = L"test caption"; + pshW.nPages = 1; + pshW.hwndParent = GetDesktopWindow(); + U3(pshW).phpage = hpsp; + pshW.pfnCallback = sheet_callback; + + hdlg = (HWND)pPropertySheetW(&pshW); + ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle value %p\n", hdlg); + + ret = SendMessageA(hdlg, PSM_INDEXTOPAGE, 0, 0); + todo_wine ok(ret, "page was not created\n"); + ok((HPROPSHEETPAGE)ret != hpsp[0], "invalid HPROPSHEETPAGE was preserved\n"); + DestroyWindow(hdlg); +} + static void init_comctl32_functions(void) { HMODULE hComCtl32 = LoadLibraryA("comctl32.dll"); @@ -1310,6 +1387,7 @@ static void init_comctl32_functions(void) X(CreatePropertySheetPageW); X(DestroyPropertySheetPage); X(PropertySheetA); + X(PropertySheetW); #undef X }
@@ -1353,6 +1431,7 @@ START_TEST(propsheet) test_PSM_INSERTPAGE(); test_CreatePropertySheetPage(); test_page_dialog_texture(); + test_invalid_hpropsheetpage();
if (!load_v6_module(&ctx_cookie, &ctx)) return;