[mutter] monitor-unit-tests: Check monitor <-> logical monitor relationships



commit 6fa8238ebf5f1a1854b748533ad99ea15d647896
Author: Jonas Ådahl <jadahl gmail com>
Date:   Thu Jan 19 14:09:55 2017 +0800

    monitor-unit-tests: Check monitor <-> logical monitor relationships
    
    Make sure that each logical monitor owns the expected actual monitors.
    This currently needs special care when dealing with laptop lid the
    configuration, as the MetaMonitorConfigManager path still deosn't
    handle restoring the previous configuration, meaning the logical
    monitor with the external monitor will continue being primary.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=777732

 src/tests/monitor-store-unit-tests.c |    4 +
 src/tests/monitor-unit-tests.c       |  108 ++++++++++++++++++++++++++++++++++
 2 files changed, 112 insertions(+), 0 deletions(-)
---
diff --git a/src/tests/monitor-store-unit-tests.c b/src/tests/monitor-store-unit-tests.c
index 2d48990..39d370d 100644
--- a/src/tests/monitor-store-unit-tests.c
+++ b/src/tests/monitor-store-unit-tests.c
@@ -146,6 +146,10 @@ check_monitor_configuration (MetaMonitorConfigStore        *config_store,
                        ==,
                        config_expect->logical_monitors[i].is_presentation);
 
+      g_assert_cmpint ((int) g_list_length (logical_monitor_config->monitor_configs),
+                       ==,
+                       config_expect->logical_monitors[i].n_monitors);
+
       for (k = logical_monitor_config->monitor_configs, j = 0;
            k;
            k = k->next, j++)
diff --git a/src/tests/monitor-unit-tests.c b/src/tests/monitor-unit-tests.c
index f6fc332..7929a9c 100644
--- a/src/tests/monitor-unit-tests.c
+++ b/src/tests/monitor-unit-tests.c
@@ -155,6 +155,8 @@ typedef struct _MonitorTestCaseLogicalMonitor
 {
   MetaRectangle layout;
   int scale;
+  int monitors[MAX_N_MONITORS];
+  int n_monitors;
 } MonitorTestCaseLogicalMonitor;
 
 typedef struct _MonitorTestCaseCrtcExpect
