[mutter] tests: Test scheduling a later MetaLater from a later callback works
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] tests: Test scheduling a later MetaLater from a later callback works
- Date: Fri, 26 Feb 2016 09:54:27 +0000 (UTC)
commit 821d737e2cce07002e53d311e98445e845ae8262
Author: Jonas Ådahl <jadahl gmail com>
Date: Tue Sep 22 16:21:01 2015 +0800
tests: Test scheduling a later MetaLater from a later callback works
The added test tests for the bug fixed by "MetaLater: Invoke later
callbacks queued by earlier ones".
https://bugzilla.gnome.org/show_bug.cgi?id=755605
src/tests/unit-tests.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 91 insertions(+), 0 deletions(-)
---
diff --git a/src/tests/unit-tests.c b/src/tests/unit-tests.c
index 9d67def..a3bdb4e 100644
--- a/src/tests/unit-tests.c
+++ b/src/tests/unit-tests.c
@@ -84,6 +84,95 @@ meta_test_util_later_order (void)
g_main_loop_unref (loop);
}
+typedef enum _MetaTestLaterScheduleFromLaterState
+{
+ META_TEST_LATER_EXPECT_CALC_SHOWING,
+ META_TEST_LATER_EXPECT_SYNC_STACK,
+ META_TEST_LATER_EXPECT_BEFORE_REDRAW,
+ META_TEST_LATER_FINISHED,
+} MetaTestLaterScheduleFromLaterState;
+
+typedef struct _MetaTestLaterScheduleFromLaterData
+{
+ GMainLoop *loop;
+ MetaTestLaterScheduleFromLaterState state;
+} MetaTestLaterScheduleFromLaterData;
+
+static gboolean
+test_later_schedule_from_later_sync_stack_callback (gpointer user_data);
+
+static gboolean
+test_later_schedule_from_later_calc_showing_callback (gpointer user_data)
+{
+ MetaTestLaterScheduleFromLaterData *data = user_data;
+
+ g_assert_cmpint (data->state, ==, META_TEST_LATER_EXPECT_CALC_SHOWING);
+
+ meta_later_add (META_LATER_SYNC_STACK,
+ test_later_schedule_from_later_sync_stack_callback,
+ data,
+ NULL);
+
+ data->state = META_TEST_LATER_EXPECT_SYNC_STACK;
+
+ return FALSE;
+}
+
+static gboolean
+test_later_schedule_from_later_sync_stack_callback (gpointer user_data)
+{
+ MetaTestLaterScheduleFromLaterData *data = user_data;
+
+ g_assert_cmpint (data->state, ==, META_TEST_LATER_EXPECT_SYNC_STACK);
+
+ data->state = META_TEST_LATER_EXPECT_BEFORE_REDRAW;
+
+ return FALSE;
+}
+
+static gboolean
+test_later_schedule_from_later_before_redraw_callback (gpointer user_data)
+{
+ MetaTestLaterScheduleFromLaterData *data = user_data;
+
+ g_assert_cmpint (data->state, ==, META_TEST_LATER_EXPECT_BEFORE_REDRAW);
+ data->state = META_TEST_LATER_FINISHED;
+ g_main_loop_quit (data->loop);
+
+ return FALSE;
+}
+
+static void
+meta_test_util_later_schedule_from_later (void)
+{
+ MetaTestLaterScheduleFromLaterData data;
+
+ data.loop = g_main_loop_new (NULL, FALSE);
+
+ /* Test that scheduling a MetaLater with 'when' being later than the one being
+ * invoked causes it to be invoked before any callback with a later 'when'
+ * value being invoked.
+ *
+ * The first and last callback is queued here. The one to be invoked in
+ * between is invoked in test_later_schedule_from_later_calc_showing_callback.
+ */
+ meta_later_add (META_LATER_CALC_SHOWING,
+ test_later_schedule_from_later_calc_showing_callback,
+ &data,
+ NULL);
+ meta_later_add (META_LATER_BEFORE_REDRAW,
+ test_later_schedule_from_later_before_redraw_callback,
+ &data,
+ NULL);
+
+ data.state = META_TEST_LATER_EXPECT_CALC_SHOWING;
+
+ g_main_loop_run (data.loop);
+ g_main_loop_unref (data.loop);
+
+ g_assert_cmpint (data.state, ==, META_TEST_LATER_FINISHED);
+}
+
static gboolean
run_tests (gpointer data)
{
@@ -103,6 +192,8 @@ init_tests (int argc, char **argv)
g_test_bug_base ("http://bugzilla.gnome.org/show_bug.cgi?id=");
g_test_add_func ("/util/meta-later/order", meta_test_util_later_order);
+ g_test_add_func ("/util/meta-later/schedule-from-later",
+ meta_test_util_later_schedule_from_later);
}
int
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]