diff options
author | Peter Bloomfield <PeterBloomfield@bellsouth.net> | 2022-07-03 15:10:31 -0400 |
---|---|---|
committer | Peter Bloomfield <PeterBloomfield@bellsouth.net> | 2022-07-04 13:16:21 -0400 |
commit | 4ef2025d47770ea2da1c4cc9360f21a002d4ed62 (patch) | |
tree | f3e2cf9f7f7c643695a8a3b80decbd2fbe42621d /gobject/tests/binding.c | |
parent | 94ba14d5424c9304342a601cb9eb0842e56d8f51 (diff) | |
download | glib-4ef2025d47770ea2da1c4cc9360f21a002d4ed62.tar.gz |
gobject/tests/binding: Add a test with run-dispose
Add tests in which `g_object_run_dispose()` is called on the source or target
of a `GBinding`. After commit a4fa456e677246629e714d05b5de178691571b06,
the target test caused a failed assertion in `g_weak_ref_set()` that was not
found by the existing tests. Commit 94ba14d5424c9304342a601cb9eb0842e56d8f51
weakens the assertion to allow the test to succeed.
See https://gitlab.gnome.org/GNOME/glib/-/issues/2676
Diffstat (limited to 'gobject/tests/binding.c')
-rw-r--r-- | gobject/tests/binding.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/gobject/tests/binding.c b/gobject/tests/binding.c index b8373e345..cc6e65987 100644 --- a/gobject/tests/binding.c +++ b/gobject/tests/binding.c @@ -1089,6 +1089,52 @@ binding_concurrent_finalizing (void) } } +static void +binding_dispose_source (void) +{ + /* Test that the source can be disposed */ + BindingSource *source = g_object_new (binding_source_get_type (), NULL); + BindingTarget *target = g_object_new (binding_target_get_type (), NULL); + GBinding *binding; + + g_test_bug ("https://gitlab.gnome.org/GNOME/glib/-/issues/2676"); + + binding = g_object_bind_property (source, "foo", + target, "bar", + G_BINDING_DEFAULT); + + g_object_add_weak_pointer (G_OBJECT (binding), (gpointer *) &binding); + + g_object_run_dispose (G_OBJECT (source)); + g_assert_null (binding); + + g_object_unref (target); + g_object_unref (source); +} + +static void +binding_dispose_target (void) +{ + /* Test that the target can be disposed */ + BindingSource *source = g_object_new (binding_source_get_type (), NULL); + BindingTarget *target = g_object_new (binding_target_get_type (), NULL); + GBinding *binding; + + g_test_bug ("https://gitlab.gnome.org/GNOME/glib/-/issues/2676"); + + binding = g_object_bind_property (source, "foo", + target, "bar", + G_BINDING_DEFAULT); + + g_object_add_weak_pointer (G_OBJECT (binding), (gpointer *) &binding); + + g_object_run_dispose (G_OBJECT (target)); + g_assert_null (binding); + + g_object_unref (target); + g_object_unref (source); +} + int main (int argc, char *argv[]) { @@ -1111,6 +1157,8 @@ main (int argc, char *argv[]) g_test_add_func ("/binding/interface", binding_interface); g_test_add_func ("/binding/concurrent-unbind", binding_concurrent_unbind); g_test_add_func ("/binding/concurrent-finalizing", binding_concurrent_finalizing); + g_test_add_func ("/binding/dispose-source", binding_dispose_source); + g_test_add_func ("/binding/dispose-target", binding_dispose_target); return g_test_run (); } |