summaryrefslogtreecommitdiff
path: root/gobject/tests/binding.c
diff options
context:
space:
mode:
authorPeter Bloomfield <PeterBloomfield@bellsouth.net>2022-07-03 15:10:31 -0400
committerPeter Bloomfield <PeterBloomfield@bellsouth.net>2022-07-04 13:16:21 -0400
commit4ef2025d47770ea2da1c4cc9360f21a002d4ed62 (patch)
treef3e2cf9f7f7c643695a8a3b80decbd2fbe42621d /gobject/tests/binding.c
parent94ba14d5424c9304342a601cb9eb0842e56d8f51 (diff)
downloadglib-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.c48
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 ();
}