[PATCH 02/11] dinput8/tests: Add some HID joystick IDirectInputDevice8_EnumEffects tests.

Rémi Bernon rbernon at codeweavers.com
Thu Sep 30 03:37:32 CDT 2021


Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 dlls/dinput8/tests/hid.c | 81 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 80 insertions(+), 1 deletion(-)

diff --git a/dlls/dinput8/tests/hid.c b/dlls/dinput8/tests/hid.c
index 533c4a8ca42..c8d0588e128 100644
--- a/dlls/dinput8/tests/hid.c
+++ b/dlls/dinput8/tests/hid.c
@@ -3343,6 +3343,44 @@ static BOOL CALLBACK check_object_count( const DIDEVICEOBJECTINSTANCEW *obj, voi
     return DIENUM_CONTINUE;
 }
 
+struct check_effects_params
+{
+    UINT index;
+    UINT expect_count;
+    const DIEFFECTINFOW *expect_effects;
+};
+
+static BOOL CALLBACK check_effects( const DIEFFECTINFOW *effect, void *args )
+{
+    static const DIEFFECTINFOW unexpected_effect = {0};
+    struct check_effects_params *params = args;
+    const DIEFFECTINFOW *exp = params->expect_effects + params->index;
+
+    winetest_push_context( "effect[%d]", params->index );
+
+    ok( params->index < params->expect_count, "unexpected extra object\n" );
+    if (params->index >= params->expect_count) exp = &unexpected_effect;
+
+    check_member( *effect, *exp, "%u", dwSize );
+    check_member_guid( *effect, *exp, guid );
+    check_member( *effect, *exp, "%#x", dwEffType );
+    check_member( *effect, *exp, "%#x", dwStaticParams );
+    check_member( *effect, *exp, "%#x", dwDynamicParams );
+    check_member_wstr( *effect, *exp, tszName );
+
+    winetest_pop_context();
+    params->index++;
+
+    return DIENUM_CONTINUE;
+}
+
+static BOOL CALLBACK check_effect_count( const DIEFFECTINFOW *effect, void *args )
+{
+    DWORD *count = args;
+    *count = *count + 1;
+    return DIENUM_CONTINUE;
+}
+
 static void test_simple_joystick(void)
 {
 #include "psh_hid_macros.h"
@@ -3580,6 +3618,7 @@ static void test_simple_joystick(void)
         },
     };
     const struct check_objects_todos objects_todos[ARRAY_SIZE(expect_objects)] = {};
+    const DIEFFECTINFOW expect_effects[] = {};
 
     struct check_objects_params check_objects_params =
     {
@@ -3587,6 +3626,11 @@ static void test_simple_joystick(void)
         .expect_objs = expect_objects,
         .todo_objs = objects_todos,
     };
+    struct check_effects_params check_effects_params =
+    {
+        .expect_count = ARRAY_SIZE(expect_effects),
+        .expect_effects = expect_effects,
+    };
     DIPROPGUIDANDPATH prop_guid_path =
     {
         .diph =
@@ -3989,6 +4033,22 @@ static void test_simple_joystick(void)
     check_member( objinst, expect_objects[5], "%#04x", wExponent );
     check_member( objinst, expect_objects[5], "%u", wReportId );
 
+    hr = IDirectInputDevice8_EnumEffects( device, NULL, NULL, DIEFT_ALL );
+    todo_wine
+    ok( hr == DIERR_INVALIDPARAM, "IDirectInputDevice8_EnumEffects returned %#x\n", hr );
+    res = 0;
+    hr = IDirectInputDevice8_EnumEffects( device, check_effect_count, &res, 0xfe );
+    ok( hr == DI_OK, "IDirectInputDevice8_EnumEffects returned %#x\n", hr );
+    ok( res == 0, "got %u expected %u\n", res, 0 );
+    res = 0;
+    hr = IDirectInputDevice8_EnumEffects( device, check_effect_count, &res, DIEFT_PERIODIC );
+    ok( hr == DI_OK, "IDirectInputDevice8_EnumEffects returned %#x\n", hr );
+    ok( res == 0, "got %u expected %u\n", res, 0 );
+    hr = IDirectInputDevice8_EnumEffects( device, check_effects, &check_effects_params, DIEFT_ALL );
+    ok( hr == DI_OK, "IDirectInputDevice8_EnumEffects returned %#x\n", hr );
+    ok( check_effects_params.index >= check_effects_params.expect_count, "missing %u effects\n",
+        check_effects_params.expect_count - check_effects_params.index );
+
     hr = IDirectInputDevice8_SetDataFormat( device, NULL );
     ok( hr == E_POINTER, "IDirectInputDevice8_SetDataFormat returned: %#x\n", hr );
     hr = IDirectInputDevice8_SetDataFormat( device, &dataformat );
@@ -5192,6 +5252,7 @@ static void test_force_feedback_joystick( void )
         {.type = TRUE, .flags = TRUE},
         {.type = TRUE, .flags = TRUE},
     };
+    const DIEFFECTINFOW expect_effects[] = {};
 
     struct check_objects_params check_objects_params =
     {
@@ -5199,6 +5260,11 @@ static void test_force_feedback_joystick( void )
         .expect_objs = expect_objects,
         .todo_objs = objects_todos,
     };
+    struct check_effects_params check_effects_params =
+    {
+        .expect_count = ARRAY_SIZE(expect_effects),
+        .expect_effects = expect_effects,
+    };
     DIPROPDWORD prop_dword =
     {
         .diph =
@@ -5213,8 +5279,8 @@ static void test_force_feedback_joystick( void )
     IDirectInputDevice8W *device;
     DIDEVCAPS caps = {0};
     IDirectInput8W *di;
+    ULONG res, ref;
     HRESULT hr;
-    ULONG ref;
 
     GetCurrentDirectoryW( ARRAY_SIZE(cwd), cwd );
     GetTempPathW( ARRAY_SIZE(tempdir), tempdir );
@@ -5293,6 +5359,19 @@ static void test_force_feedback_joystick( void )
     ok( check_objects_params.index >= check_objects_params.expect_count, "missing %u objects\n",
         check_objects_params.expect_count - check_objects_params.index );
 
+    res = 0;
+    hr = IDirectInputDevice8_EnumEffects( device, check_effect_count, &res, 0xfe );
+    ok( hr == DI_OK, "IDirectInputDevice8_EnumEffects returned %#x\n", hr );
+    ok( res == 0, "got %u expected %u\n", res, 0 );
+    res = 0;
+    hr = IDirectInputDevice8_EnumEffects( device, check_effect_count, &res, DIEFT_PERIODIC );
+    ok( hr == DI_OK, "IDirectInputDevice8_EnumEffects returned %#x\n", hr );
+    ok( res == 0, "got %u expected %u\n", res, 0 );
+    hr = IDirectInputDevice8_EnumEffects( device, check_effects, &check_effects_params, DIEFT_ALL );
+    ok( hr == DI_OK, "IDirectInputDevice8_EnumEffects returned %#x\n", hr );
+    ok( check_effects_params.index >= check_effects_params.expect_count, "missing %u effects\n",
+        check_effects_params.expect_count - check_effects_params.index );
+
     hr = IDirectInputDevice8_SetDataFormat( device, &c_dfDIJoystick2 );
     ok( hr == DI_OK, "IDirectInputDevice8_SetDataFormat returned: %#x\n", hr );
 
-- 
2.33.0




More information about the wine-devel mailing list