[mutter/gnome-3-34] tests/monitor-unit-tests: Add window tiling hot plug test



commit 9ed33dc72e9d2c1e6f6ac21a7dc8c87cbd0ae9ee
Author: Jonas Ã…dahl <jadahl gmail com>
Date:   Fri Nov 1 13:38:25 2019 +0100

    tests/monitor-unit-tests: Add window tiling hot plug test
    
    This test that we handle hot plugs correctly together with tiled
    windows.
    
    https://gitlab.gnome.org/GNOME/mutter/merge_requests/912

 src/core/window-private.h      |   1 +
 src/tests/monitor-unit-tests.c | 103 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 104 insertions(+)
---
diff --git a/src/core/window-private.h b/src/core/window-private.h
index dd89fdc90..62f97fba2 100644
--- a/src/core/window-private.h
+++ b/src/core/window-private.h
@@ -629,6 +629,7 @@ void        meta_window_unmanage           (MetaWindow  *window,
 void        meta_window_unmanage_on_idle   (MetaWindow *window);
 void        meta_window_queue              (MetaWindow  *window,
                                             guint queuebits);
+META_EXPORT_TEST
 void        meta_window_tile               (MetaWindow        *window,
                                             MetaTileMode       mode);
 MetaTileMode meta_window_get_tile_mode     (MetaWindow        *window);
diff --git a/src/tests/monitor-unit-tests.c b/src/tests/monitor-unit-tests.c
index 250bcd67d..c03c17e8d 100644
--- a/src/tests/monitor-unit-tests.c
+++ b/src/tests/monitor-unit-tests.c
@@ -28,6 +28,7 @@
 #include "backends/meta-monitor-config-migration.h"
 #include "backends/meta-monitor-config-store.h"
 #include "backends/meta-output.h"
+#include "core/window-private.h"
 #include "meta-backend-test.h"
 #include "tests/meta-monitor-manager-test.h"
 #include "tests/monitor-test-utils.h"
@@ -5760,6 +5761,105 @@ meta_test_monitor_migrated_wiggle_discard (void)
     g_error ("Failed to remove test data output file: %s", error->message);
 }
 
+static gboolean
+quit_main_loop (gpointer data)
+{
+  GMainLoop *loop = data;
+
+  g_main_loop_quit (loop);
+
+  return G_SOURCE_REMOVE;
+}
+
+static void
+dispatch (void)
+{
+  GMainLoop *loop;
+
+  loop = g_main_loop_new (NULL, FALSE);
+  meta_later_add (META_LATER_BEFORE_REDRAW,
+                  quit_main_loop,
+                  loop,
+                  NULL);
+  g_main_loop_run (loop);
+}
+
+static TestClient *
+create_test_window (const char *window_name)
+{
+  TestClient *test_client;
+  static int client_count = 0;
+  g_autofree char *client_name = NULL;
+  g_autoptr (GError) error = NULL;
+
+  client_name = g_strdup_printf ("test_client_%d", client_count++);
+  test_client = test_client_new (client_name, META_WINDOW_CLIENT_TYPE_WAYLAND,
+                                 &error);
+  if (!test_client)
+    g_error ("Failed to launch test client: %s", error->message);
+
+  if (!test_client_do (test_client, &error,
+                       "create", window_name,
+                       NULL))
+    g_error ("Failed to create window: %s", error->message);
+
+  return test_client;
+}
+
+static void
+meta_test_monitor_wm_tiling (void)
+{
+  MonitorTestCase test_case = initial_test_case;
+  MetaMonitorTestSetup *test_setup;
+  g_autoptr (GError) error = NULL;
+
+  test_setup = create_monitor_test_setup (&test_case,
+                                          MONITOR_TEST_FLAG_NO_STORED);
+  emulate_hotplug (test_setup);
+
+  /*
+   * 1) Start with two monitors connected.
+   * 2) Tile it on the second monitor.
+   * 3) Unplug both monitors.
+   * 4) Replug in first monitor.
+   */
+
+  const char *test_window_name= "window1";
+  TestClient *test_client = create_test_window (test_window_name);
+
+  if (!test_client_do (test_client, &error,
+                       "show", test_window_name,
+                       NULL))
+    g_error ("Failed to show the window: %s", error->message);
+
+  MetaWindow *test_window =
+    test_client_find_window (test_client,
+                             test_window_name,
+                             &error);
+  if (!test_window)
+    g_error ("Failed to find the window: %s", error->message);
+  test_client_wait_for_window_shown (test_client, test_window);
+
+  meta_window_tile (test_window, META_TILE_MAXIMIZED);
+  meta_window_move_to_monitor (test_window, 1);
+  check_test_client_state (test_client);
+
+  fprintf(stderr, ":::: %s:%d %s() - UNPLUGGING\n", __FILE__, __LINE__, __func__);
+
+  test_case.setup.n_outputs = 0;
+  test_setup = create_monitor_test_setup (&test_case,
+                                          MONITOR_TEST_FLAG_NO_STORED);
+  emulate_hotplug (test_setup);
+  test_case.setup.n_outputs = 1;
+  test_setup = create_monitor_test_setup (&test_case,
+                                          MONITOR_TEST_FLAG_NO_STORED);
+  emulate_hotplug (test_setup);
+
+  dispatch ();
+
+  test_client_destroy (test_client);
+}
+
 static void
 meta_test_monitor_migrated_wiggle (void)
 {
@@ -6015,6 +6115,9 @@ init_monitor_tests (void)
                     meta_test_monitor_migrated_wiggle);
   add_monitor_test ("/backends/monitor/migrated/wiggle-discard",
                     meta_test_monitor_migrated_wiggle_discard);
+
+  add_monitor_test ("/backends/monitor/wm/tiling",
+                    meta_test_monitor_wm_tiling);
 }
 
 void


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