From 084e33d2541e80d20d2a636f9a54d73a26ee8a7b Mon Sep 17 00:00:00 2001 From: Detlef Riekenberg Date: Wed, 25 Jul 2012 00:10:40 +0200 Subject: [PATCH] apphelp/tests: Add tests for ApphelpCheckShellObject. --- configure | 1 + configure.ac | 1 + dlls/apphelp/tests/Makefile.in | 7 ++ dlls/apphelp/tests/apphelp.c | 116 +++++++++++++++++++++++++++++++++ 4 files changed, 125 insertions(+) create mode 100644 dlls/apphelp/tests/Makefile.in create mode 100644 dlls/apphelp/tests/apphelp.c diff --git a/configure b/configure index 0cc7ae67f54..c4e70d5bb2f 100755 --- a/configure +++ b/configure @@ -15057,6 +15057,7 @@ wine_fn_config_test dlls/advpack/tests advpack_test wine_fn_config_dll amstream enable_amstream wine_fn_config_test dlls/amstream/tests amstream_test wine_fn_config_dll apphelp enable_apphelp +wine_fn_config_test dlls/apphelp/tests apphelp_test wine_fn_config_dll appwiz.cpl enable_appwiz_cpl po wine_fn_config_dll atl enable_atl implib wine_fn_config_test dlls/atl/tests atl_test diff --git a/configure.ac b/configure.ac index aa2b026a320..a46a1afdf6d 100644 --- a/configure.ac +++ b/configure.ac @@ -2462,6 +2462,7 @@ WINE_CONFIG_TEST(dlls/advpack/tests) WINE_CONFIG_DLL(amstream) WINE_CONFIG_TEST(dlls/amstream/tests) WINE_CONFIG_DLL(apphelp) +WINE_CONFIG_TEST(dlls/apphelp/tests) WINE_CONFIG_DLL(appwiz.cpl,,[po]) WINE_CONFIG_DLL(atl,,[implib]) WINE_CONFIG_TEST(dlls/atl/tests) diff --git a/dlls/apphelp/tests/Makefile.in b/dlls/apphelp/tests/Makefile.in new file mode 100644 index 00000000000..0fb6ef64849 --- /dev/null +++ b/dlls/apphelp/tests/Makefile.in @@ -0,0 +1,7 @@ +TESTDLL = apphelp.dll +IMPORTS = ole32 + +C_SRCS = \ + apphelp.c + +@MAKE_TEST_RULES@ diff --git a/dlls/apphelp/tests/apphelp.c b/dlls/apphelp/tests/apphelp.c new file mode 100644 index 00000000000..5b5670c43e0 --- /dev/null +++ b/dlls/apphelp/tests/apphelp.c @@ -0,0 +1,116 @@ +/* + * Copyright 2012 Detlef Riekenberg + * + * 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 + */ + +#define COBJMACROS + +#include +#include +#include +#include +#include +#include + +#include "wine/test.h" + +static HMODULE hdll; +static BOOL (WINAPI *pApphelpCheckShellObject)(REFCLSID, BOOL, ULONGLONG *); + +DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0); + +DEFINE_GUID(test_Microsoft_Browser_Architecture, 0xa5e46e3a, 0x8849, 0x11d1, 0x9d, 0x8c, 0x00, 0xc0, 0x4f, 0xc9, 0x9d, 0x61); +DEFINE_GUID(CLSID_MenuBand, 0x5b4dae26, 0xb807, 0x11d0, 0x98, 0x15, 0x00, 0xc0, 0x4f, 0xd9, 0x19, 0x72); +DEFINE_GUID(test_UserAssist, 0xdd313e04, 0xfeff, 0x11d1, 0x8e, 0xcd, 0x00, 0x00, 0xf8, 0x7a, 0x47, 0x0c); + +static const CLSID * objects[] = { + &GUID_NULL, + /* used by IE */ + &test_Microsoft_Browser_Architecture, + &CLSID_MenuBand, + &CLSID_ShellLink, + &CLSID_ShellWindows, + &CLSID_InternetSecurityManager, + &test_UserAssist, + NULL,}; + +static const char *debugstr_guid(REFIID riid) +{ + static char buf[50]; + + sprintf(buf, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", + riid->Data1, riid->Data2, riid->Data3, riid->Data4[0], + riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4], + riid->Data4[5], riid->Data4[6], riid->Data4[7]); + + return buf; +} + +static void test_ApphelpCheckShellObject(void) +{ + ULONGLONG flags; + BOOL res; + int i; + + if (!pApphelpCheckShellObject) + { + win_skip("ApphelpCheckShellObject not available\n"); + return; + } + + for (i = 0; objects[i]; i++) + { + flags = 0xdeadbeef; + SetLastError(0xdeadbeef); + res = pApphelpCheckShellObject(objects[i], FALSE, &flags); + ok(res && (flags == 0), "%s 0: got %d and 0x%x%08x with 0x%x (expected TRUE and 0)\n", + debugstr_guid(objects[i]), res, (ULONG)(flags >> 32), (ULONG)flags, GetLastError()); + + flags = 0xdeadbeef; + SetLastError(0xdeadbeef); + res = pApphelpCheckShellObject(objects[i], TRUE, &flags); + ok(res && (flags == 0), "%s 1: got %d and 0x%x%08x with 0x%x (expected TRUE and 0)\n", + debugstr_guid(objects[i]), res, (ULONG)(flags >> 32), (ULONG)flags, GetLastError()); + + } + + /* NULL as pointer to flags is checked */ + SetLastError(0xdeadbeef); + res = pApphelpCheckShellObject(&GUID_NULL, FALSE, NULL); + ok(res, "%s 0: got %d with 0x%x (expected != FALSE)\n", debugstr_guid(&GUID_NULL), res, GetLastError()); + + /* NULL as CLSID* crash on Windows */ + if (0) + { + flags = 0xdeadbeef; + SetLastError(0xdeadbeef); + res = pApphelpCheckShellObject(NULL, FALSE, &flags); + trace("NULL as CLSID*: got %d and 0x%x%08x with 0x%x\n", res, (ULONG)(flags >> 32), (ULONG)flags, GetLastError()); + } +} + +START_TEST(apphelp) +{ + + hdll = LoadLibrary("apphelp.dll"); + if (!hdll) { + win_skip("apphelp.dll not available\n"); + return; + } + pApphelpCheckShellObject = (void *) GetProcAddress(hdll, "ApphelpCheckShellObject"); + + test_ApphelpCheckShellObject(); +}