| /* Unit tests for the task dialog control. |
| * |
| * Copyright 2017 Fabian Maurer for the Wine project |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
| */ |
| |
| #include <stdarg.h> |
| |
| #include "windef.h" |
| #include "winbase.h" |
| #include "winuser.h" |
| #include "commctrl.h" |
| |
| #include "wine/test.h" |
| #include "v6util.h" |
| |
| static HRESULT (WINAPI *pTaskDialogIndirect)(const TASKDIALOGCONFIG *, int *, int *, BOOL *); |
| static HRESULT (WINAPI *pTaskDialog)(HWND, HINSTANCE, const WCHAR *, const WCHAR *, const WCHAR *, |
| TASKDIALOG_COMMON_BUTTON_FLAGS, const WCHAR *, int *); |
| |
| static void test_invalid_parameters(void) |
| { |
| TASKDIALOGCONFIG info = { 0 }; |
| HRESULT hr; |
| |
| hr = pTaskDialogIndirect(NULL, NULL, NULL, NULL); |
| ok(hr == E_INVALIDARG, "Unexpected return value %#x.\n", hr); |
| |
| info.cbSize = 0; |
| hr = pTaskDialogIndirect(&info, NULL, NULL, NULL); |
| ok(hr == E_INVALIDARG, "Unexpected return value %#x.\n", hr); |
| |
| info.cbSize = sizeof(TASKDIALOGCONFIG) - 1; |
| hr = pTaskDialogIndirect(&info, NULL, NULL, NULL); |
| ok(hr == E_INVALIDARG, "Unexpected return value %#x.\n", hr); |
| |
| info.cbSize = sizeof(TASKDIALOGCONFIG) + 1; |
| hr = pTaskDialogIndirect(&info, NULL, NULL, NULL); |
| ok(hr == E_INVALIDARG, "Unexpected return value %#x.\n", hr); |
| } |
| |
| START_TEST(taskdialog) |
| { |
| ULONG_PTR ctx_cookie; |
| void *ptr_ordinal; |
| HINSTANCE hinst; |
| HANDLE hCtx; |
| |
| if (!load_v6_module(&ctx_cookie, &hCtx)) |
| return; |
| |
| /* Check if task dialogs are available */ |
| hinst = LoadLibraryA("comctl32.dll"); |
| |
| pTaskDialogIndirect = (void *)GetProcAddress(hinst, "TaskDialogIndirect"); |
| if (!pTaskDialogIndirect) |
| { |
| win_skip("TaskDialogIndirect not exported by name\n"); |
| unload_v6_module(ctx_cookie, hCtx); |
| return; |
| } |
| |
| pTaskDialog = (void *)GetProcAddress(hinst, "TaskDialog"); |
| |
| ptr_ordinal = GetProcAddress(hinst, (const char *)344); |
| ok(pTaskDialog == ptr_ordinal, "got wrong pointer for ordinal 344, %p expected %p\n", |
| ptr_ordinal, pTaskDialog); |
| |
| ptr_ordinal = GetProcAddress(hinst, (const char *)345); |
| ok(pTaskDialogIndirect == ptr_ordinal, "got wrong pointer for ordinal 345, %p expected %p\n", |
| ptr_ordinal, pTaskDialogIndirect); |
| |
| test_invalid_parameters(); |
| |
| unload_v6_module(ctx_cookie, hCtx); |
| } |