monitor-unit-tests: Check non-first preferred modes
authorJonas Ådahl <jadahl@gmail.com>
Wed, 18 Oct 2017 15:24:36 +0000 (23:24 +0800)
committerJeremy Bicha <jbicha@debian.org>
Sat, 21 Oct 2017 23:47:22 +0000 (00:47 +0100)
Check that if there are multiple modes with the same ID (resolution,
refresh rate and handled flags) we correctly add the preferred mode to
the list of monitor modes.

https://bugzilla.gnome.org/show_bug.cgi?id=789153

Gbp-Pq: Name 0016-monitor-unit-tests-Check-non-first-preferred-modes.patch

src/backends/meta-monitor.c
src/backends/meta-monitor.h
src/tests/monitor-unit-tests.c

index 2d06a1e36271514902c3d095b7c125ab042f21c2..f9233251cf1db938b47126614bffb146b25de840 100644 (file)
@@ -34,8 +34,6 @@
 #define MINIMUM_LOGICAL_HEIGHT 600
 #define MAXIMUM_REFRESH_RATE_DIFF 0.001
 
-#define HANDLED_CRTC_MODE_FLAGS (META_CRTC_MODE_FLAG_INTERLACE)
-
 typedef struct _MetaMonitorMode
 {
   char *id;
index f4260d61f8079f3ed2d4ab5d73ecd51b153b92a6..e6f394b07585dfb703a95e11f750a6e9dac9e2f6 100644 (file)
@@ -48,6 +48,8 @@ typedef struct _MetaMonitorCrtcMode
   MetaCrtcMode *crtc_mode;
 } MetaMonitorCrtcMode;
 
+#define HANDLED_CRTC_MODE_FLAGS (META_CRTC_MODE_FLAG_INTERLACE)
+
 typedef gboolean (* MetaMonitorModeFunc) (MetaMonitor         *monitor,
                                           MetaMonitorMode     *mode,
                                           MetaMonitorCrtcMode *monitor_crtc_mode,
index 668565043d406d647c694f3a48c078571be6f4b9..e73e9fb46cfba2017974ec11a03935b8ebad3177 100644 (file)
@@ -419,7 +419,7 @@ check_monitor_mode (MetaMonitor         *monitor,
       flags = meta_monitor_mode_get_flags (mode);
 
       g_assert_cmpfloat (refresh_rate, ==, crtc_mode->refresh_rate);
-      g_assert_cmpint (flags, ==, crtc_mode->flags);
+      g_assert_cmpint (flags, ==, (crtc_mode->flags & HANDLED_CRTC_MODE_FLAGS));
     }
 
   data->expect_crtc_mode_iter++;
@@ -2723,6 +2723,101 @@ meta_test_monitor_underscanning_config (void)
   check_monitor_configuration (&test_case);
 }
 
+static void
+meta_test_monitor_preferred_non_first_mode (void)
+{
+  MonitorTestCase test_case = {
+    .setup = {
+      .modes = {
+        {
+          .width = 800,
+          .height = 600,
+          .refresh_rate = 60.0,
+          .flags = META_CRTC_MODE_FLAG_NHSYNC,
+        },
+        {
+          .width = 800,
+          .height = 600,
+          .refresh_rate = 60.0,
+          .flags = META_CRTC_MODE_FLAG_PHSYNC,
+        },
+      },
+      .n_modes = 2,
+      .outputs = {
+        {
+          .crtc = -1,
+          .modes = { 0, 1 },
+          .n_modes = 2,
+          .preferred_mode = 1,
+          .possible_crtcs = { 0 },
+          .n_possible_crtcs = 1,
+          .width_mm = 222,
+          .height_mm = 125
+        }
+      },
+      .n_outputs = 1,
+      .crtcs = {
+        {
+          .current_mode = -1
+        }
+      },
+      .n_crtcs = 1
+    },
+
+    .expect = {
+      .monitors = {
+        {
+          .outputs = { 0 },
+          .n_outputs = 1,
+          .modes = {
+            {
+              .width = 800,
+              .height = 600,
+              .refresh_rate = 60.0,
+              .crtc_modes = {
+                {
+                  .output = 0,
+                  .crtc_mode = 1
+                }
+              }
+            },
+          },
+          .n_modes = 1,
+          .current_mode = 0,
+          .width_mm = 222,
+          .height_mm = 125
+        }
+      },
+      .n_monitors = 1,
+      .logical_monitors = {
+        {
+          .monitors = { 0 },
+          .n_monitors = 1,
+          .layout = { .x = 0, .y = 0, .width = 800, .height = 600 },
+          .scale = 1
+        },
+      },
+      .n_logical_monitors = 1,
+      .primary_logical_monitor = 0,
+      .n_outputs = 1,
+      .crtcs = {
+        {
+          .current_mode = 1,
+        }
+      },
+      .n_crtcs = 1,
+      .screen_width = 800,
+      .screen_height = 600,
+    }
+  };
+  MetaMonitorTestSetup *test_setup;
+
+  test_setup = create_monitor_test_setup (&test_case,
+                                          MONITOR_TEST_FLAG_NO_STORED);
+  emulate_hotplug (test_setup);
+  check_monitor_configuration (&test_case);
+}
+
 static void
 meta_test_monitor_custom_vertical_config (void)
 {
@@ -5310,6 +5405,8 @@ init_monitor_tests (void)
                     meta_test_monitor_no_outputs);
   add_monitor_test ("/backends/monitor/underscanning-config",
                     meta_test_monitor_underscanning_config);
+  add_monitor_test ("/backends/monitor/preferred-non-first-mode",
+                    meta_test_monitor_preferred_non_first_mode);
 
   add_monitor_test ("/backends/monitor/custom/vertical-config",
                     meta_test_monitor_custom_vertical_config);