[mutter] monitor-unit-tests: Add tests to verify config manager history



commit db68a2a91c27f7bdb2a84c23c81da4f29a8c2030
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date:   Tue Jul 27 18:01:47 2021 +0200

    monitor-unit-tests: Add tests to verify config manager history
    
    Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1233>

 src/tests/monitor-unit-tests.c | 163 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 163 insertions(+)
---
diff --git a/src/tests/monitor-unit-tests.c b/src/tests/monitor-unit-tests.c
index d04af8055a..d79d4f37c4 100644
--- a/src/tests/monitor-unit-tests.c
+++ b/src/tests/monitor-unit-tests.c
@@ -276,6 +276,160 @@ emulate_hotplug (MetaMonitorTestSetup *test_setup)
   g_usleep (G_USEC_PER_SEC / 100);
 }
 
+static void
+meta_test_monitor_config_store_set_current_on_empty (void)
+{
+  g_autoptr (MetaMonitorsConfig) linear_config = NULL;
+  MetaBackend *backend = meta_get_backend ();
+  MetaMonitorManager *monitor_manager =
+    meta_backend_get_monitor_manager (backend);
+  MetaMonitorConfigManager *config_manager = monitor_manager->config_manager;
+  MetaMonitorsConfig *old_current;
+
+  linear_config = meta_monitor_config_manager_create_linear (config_manager);
+  old_current = meta_monitor_config_manager_get_current (config_manager);
+
+  g_assert_null (old_current);
+  g_assert_nonnull (linear_config);
+
+  meta_monitor_config_manager_set_current (config_manager, linear_config);
+
+  g_assert (meta_monitor_config_manager_get_current (config_manager) ==
+            linear_config);
+  g_assert (meta_monitor_config_manager_get_current (config_manager) !=
+            old_current);
+  g_assert_null (meta_monitor_config_manager_get_previous (config_manager));
+  g_assert_null (meta_monitor_config_manager_pop_previous (config_manager));
+}
+
+static void
+meta_test_monitor_config_store_set_current (void)
+{
+  g_autoptr (MetaMonitorsConfig) linear_config = NULL;
+  g_autoptr (MetaMonitorsConfig) fallback_config = NULL;
+  MetaBackend *backend = meta_get_backend ();
+  MetaMonitorManager *monitor_manager =
+    meta_backend_get_monitor_manager (backend);
+  MetaMonitorConfigManager *config_manager = monitor_manager->config_manager;
+  MetaMonitorsConfig *old_current;
+
+  fallback_config =
+    meta_monitor_config_manager_create_fallback (config_manager);
+  linear_config = meta_monitor_config_manager_create_linear (config_manager);
+
+  g_assert_nonnull (linear_config);
+  g_assert_nonnull (fallback_config);
+
+  meta_monitor_config_manager_set_current (config_manager, fallback_config);
+  g_assert (meta_monitor_config_manager_get_current (config_manager) ==
+            fallback_config);
+
+  old_current = meta_monitor_config_manager_get_current (config_manager);
+  meta_monitor_config_manager_set_current (config_manager, linear_config);
+
+  g_assert (old_current != linear_config);
+  g_assert_nonnull (old_current);
+  g_assert (meta_monitor_config_manager_get_current (config_manager) ==
+            linear_config);
+  g_assert (meta_monitor_config_manager_get_previous (config_manager) ==
+            old_current);
+  g_assert (meta_monitor_config_manager_pop_previous (config_manager) ==
+            old_current);
+
+  g_assert_null (meta_monitor_config_manager_get_previous (config_manager));
+  g_assert_null (meta_monitor_config_manager_pop_previous (config_manager));
+}
+
+static void
+meta_test_monitor_config_store_set_current_max_size (void)
+{
+  /* Keep this in sync with CONFIG_HISTORY_MAX_SIZE */
+  const unsigned int config_history_max_size = 3;
+  g_autolist (MetaMonitorsConfig) added = NULL;
+  MetaBackend *backend = meta_get_backend ();
+  MetaMonitorManager *monitor_manager =
+    meta_backend_get_monitor_manager (backend);
+  MetaMonitorConfigManager *config_manager = monitor_manager->config_manager;
+  MetaMonitorsConfig *previous = NULL;
+  MetaMonitorsConfig *config;
+  unsigned int i;
+
+  for (i = 0; i < config_history_max_size; i++)
+    {
+      g_autoptr (MetaMonitorsConfig) linear_config = NULL;
+
+      linear_config = meta_monitor_config_manager_create_linear (config_manager);
+      g_assert_nonnull (linear_config);
+      g_assert (!g_list_find (added, linear_config));
+
+      if (i > 0)
+        {
+          g_assert (previous !=
+                    meta_monitor_config_manager_get_current (config_manager));
+        }
+
+      previous = meta_monitor_config_manager_get_current (config_manager);
+      meta_monitor_config_manager_set_current (config_manager, linear_config);
+      added = g_list_prepend (added, g_object_ref (linear_config));
+
+      g_assert (meta_monitor_config_manager_get_current (config_manager)
+                == linear_config);
+
+      g_assert (meta_monitor_config_manager_get_previous (config_manager)
+                == previous);
+    }
+
+  for (i = 0; i < config_history_max_size - 1; i++)
+    {
+      g_autoptr (MetaMonitorsConfig) fallback = NULL;
+
+      fallback = meta_monitor_config_manager_create_fallback (config_manager);
+      g_assert_nonnull (fallback);
+
+      meta_monitor_config_manager_set_current (config_manager, fallback);
+      added = g_list_prepend (added, g_steal_pointer (&fallback));
+    }
+
+  g_assert_cmpuint (g_list_length (added), >, config_history_max_size);
+
+  config = meta_monitor_config_manager_get_current (config_manager);
+  g_assert (config == g_list_nth_data (added, 0));
+
+  for (i = 0; i < config_history_max_size; i++)
+    {
+      config = meta_monitor_config_manager_get_previous (config_manager);
+      g_assert_nonnull (config);
+      g_assert (meta_monitor_config_manager_pop_previous (config_manager)
+                == config);
+      g_assert (config == g_list_nth_data (added, i + 1));
+    }
+
+  config = meta_monitor_config_manager_get_previous (config_manager);
+  g_assert_null (config);
+  g_assert_null (meta_monitor_config_manager_pop_previous (config_manager));
+  g_assert (config != g_list_nth_data (added, config_history_max_size));
+  g_assert_nonnull (g_list_nth_data (added, config_history_max_size + 1));
+}
+
+static void
+meta_test_monitor_config_store_set_current_null (void)
+{
+  MetaBackend *backend = meta_get_backend ();
+  MetaMonitorManager *monitor_manager =
+    meta_backend_get_monitor_manager (backend);
+  MetaMonitorConfigManager *config_manager = monitor_manager->config_manager;
+  MetaMonitorsConfig *previous;
+
+  previous = meta_monitor_config_manager_get_current (config_manager);
+  g_assert_null (previous);
+
+  meta_monitor_config_manager_set_current (config_manager, NULL);
+
+  g_assert_null (meta_monitor_config_manager_get_current (config_manager));
+  g_assert_null (meta_monitor_config_manager_get_previous (config_manager));
+  g_assert_null (meta_monitor_config_manager_pop_previous (config_manager));
+}
+
 static void
 meta_test_monitor_one_disconnected_linear_config (void)
 {
@@ -6888,6 +7042,15 @@ init_monitor_tests (void)
 {
   meta_monitor_manager_test_init_test_setup (create_initial_test_setup);
 
+  add_monitor_test ("/backends/monitor/config-store/set_current-on-empty",
+                    meta_test_monitor_config_store_set_current_on_empty);
+  add_monitor_test ("/backends/monitor/config-store/set_current",
+                    meta_test_monitor_config_store_set_current);
+  add_monitor_test ("/backends/monitor/config-store/set_current-max-size",
+                    meta_test_monitor_config_store_set_current_max_size);
+  add_monitor_test ("/backends/monitor/config-store/set_current-null",
+                    meta_test_monitor_config_store_set_current_null);
+
   add_monitor_test ("/backends/monitor/initial-linear-config",
                     meta_test_monitor_initial_linear_config);
   add_monitor_test ("/backends/monitor/one-disconnected-linear-config",


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