diff options
author | Daniel Playfair Cal <daniel.playfair.cal@gmail.com> | 2018-07-13 14:47:45 +0000 |
---|---|---|
committer | Ray Strode <halfline@gmail.com> | 2018-07-13 14:47:45 +0000 |
commit | d148fffb58935d69a20dcc42b3ce3d998742f0e7 (patch) | |
tree | b4d508a34da52bc68e73341190ba087754e6fafe /tests | |
parent | e01be93304fdff9e4c5109ae50f1bc9e64524b0b (diff) | |
download | dconf-d148fffb58935d69a20dcc42b3ce3d998742f0e7.tar.gz |
Engine: track in progress watch handles to avoid spurious changed signals for the root path
Diffstat (limited to 'tests')
-rw-r--r-- | tests/engine.c | 66 |
1 files changed, 64 insertions, 2 deletions
diff --git a/tests/engine.c b/tests/engine.c index a804b9a..aa1db1c 100644 --- a/tests/engine.c +++ b/tests/engine.c @@ -1153,7 +1153,7 @@ test_watch_fast (void) DConfEngine *engine; GvdbTable *table; GVariant *triv; - guint64 a, b; + guint64 a, b, c; change_log = g_string_new (NULL); @@ -1202,7 +1202,20 @@ test_watch_fast (void) dconf_mock_dbus_assert_no_async (); b = dconf_engine_get_state (engine); g_assert_cmpuint (a, !=, b); - g_assert_cmpstr (change_log->str, ==, "/:1::nil;"); + g_assert_cmpstr (change_log->str, ==, "/a/b/c:1::nil;"); + /* Try to establish a watch again for the same path */ + dconf_engine_watch_fast (engine, "/a/b/c"); + g_assert (!dconf_engine_has_outstanding (engine)); + dconf_engine_sync (engine); + c = dconf_engine_get_state (engine); + g_assert_cmpuint (b, ==, c); + /* The watch result was not sent, because the path was already watched */ + dconf_mock_dbus_assert_no_async(); + c = dconf_engine_get_state (engine); + g_assert_cmpuint (b, ==, c); + /* Since the path was already being watched, + * do not expect a second false change notification */ + g_assert_cmpstr (change_log->str, ==, "/a/b/c:1::nil;"); dconf_engine_unwatch_fast (engine, "/a/b/c"); dconf_mock_dbus_async_reply (triv, NULL); dconf_mock_dbus_async_reply (triv, NULL); @@ -1274,6 +1287,54 @@ test_watch_sync (void) } static void +test_watching (void) +{ + DConfEngine *engine; + const gchar *apple = "apple"; + const gchar *orange = "orange"; + const gchar *banana = "banana"; + + engine = dconf_engine_new (SRCDIR "/profile/dos", NULL, NULL); + + g_assert (!dconf_engine_is_watching(engine, apple, TRUE)); + g_assert (!dconf_engine_is_watching(engine, apple, FALSE)); + g_assert (!dconf_engine_is_watching(engine, orange, TRUE)); + g_assert (!dconf_engine_is_watching(engine, orange, FALSE)); + g_assert (!dconf_engine_is_watching(engine, banana, TRUE)); + g_assert (!dconf_engine_is_watching(engine, banana, FALSE)); + + dconf_engine_set_watching (engine, apple, FALSE, FALSE); + dconf_engine_set_watching (engine, orange, TRUE, FALSE); + dconf_engine_set_watching (engine, banana, TRUE, TRUE); + + g_assert (!dconf_engine_is_watching(engine, apple, TRUE)); + g_assert (!dconf_engine_is_watching(engine, apple, FALSE)); + g_assert (!dconf_engine_is_watching(engine, orange, TRUE)); + g_assert (dconf_engine_is_watching(engine, orange, FALSE)); + g_assert (dconf_engine_is_watching(engine, banana, TRUE)); + g_assert (dconf_engine_is_watching(engine, banana, FALSE)); + + dconf_engine_set_watching (engine, orange, TRUE, TRUE); + dconf_engine_set_watching (engine, banana, FALSE, FALSE); + + g_assert (!dconf_engine_is_watching(engine, apple, TRUE)); + g_assert (!dconf_engine_is_watching(engine, apple, FALSE)); + g_assert (dconf_engine_is_watching(engine, orange, TRUE)); + g_assert (dconf_engine_is_watching(engine, orange, FALSE)); + g_assert (!dconf_engine_is_watching(engine, banana, TRUE)); + g_assert (!dconf_engine_is_watching(engine, banana, FALSE)); + + dconf_engine_set_watching (engine, orange, FALSE, FALSE); + + g_assert (!dconf_engine_is_watching(engine, apple, TRUE)); + g_assert (!dconf_engine_is_watching(engine, apple, FALSE)); + g_assert (!dconf_engine_is_watching(engine, orange, TRUE)); + g_assert (!dconf_engine_is_watching(engine, orange, FALSE)); + g_assert (!dconf_engine_is_watching(engine, banana, TRUE)); + g_assert (!dconf_engine_is_watching(engine, banana, FALSE)); +} + +static void test_change_fast (void) { DConfChangeset *empty, *good_write, *bad_write, *very_good_write, *slightly_bad_write; @@ -1758,6 +1819,7 @@ main (int argc, char **argv) g_test_add_func ("/engine/read", test_read); g_test_add_func ("/engine/watch/fast", test_watch_fast); g_test_add_func ("/engine/watch/sync", test_watch_sync); + g_test_add_func ("/engine/watch/watching", test_watching); g_test_add_func ("/engine/change/fast", test_change_fast); g_test_add_func ("/engine/change/sync", test_change_sync); g_test_add_func ("/engine/signals", test_signals); |