[mutter] tests: Check that the monitors are properly generated



commit d0c9d2dc7b3ecdb579e83750af411cfc8e94a0a3
Author: Jonas Ådahl <jadahl gmail com>
Date:   Tue Dec 13 10:58:41 2016 +0800

    tests: Check that the monitors are properly generated
    
    https://bugzilla.gnome.org/show_bug.cgi?id=777732

 src/tests/monitor-unit-tests.c |  141 ++++++++++++++++++++++++++++++++++++++--
 1 files changed, 136 insertions(+), 5 deletions(-)
---
diff --git a/src/tests/monitor-unit-tests.c b/src/tests/monitor-unit-tests.c
index 9d5a75a..54ea615 100644
--- a/src/tests/monitor-unit-tests.c
+++ b/src/tests/monitor-unit-tests.c
@@ -23,6 +23,7 @@
 
 #include "backends/meta-backend-private.h"
 #include "backends/meta-logical-monitor.h"
+#include "backends/meta-monitor.h"
 #include "tests/meta-monitor-manager-test.h"
 
 #define ALL_TRANSFORMS ((1 << (META_MONITOR_TRANSFORM_FLIPPED_270 + 1)) - 1)
@@ -30,6 +31,7 @@
 #define MAX_N_MODES 10
 #define MAX_N_OUTPUTS 10
 #define MAX_N_CRTCS 10
+#define MAX_N_MONITORS 10
 #define MAX_N_LOGICAL_MONITORS 10
 
 typedef struct _MonitorTestCaseMode
@@ -70,6 +72,14 @@ typedef struct _MonitorTestCaseSetup
   int n_crtcs;
 } MonitorTestCaseSetup;
 
