Zhiyi Zhang : user32/tests: Add more ChangeDisplaySettings() tests.

Alexandre Julliard julliard at winehq.org
Tue Jul 21 15:40:22 CDT 2020


Module: wine
Branch: master
Commit: dcf8bd769bef3a793ce0c1e29a501bcb03e16029
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=dcf8bd769bef3a793ce0c1e29a501bcb03e16029

Author: Zhiyi Zhang <zzhang at codeweavers.com>
Date:   Tue Jul 21 14:50:05 2020 +0800

user32/tests: Add more ChangeDisplaySettings() tests.

Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/user32/tests/monitor.c | 63 +++++++++++++++++++++++++++++++++++----------
 1 file changed, 49 insertions(+), 14 deletions(-)

diff --git a/dlls/user32/tests/monitor.c b/dlls/user32/tests/monitor.c
index 5d7069591b..fe763e46b4 100644
--- a/dlls/user32/tests/monitor.c
+++ b/dlls/user32/tests/monitor.c
@@ -351,7 +351,7 @@ static void _expect_dm(INT line, DEVMODEA expected, const CHAR *device, DWORD te
 static void test_ChangeDisplaySettingsEx(void)
 {
     DPI_AWARENESS_CONTEXT context = NULL;
-    UINT primary, device, side, mode;
+    UINT primary, device, test, mode;
     UINT device_size, device_count;
     struct device_info *devices;
     INT count, old_count;
@@ -362,6 +362,21 @@ static void test_ChangeDisplaySettingsEx(void)
     LONG res;
     int i;
 
+    /* Test invalid device names */
+    memset(&dm, 0, sizeof(dm));
+    dm.dmSize = sizeof(dm);
+    res = EnumDisplaySettingsA(NULL, ENUM_CURRENT_SETTINGS, &dm);
+    ok(res, "EnumDisplaySettingsA failed, error %#x\n", GetLastError());
+
+    res = ChangeDisplaySettingsExA("invalid", &dm, NULL, CDS_TEST, NULL);
+    todo_wine ok(res == DISP_CHANGE_BADPARAM, "ChangeDisplaySettingsA returned unexpected %d\n", res);
+
+    res = ChangeDisplaySettingsExA("\\\\.\\DISPLAY0", &dm, NULL, CDS_TEST, NULL);
+    todo_wine ok(res == DISP_CHANGE_BADPARAM, "ChangeDisplaySettingsA returned unexpected %d\n", res);
+
+    res = ChangeDisplaySettingsExA("\\\\.\\DISPLAY1\\Monitor0", &dm, NULL, CDS_TEST, NULL);
+    todo_wine ok(res == DISP_CHANGE_BADPARAM, "ChangeDisplaySettingsA returned unexpected %d\n", res);
+
     /* Test dmDriverExtra */
     memset(&dm, 0, sizeof(dm));
     dm.dmSize = sizeof(dm);
@@ -795,43 +810,63 @@ static void test_ChangeDisplaySettingsEx(void)
             expect_dm(dm2, devices[1].name, 0);
 
             /* Test placing the secondary adapter to all sides of the primary adapter */
-            for (side = 0; side < 4; ++side)
+            for (test = 0; test < 8; ++test)
             {
-                switch (side)
+                switch (test)
                 {
-                /* Bottom */
+                /* Bottom side with x offset */
                 case 0:
-                    dm2.dmPosition.x = dm.dmPosition.x;
+                    dm2.dmPosition.x = dm.dmPosition.x + dm.dmPelsWidth / 2;
                     dm2.dmPosition.y = dm.dmPosition.y + dm.dmPelsHeight;
                     break;
-                /* Left */
+                /* Left side with y offset */
                 case 1:
                     dm2.dmPosition.x = dm.dmPosition.x - dm2.dmPelsWidth;
-                    dm2.dmPosition.y = dm.dmPosition.y;
+                    dm2.dmPosition.y = dm.dmPosition.y + dm.dmPelsHeight / 2;
                     break;
-                /* Top */
+                /* Top side with x offset */
                 case 2:
-                    dm2.dmPosition.x = dm.dmPosition.x;
+                    dm2.dmPosition.x = dm.dmPosition.x + dm.dmPelsWidth / 2;
                     dm2.dmPosition.y = dm.dmPosition.y - dm2.dmPelsHeight;
                     break;
-                /* Right */
+                /* Right side with y offset */
                 case 3:
+                    dm2.dmPosition.x = dm.dmPosition.x + dm.dmPelsWidth;
+                    dm2.dmPosition.y = dm.dmPosition.y + dm.dmPelsHeight / 2;
+                    break;
+                /* Bottom side with the same x */
+                case 4:
+                    dm2.dmPosition.x = dm.dmPosition.x;
+                    dm2.dmPosition.y = dm.dmPosition.y + dm.dmPelsHeight;
+                    break;
+                /* Left side with the same y */
+                case 5:
+                    dm2.dmPosition.x = dm.dmPosition.x - dm2.dmPelsWidth;
+                    dm2.dmPosition.y = dm.dmPosition.y;
+                    break;
+                /* Top side with the same x */
+                case 6:
+                    dm2.dmPosition.x = dm.dmPosition.x;
+                    dm2.dmPosition.y = dm.dmPosition.y - dm2.dmPelsHeight;
+                    break;
+                /* Right side with the same y */
+                case 7:
                     dm2.dmPosition.x = dm.dmPosition.x + dm.dmPelsWidth;
                     dm2.dmPosition.y = dm.dmPosition.y;
                     break;
                 }
 
                 res = ChangeDisplaySettingsExA(devices[1].name, &dm2, NULL, CDS_RESET, NULL);
-                ok(res == DISP_CHANGE_SUCCESSFUL, "ChangeDisplaySettingsExA %s side %d returned unexpected %d\n",
-                        devices[1].name, side, res);
+                ok(res == DISP_CHANGE_SUCCESSFUL, "ChangeDisplaySettingsExA %s test %d returned unexpected %d\n",
+                        devices[1].name, test, res);
                 if (res != DISP_CHANGE_SUCCESSFUL)
                 {
-                    win_skip("ChangeDisplaySettingsExA %s side %d returned unexpected %d.\n", devices[1].name, side, res);
+                    win_skip("ChangeDisplaySettingsExA %s test %d returned unexpected %d.\n", devices[1].name, test, res);
                     continue;
                 }
 
                 flush_events();
-                expect_dm(dm2, devices[1].name, side);
+                expect_dm(dm2, devices[1].name, test);
             }
 
             /* Test automatic position update when other adapters change resolution */




More information about the wine-cvs mailing list