From 6fa8238ebf5f1a1854b748533ad99ea15d647896 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Thu, 19 Jan 2017 14:09:55 +0800 Subject: [PATCH] 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(+) diff --git a/src/tests/monitor-store-unit-tests.c b/src/tests/monitor-store-unit-tests.c index 2d48990e1..39d370d39 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 f6fc332c8..7929a9c29 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 }