@@ -273,10 +275,14 @@ static MonitorTestCase initial_test_case = {
     .n_monitors = 2,
     .logical_monitors = {
       {
+        .monitors = { 0 },
+        .n_monitors = 1,
         .layout = { .x = 0, .y = 0, .width = 1024, .height = 768 },
         .scale = 1
       },
       {
+        .monitors = { 1 },
+        .n_monitors = 1,
         .layout = { .x = 1024, .y = 0, .width = 1024, .height = 768 },
         .scale = 1
       }
@@ -396,6 +402,7 @@ check_logical_monitor (MonitorTestCase               *test_case,
   MetaOutput *primary_output;
   GList *monitors;
   GList *l;
+  int i;
 
   logical_monitor = logical_monitor_from_layout (monitor_manager,
                                                  &test_logical_monitor->layout);
@@ -422,6 +429,19 @@ check_logical_monitor (MonitorTestCase               *test_case,
 
   primary_output = NULL;
   monitors = meta_logical_monitor_get_monitors (logical_monitor);
+  g_assert_cmpint ((int) g_list_length (monitors),
+                   ==,
+                   test_logical_monitor->n_monitors);
+
+  for (i = 0; i < test_logical_monitor->n_monitors; i++)
+    {
+      MetaMonitor *monitor =
+        g_list_nth (monitor_manager->monitors,
+                    test_logical_monitor->monitors[i])->data;
+
+      g_assert_nonnull (g_list_find (monitors, monitor));
+    }
+
   for (l = monitors; l; l = l->next)
     {
       MetaMonitor *monitor = l->data;
@@ -829,6 +849,8 @@ meta_test_monitor_one_disconnected_linear_config (void)
     .n_monitors = 1,
     .logical_monitors = {
       {
+        .monitors = { 0 },
+        .n_monitors = 1,
         .layout = { .x = 0, .y = 0, .width = 1024, .height = 768 },
         .scale = 1
       },
@@ -936,10 +958,14 @@ meta_test_monitor_one_off_linear_config (void)
     .n_monitors = 2,
     .logical_monitors = {
       {
+        .monitors = { 0 },
+        .n_monitors = 1,
         .layout = { .x = 0, .y = 0, .width = 1024, .height = 768 },
         .scale = 1
       },
       {
+        .monitors = { 1 },
+        .n_monitors = 1,
         .layout = { .x = 1024, .y = 0, .width = 1024, .height = 768 },
         .scale = 1
       },
@@ -1056,6 +1082,8 @@ meta_test_monitor_preferred_linear_config (void)
       .n_monitors = 1,
       .logical_monitors = {
         {
+          .monitors = { 0 },
+          .n_monitors = 1,
           .layout = { .x = 0, .y = 0, .width = 1024, .height = 768 },
           .scale = 1
         },
@@ -1178,6 +1206,8 @@ meta_test_monitor_tiled_linear_config (void)
       .n_monitors = 1,
       .logical_monitors = {
         {
+          .monitors = { 0 },
+          .n_monitors = 1,
           .layout = { .x = 0, .y = 0, .width = 800, .height = 600 },
           .scale = 1
         },
@@ -1308,10 +1338,14 @@ meta_test_monitor_hidpi_linear_config (void)
       .n_monitors = 2,
       .logical_monitors = {
         {
+          .monitors = { 0 },
+          .n_monitors = 1,
           .layout = { .x = 0, .y = 0, .width = 1280, .height = 720 },
           .scale = 2
         },
         {
+          .monitors = { 1 },
+          .n_monitors = 1,
           .layout = { .x = 1280, .y = 0, .width = 1024, .height = 768 },
           .scale = 1
         }
@@ -1442,10 +1476,14 @@ meta_test_monitor_suggested_config (void)
        */
       .logical_monitors = {
         {
+          .monitors = { 0 },
+          .n_monitors = 1,
           .layout = { .x = 1024, .y = 758, .width = 800, .height = 600 },
           .scale = 1
         },
         {
+          .monitors = { 1 },
+          .n_monitors = 1,
           .layout = { .x = 0, .y = 0, .width = 1024, .height = 768 },
           .scale = 1
         }
@@ -1571,6 +1609,8 @@ meta_test_monitor_limited_crtcs (void)
       .n_monitors = 2,
       .logical_monitors = {
         {
+          .monitors = { 0 },
+          .n_monitors = 1,
           .layout = { .x = 0, .y = 0, .width = 1024, .height = 768 },
           .scale = 1
         },
@@ -1703,10 +1743,14 @@ meta_test_monitor_lid_switch_config (void)
       .n_monitors = 2,
       .logical_monitors = {
         {
+          .monitors = { 0 },
+          .n_monitors = 1,
           .layout = { .x = 0, .y = 0, .width = 1024, .height = 768 },
           .scale = 1
         },
         {
+          .monitors = { 1 },
+          .n_monitors = 1,
           .layout = { .x = 1024, .y = 0, .width = 1024, .height = 768 },
           .scale = 1
         }
@@ -1743,6 +1787,12 @@ meta_test_monitor_lid_switch_config (void)
   meta_monitor_manager_test_set_is_lid_closed (monitor_manager_test, TRUE);
   meta_monitor_manager_lid_is_closed_changed (monitor_manager);
 
+  test_case.expect.logical_monitors[0] = (MonitorTestCaseLogicalMonitor) {
+    .monitors = { 1 },
+    .n_monitors = 1,
+    .layout = {.x = 0, .y = 0, .width = 1024, .height = 768 },
+    .scale = 1
+  };
   test_case.expect.n_logical_monitors = 1;
   test_case.expect.screen_width = 1024;
   test_case.expect.monitors[0].current_mode = -1;
@@ -1760,6 +1810,46 @@ meta_test_monitor_lid_switch_config (void)
   test_case.expect.crtcs[0].current_mode = 0;
   test_case.expect.crtcs[1].current_mode = 0;
 
+  if (!is_using_monitor_config_manager ())
+    {
+      test_case.expect.logical_monitors[0] = (MonitorTestCaseLogicalMonitor) {
+          .monitors = { 0 },
+          .n_monitors = 1,
+          .layout = {.x = 0, .y = 0, .width = 1024, .height = 768 },
+          .scale = 1
+      };
+      test_case.expect.logical_monitors[1] = (MonitorTestCaseLogicalMonitor) {
+          .monitors = { 1 },
+          .n_monitors = 1,
+          .layout = {.x = 1024, .y = 0, .width = 1024, .height = 768 },
+          .scale = 1
+      };
+      test_case.expect.n_logical_monitors = 2;
+      test_case.expect.primary_logical_monitor = 0;
+    }
+  else
+    {
+      /*
+       * FIXME: The above expectation is correct, but MetaMonitorConfigManager
+       * doesn't support restoring previous configurations yet, so it'll
+       * pick keep the external monitor as primary and put it first.
+       */
+      test_case.expect.logical_monitors[0] = (MonitorTestCaseLogicalMonitor) {
+          .monitors = { 1 },
+          .n_monitors = 1,
+          .layout = {.x = 0, .y = 0, .width = 1024, .height = 768 },
+          .scale = 1
+      };
+      test_case.expect.logical_monitors[1] = (MonitorTestCaseLogicalMonitor) {
+          .monitors = { 0 },
+          .n_monitors = 1,
+          .layout = {.x = 1024, .y = 0, .width = 1024, .height = 768 },
+          .scale = 1
+      };
+      test_case.expect.n_logical_monitors = 2;
+      test_case.expect.primary_logical_monitor = 0;
+    }
+
   check_monitor_configuration (&test_case);
 }
 
@@ -1857,10 +1947,14 @@ meta_test_monitor_lid_opened_config (void)
       .n_monitors = 2,
       .logical_monitors = {
         {
+          .monitors = { 1 },
+          .n_monitors = 1,
           .layout = { .x = 0, .y = 0, .width = 1024, .height = 768 },
           .scale = 1
         },
         {
+          .monitors = { 0 },
+          .n_monitors = 1,
           .layout = { .x = 1024, .y = 0, .width = 1024, .height = 768 },
           .scale = 1
         }
@@ -1975,6 +2069,8 @@ meta_test_monitor_lid_closed_no_external (void)
       .n_monitors = 1,
       .logical_monitors = {
         {
+          .monitors = { 0 },
+          .n_monitors = 1,
           .layout = { .x = 0, .y = 0, .width = 1024, .height = 768 },
           .scale = 1
         }
@@ -2106,6 +2202,8 @@ meta_test_monitor_underscanning_config (void)
       .n_monitors = 1,
       .logical_monitors = {
         {
+          .monitors = { 0 },
+          .n_monitors = 1,
           .layout = { .x = 0, .y = 0, .width = 1024, .height = 768 },
           .scale = 1
         }
@@ -2229,10 +2327,14 @@ meta_test_monitor_custom_vertical_config (void)
       .n_monitors = 2,
       .logical_monitors = {
         {
+          .monitors = { 0 },
+          .n_monitors = 1,
           .layout = { .x = 0, .y = 0, .width = 1024, .height = 768 },
           .scale = 1
         },
         {
+          .monitors = { 1 },
+          .n_monitors = 1,
           .layout = { .x = 0, .y = 768, .width = 800, .height = 600 },
           .scale = 1
         }
@@ -2368,10 +2470,14 @@ meta_test_monitor_custom_primary_config (void)
       .n_monitors = 2,
       .logical_monitors = {
         {
+          .monitors = { 0 },
+          .n_monitors = 1,
           .layout = { .x = 0, .y = 0, .width = 1024, .height = 768 },
           .scale = 1
         },
         {
+          .monitors = { 1 },
+          .n_monitors = 1,
           .layout = { .x = 1024, .y = 0, .width = 800, .height = 600 },
           .scale = 1
         }
@@ -2470,6 +2576,8 @@ meta_test_monitor_custom_underscanning_config (void)
       .n_monitors = 1,
       .logical_monitors = {
         {
+          .monitors = { 0 },
+          .n_monitors = 1,
           .layout = { .x = 0, .y = 0, .width = 1024, .height = 768 },
           .scale = 1
         }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]