From ef3ea0a59c253d9f27b508d13b231c9c29fec121 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Tue, 13 Nov 2018 01:37:14 -0600 Subject: [PATCH] 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. --- src/tests/test-runner.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/tests/test-runner.c b/src/tests/test-runner.c index 612d54cc5..feeb7466f 100644 --- a/src/tests/test-runner.c +++ b/src/tests/test-runner.c @@ -237,6 +237,38 @@ 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_ascii_strcasecmp (expected_window, "null") != 0 && + g_ascii_strcasecmp (expected_window, "none") != 0 && + g_strcmp0 (expected_window, "0") != 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, + "stacking: expected='%s', actual='%s'", + expected_window, focused); + } + + return *error == NULL; +} + static gboolean test_case_check_xserver_stacking (TestCase *test, GError **error) @@ -523,6 +555,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]);