Module: wine Branch: master Commit: 9a9d73b572b35450c37a093e6126e0e94025bc40 URL: https://source.winehq.org/git/wine.git/?a=commit;h=9a9d73b572b35450c37a093e6...
Author: Rémi Bernon rbernon@codeweavers.com Date: Mon Feb 28 09:44:02 2022 +0100
dinput/tests: Make combase.dll dependency optional.
Signed-off-by: Rémi Bernon rbernon@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/dinput/tests/Makefile.in | 2 +- dlls/dinput/tests/hotplug.c | 42 ++++++++++++++++++++++++++++--------- dlls/dinput/tests/joystick8.c | 49 +++++++++++++++++++++++++++++++++---------- 3 files changed, 71 insertions(+), 22 deletions(-)
diff --git a/dlls/dinput/tests/Makefile.in b/dlls/dinput/tests/Makefile.in index d32092ca03b..5ba0e5be4d7 100644 --- a/dlls/dinput/tests/Makefile.in +++ b/dlls/dinput/tests/Makefile.in @@ -1,5 +1,5 @@ TESTDLL = dinput.dll -IMPORTS = dinput dinput8 ole32 version user32 advapi32 hid uuid crypt32 newdev setupapi wintrust winmm combase +IMPORTS = dinput dinput8 ole32 version user32 advapi32 hid uuid crypt32 newdev setupapi wintrust winmm
driver_hid_IMPORTS = winecrt0 ntoskrnl hal hidclass driver_hid_EXTRADLLFLAGS = -nodefaultlibs -nostartfiles -Wl,--subsystem,native diff --git a/dlls/dinput/tests/hotplug.c b/dlls/dinput/tests/hotplug.c index 49cc5423807..4dc635932ab 100644 --- a/dlls/dinput/tests/hotplug.c +++ b/dlls/dinput/tests/hotplug.c @@ -47,6 +47,31 @@ #define WIDL_using_Windows_Gaming_Input #include "windows.gaming.input.h"
+#define MAKE_FUNC(f) static typeof(f) *p ## f +MAKE_FUNC( RoGetActivationFactory ); +MAKE_FUNC( RoInitialize ); +MAKE_FUNC( WindowsCreateString ); +MAKE_FUNC( WindowsDeleteString ); +#undef MAKE_FUNC + +static BOOL load_combase_functions(void) +{ + HMODULE combase = GetModuleHandleW( L"combase.dll" ); + +#define LOAD_FUNC(m, f) if (!(p ## f = (void *)GetProcAddress( m, #f ))) goto failed; + LOAD_FUNC( combase, RoGetActivationFactory ); + LOAD_FUNC( combase, RoInitialize ); + LOAD_FUNC( combase, WindowsCreateString ); + LOAD_FUNC( combase, WindowsDeleteString ); +#undef LOAD_FUNC + + return TRUE; + +failed: + win_skip("Failed to load combase.dll functions, skipping tests\n"); + return FALSE; +} + static BOOL test_input_lost( DWORD version ) { #include "psh_hid_macros.h" @@ -529,20 +554,20 @@ static void test_windows_gaming_input(void) HRESULT hr; MSG msg;
- hr = RoInitialize( RO_INIT_MULTITHREADED ); + if (!load_combase_functions()) return; + + hr = pRoInitialize( RO_INIT_MULTITHREADED ); ok( hr == RPC_E_CHANGED_MODE, "RoInitialize failed, hr %#lx\n", hr );
- hr = WindowsCreateString( class_name, wcslen( class_name ), &str ); + hr = pWindowsCreateString( class_name, wcslen( class_name ), &str ); ok( hr == S_OK, "WindowsCreateString failed, hr %#lx\n", hr ); - - hr = RoGetActivationFactory( str, &IID_IRawGameControllerStatics, (void **)&statics ); + hr = pRoGetActivationFactory( str, &IID_IRawGameControllerStatics, (void **)&statics ); ok( hr == S_OK || broken( hr == REGDB_E_CLASSNOTREG ), "RoGetActivationFactory failed, hr %#lx\n", hr ); - WindowsDeleteString( str ); + pWindowsDeleteString( str );
if (hr == REGDB_E_CLASSNOTREG) { win_skip( "%s runtimeclass not registered, skipping tests.\n", wine_dbgstr_w( class_name ) ); - RoUninitialize(); return; }
@@ -551,7 +576,7 @@ static void test_windows_gaming_input(void) ok( hr == S_OK, "add_RawGameControllerAdded returned %#lx\n", hr ); todo_wine ok( controller_added_token.value, "got token %I64u\n", controller_added_token.value ); - if (!controller_added_token.value) goto done; + if (!controller_added_token.value) return;
hr = IRawGameControllerStatics_add_RawGameControllerRemoved( statics, &controller_removed.IEventHandler_RawGameController_iface, &controller_removed_token ); @@ -642,9 +667,6 @@ static void test_windows_gaming_input(void)
DestroyWindow( hwnd ); UnregisterClassW( class.lpszClassName, class.hInstance ); - -done: - RoUninitialize(); }
START_TEST( hotplug ) diff --git a/dlls/dinput/tests/joystick8.c b/dlls/dinput/tests/joystick8.c index f01bed08030..e65e3ca9970 100644 --- a/dlls/dinput/tests/joystick8.c +++ b/dlls/dinput/tests/joystick8.c @@ -46,6 +46,33 @@ #define WIDL_using_Windows_Gaming_Input #include "windows.gaming.input.h"
+#define MAKE_FUNC(f) static typeof(f) *p ## f +MAKE_FUNC( RoGetActivationFactory ); +MAKE_FUNC( RoInitialize ); +MAKE_FUNC( WindowsCreateString ); +MAKE_FUNC( WindowsDeleteString ); +MAKE_FUNC( WindowsGetStringRawBuffer ); +#undef MAKE_FUNC + +static BOOL load_combase_functions(void) +{ + HMODULE combase = GetModuleHandleW( L"combase.dll" ); + +#define LOAD_FUNC(m, f) if (!(p ## f = (void *)GetProcAddress( m, #f ))) goto failed; + LOAD_FUNC( combase, RoGetActivationFactory ); + LOAD_FUNC( combase, RoInitialize ); + LOAD_FUNC( combase, WindowsCreateString ); + LOAD_FUNC( combase, WindowsDeleteString ); + LOAD_FUNC( combase, WindowsGetStringRawBuffer ); +#undef LOAD_FUNC + + return TRUE; + +failed: + win_skip("Failed to load combase.dll functions, skipping tests\n"); + return FALSE; +} + struct check_objects_todos { BOOL type; @@ -3214,9 +3241,9 @@ static void check_runtimeclass_( int line, IInspectable *inspectable, const WCHA
hr = IInspectable_GetRuntimeClassName( inspectable, &str ); ok_ (__FILE__, line)( hr == S_OK, "GetRuntimeClassName returned %#lx\n", hr ); - buffer = WindowsGetStringRawBuffer( str, &length ); + buffer = pWindowsGetStringRawBuffer( str, &length ); ok_ (__FILE__, line)( !wcscmp( buffer, class_name ), "got class name %s\n", debugstr_w(buffer) ); - WindowsDeleteString( str ); + pWindowsDeleteString( str ); }
static void test_windows_gaming_input(void) @@ -3284,20 +3311,22 @@ static void test_windows_gaming_input(void) HSTRING str; HRESULT hr;
+ if (!load_combase_functions()) return; + GetCurrentDirectoryW( ARRAY_SIZE(cwd), cwd ); GetTempPathW( ARRAY_SIZE(tempdir), tempdir ); SetCurrentDirectoryW( tempdir );
cleanup_registry_keys();
- hr = RoInitialize( RO_INIT_MULTITHREADED ); + hr = pRoInitialize( RO_INIT_MULTITHREADED ); ok( hr == RPC_E_CHANGED_MODE, "RoInitialize returned %#lx\n", hr );
- hr = WindowsCreateString( controller_class_name, wcslen( controller_class_name ), &str ); + hr = pWindowsCreateString( controller_class_name, wcslen( controller_class_name ), &str ); ok( hr == S_OK, "WindowsCreateString returned %#lx\n", hr ); - hr = RoGetActivationFactory( str, &IID_IRawGameControllerStatics, (void **)&controller_statics ); + hr = pRoGetActivationFactory( str, &IID_IRawGameControllerStatics, (void **)&controller_statics ); ok( hr == S_OK || broken( hr == REGDB_E_CLASSNOTREG ), "RoGetActivationFactory returned %#lx\n", hr ); - WindowsDeleteString( str ); + pWindowsDeleteString( str );
if (hr == REGDB_E_CLASSNOTREG) { @@ -3336,11 +3365,11 @@ static void test_windows_gaming_input(void)
/* HID gamepads aren't exposed as WGI gamepads on Windows */
- hr = WindowsCreateString( gamepad_class_name, wcslen( gamepad_class_name ), &str ); + hr = pWindowsCreateString( gamepad_class_name, wcslen( gamepad_class_name ), &str ); ok( hr == S_OK, "WindowsCreateString returned %#lx\n", hr ); - hr = RoGetActivationFactory( str, &IID_IGamepadStatics, (void **)&gamepad_statics ); + hr = pRoGetActivationFactory( str, &IID_IGamepadStatics, (void **)&gamepad_statics ); ok( hr == S_OK, "RoGetActivationFactory returned %#lx\n", hr ); - WindowsDeleteString( str ); + pWindowsDeleteString( str ); hr = IGamepadStatics_get_Gamepads( gamepad_statics, &gamepads_view ); ok( hr == S_OK, "get_Gamepads returned %#lx\n", hr ); hr = IVectorView_Gamepad_get_Size( gamepads_view, &size ); @@ -3384,8 +3413,6 @@ done: pnp_driver_stop(); cleanup_registry_keys(); SetCurrentDirectoryW( cwd ); - - RoUninitialize(); }
START_TEST( joystick8 )