[mutter] test-runner: Add 'assert_focused' command



commit 51f9e04ef1fa8cd7298044ac8c82e83bea425770
Author: Marco Trevisan (Treviño) <mail 3v1n0 net>
Date:   Tue Nov 13 08:37:14 2018 +0100

    test-runner: Add 'assert_focused' command
    
    This allows to verify which window should have the focus, which might not
    be the same as the top of the stack.
    
    It's possible to assert the case where there's no focused window using
    "NONE" as parameter.
    
    https://gitlab.gnome.org/GNOME/mutter/merge_requests/307

 src/tests/test-runner.c | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)
---
diff --git a/src/tests/test-runner.c b/src/tests/test-runner.c
index 1300f8310..2287769c7 100644
--- a/src/tests/test-runner.c
+++ b/src/tests/test-runner.c
@@ -237,6 +237,37 @@ test_case_assert_stacking (TestCase *test,
   return *error == NULL;
 }
 
+static gboolean
+test_case_assert_focused (TestCase    *test,
+                          const char  *expected_window,
+                          GError     **error)
+{
+  MetaDisplay *display = meta_get_display ();
+
+  if (!display->focus_window)
+    {
+      if (g_strcmp0 (expected_window, "none") != 0)
+        {
+          g_set_error (error, TEST_RUNNER_ERROR, TEST_RUNNER_ERROR_ASSERTION_FAILED,
+                       "focus: expected='%s', actual='none'", expected_window);
+        }
+    }
+  else
+    {
+      const char *focused = display->focus_window->title;
+
+      if (g_str_has_prefix (focused, "test/"))
+        focused += 5;
+
+      if (g_strcmp0 (focused, expected_window) != 0)
+        g_set_error (error, TEST_RUNNER_ERROR, TEST_RUNNER_ERROR_ASSERTION_FAILED,
+                     "focus: expected='%s', actual='%s'",
+                     expected_window, focused);
+    }
+
+  return *error == NULL;
+}
+
 static gboolean
 test_case_check_xserver_stacking (TestCase *test,
                                   GError  **error)
@@ -526,6 +557,11 @@ test_case_do (TestCase *test,
       if (!test_case_check_xserver_stacking (test, error))
         return FALSE;
     }
+  else if (strcmp (argv[0], "assert_focused") == 0)
+    {
+      if (!test_case_assert_focused (test, argv[1], error))
+        return FALSE;
+    }
   else
     {
       BAD_COMMAND("Unknown command %s", argv[0]);


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