+typedef struct _MonitorTestCaseMonitor
+{
+  long outputs[MAX_N_OUTPUTS];
+  int n_outputs;
+  int width_mm;
+  int height_mm;
+} MonitorTestCaseMonitor;
+
 typedef struct _MonitorTestCaseLogicalMonitor
 {
   MetaRectangle layout;
@@ -78,6 +88,8 @@ typedef struct _MonitorTestCaseLogicalMonitor
 
 typedef struct _MonitorTestCaseExpect
 {
+  MonitorTestCaseMonitor monitors[MAX_N_MONITORS];
+  int n_monitors;
   MonitorTestCaseLogicalMonitor logical_monitors[MAX_N_LOGICAL_MONITORS];
   int n_logical_monitors;
   int n_outputs;
@@ -120,8 +132,8 @@ static MonitorTestCase initial_test_case = {
         .preferred_mode = 0,
         .possible_crtcs = { 1 },
         .n_possible_crtcs = 1,
-        .width_mm = 222,
-        .height_mm = 125
+        .width_mm = 220,
+        .height_mm = 124
       }
     },
     .n_outputs = 2,
@@ -137,6 +149,21 @@ static MonitorTestCase initial_test_case = {
   },
 
   .expect = {
+    .monitors = {
+      {
+        .outputs = { 0 },
+        .n_outputs = 1,
+        .width_mm = 222,
+        .height_mm = 125
+      },
+      {
+        .outputs = { 1 },
+        .n_outputs = 1,
+        .width_mm = 220,
+        .height_mm = 124
+      }
+    },
+    .n_monitors = 2,
     .logical_monitors = {
       {
         .layout = { .x = 0, .y = 0, .width = 1024, .height = 768 },
@@ -155,12 +182,30 @@ static MonitorTestCase initial_test_case = {
   }
 };
 
+static MetaOutput *
+output_from_winsys_id (MetaMonitorManager *monitor_manager,
+                       long                winsys_id)
+{
+  unsigned int i;
+
+  for (i = 0; i < monitor_manager->n_outputs; i++)
+    {
+      MetaOutput *output = &monitor_manager->outputs[i];
+
+      if (output->winsys_id == winsys_id)
+        return output;
+    }
+
+  return NULL;
+}
+
 static void
 check_monitor_configuration (MonitorTestCase *test_case)
 {
   MetaBackend *backend = meta_get_backend ();
   MetaMonitorManager *monitor_manager =
     meta_backend_get_monitor_manager (backend);
+  GList *monitors;
   GList *logical_monitors;
   int n_logical_monitors;
   GList *l;
@@ -171,6 +216,35 @@ check_monitor_configuration (MonitorTestCase *test_case)
   g_assert ((int) monitor_manager->n_outputs == test_case->expect.n_outputs);
   g_assert ((int) monitor_manager->n_crtcs == test_case->expect.n_crtcs);
 
+  monitors = meta_monitor_manager_get_monitors (monitor_manager);
+  g_assert ((int) g_list_length (monitors) == test_case->expect.n_monitors);
+  for (l = monitors, i = 0; l; l = l->next, i++)
+    {
+      MetaMonitor *monitor = l->data;
+      GList *outputs;
+      GList *l_output;
+      int j;
+      int width_mm, height_mm;
+
+      outputs = meta_monitor_get_outputs (monitor);
+
+      g_assert ((int) g_list_length (outputs) ==
+                test_case->expect.monitors[i].n_outputs);
+
+      for (l_output = outputs, j = 0; l_output; l_output = l_output->next, j++)
+        {
+          MetaOutput *output = l_output->data;
+          long winsys_id = test_case->expect.monitors[i].outputs[j];
+
+          g_assert (output == output_from_winsys_id (monitor_manager,
+                                                     winsys_id));
+        }
+
+      meta_monitor_get_physical_dimensions (monitor, &width_mm, &height_mm);
+      g_assert (width_mm == test_case->expect.monitors[i].width_mm);
+      g_assert (height_mm == test_case->expect.monitors[i].height_mm);
+    }
+
   n_logical_monitors =
     meta_monitor_manager_get_num_logical_monitors (monitor_manager);
   g_assert (n_logical_monitors == test_case->expect.n_logical_monitors);
@@ -288,7 +362,7 @@ create_monitor_test_setup (MonitorTestCase *test_case)
 
       test_setup->outputs[i] = (MetaOutput) {
         .crtc = crtc,
-        .winsys_id = i + 1,
+        .winsys_id = i,
         .name = g_strdup_printf ("LVDS%d", i + 1),
         .vendor = g_strdup ("MetaProducts Inc."),
         .product = g_strdup ("unknown"),
@@ -343,6 +417,15 @@ meta_test_monitor_one_disconnected_linear_config (void)
   test_case.setup.n_outputs = 1;
 
   test_case.expect = (MonitorTestCaseExpect) {
+    .monitors = {
+      {
+        .outputs = { 0 },
+        .n_outputs = 1,
+        .width_mm = 222,
+        .height_mm = 125
+      }
+    },
+    .n_monitors = 1,
     .logical_monitors = {
       {
         .layout = { .x = 0, .y = 0, .width = 1024, .height = 768 },
@@ -384,8 +467,8 @@ meta_test_monitor_one_off_linear_config (void)
       .preferred_mode = 0,
       .possible_crtcs = { 1 },
       .n_possible_crtcs = 1,
-      .width_mm = 222,
-      .height_mm = 125
+      .width_mm = 224,
+      .height_mm = 126
     }
   };
 
@@ -397,6 +480,21 @@ meta_test_monitor_one_off_linear_config (void)
   test_case.setup.crtcs[1].current_mode = -1;
 
   test_case.expect = (MonitorTestCaseExpect) {
+    .monitors = {
+      {
+        .outputs = { 0 },
+        .n_outputs = 1,
+        .width_mm = 222,
+        .height_mm = 125
+      },
+      {
+        .outputs = { 1 },
+        .n_outputs = 1,
+        .width_mm = 224,
+        .height_mm = 126
+      }
+    },
+    .n_monitors = 2,
     .logical_monitors = {
       {
         .layout = { .x = 0, .y = 0, .width = 1024, .height = 768 },
@@ -464,6 +562,15 @@ meta_test_monitor_preferred_linear_config (void)
     },
 
     .expect = {
+      .monitors = {
+        {
+          .outputs = { 0 },
+          .n_outputs = 1,
+          .width_mm = 222,
+          .height_mm = 125
+        }
+      },
+      .n_monitors = 1,
       .logical_monitors = {
         {
           .layout = { .x = 0, .y = 0, .width = 1024, .height = 768 },
@@ -550,6 +657,15 @@ meta_test_monitor_tiled_linear_config (void)
     },
 
     .expect = {
+      .monitors = {
+        {
+          .outputs = { 0, 1 },
+          .n_outputs = 2,
+          .width_mm = 222,
+          .height_mm = 125,
+        }
+      },
+      .n_monitors = 1,
       .logical_monitors = {
         {
           .layout = { .x = 0, .y = 0, .width = 800, .height = 600 },
@@ -626,6 +742,21 @@ meta_test_monitor_hidpi_linear_config (void)
     },
 
     .expect = {
+      .monitors = {
+        {
+          .outputs = { 0 },
+          .n_outputs = 1,
+          .width_mm = 150,
+          .height_mm = 85
+        },
+        {
+          .outputs = { 1 },
+          .n_outputs = 1,
+          .width_mm = 222,
+          .height_mm = 125
+        }
+      },
+      .n_monitors = 2,
       .logical_monitors = {
         {
           .layout = { .x = 0, .y = 0, .width = 1280, .height = 720 },


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