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
(cherry picked from commit 51f9e04ef1)
This commit is contained in:
Marco Trevisan (Treviño) 2018-11-13 08:37:14 +01:00
parent 29ffaa6f89
commit 2021a7206c

View File

@ -274,6 +274,37 @@ test_case_assert_stacking (TestCase *test,
return *error == NULL; 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 static gboolean
test_case_check_xserver_stacking (TestCase *test, test_case_check_xserver_stacking (TestCase *test,
GError **error) GError **error)
@ -560,6 +591,11 @@ test_case_do (TestCase *test,
if (!test_case_check_xserver_stacking (test, error)) if (!test_case_check_xserver_stacking (test, error))
return FALSE; return FALSE;
} }
else if (strcmp (argv[0], "assert_focused") == 0)
{
if (!test_case_assert_focused (test, argv[1], error))
return FALSE;
}
else else
{ {
BAD_COMMAND("Unknown command %s", argv[0]); BAD_COMMAND("Unknown command %s", argv[0]);