diff options
author | Matthias Clasen <mclasen@redhat.com> | 2020-10-28 12:37:37 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2020-10-28 12:37:37 -0400 |
commit | 3cba584172cde1f9913a3f08872b7fa59a832fda (patch) | |
tree | f2046d779a7f05b5aa8be8c77736809ec16e8282 | |
parent | dd9aa14eb343a8058f0b871e51e1a4cbf810a9b6 (diff) | |
download | glib-wip/otte/interface-types.tar.gz |
Add a test for signals returning interface typeswip/otte/interface-types
Add a test for a signal returning interface types, using
the generic marshaller. This will hopefully exercise newly
added code in value_from_ffi_type().
-rw-r--r-- | gobject/tests/signals.c | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/gobject/tests/signals.c b/gobject/tests/signals.c index 08b54d0fa..120f90b5c 100644 --- a/gobject/tests/signals.c +++ b/gobject/tests/signals.c @@ -135,6 +135,47 @@ static GType flags_type; static guint simple_id; static guint simple2_id; +typedef struct { + GTypeInterface g_iface; +} FooInterface; + +GType foo_get_type (void); + +G_DEFINE_INTERFACE (Foo, foo, G_TYPE_OBJECT) + +static void +foo_default_init (FooInterface *iface) +{ +} + +typedef struct { + GObject parent; +} Baa; + +typedef struct { + GObjectClass parent_class; +} BaaClass; + +static void +baa_init_foo (FooInterface *iface) +{ +} + +GType baa_get_type (void); + +G_DEFINE_TYPE_WITH_CODE (Baa, baa, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (foo_get_type (), baa_init_foo)) + +static void +baa_init (Baa *baa) +{ +} + +static void +baa_class_init (BaaClass *class) +{ +} + typedef struct _Test Test; typedef struct _TestClass TestClass; @@ -257,6 +298,14 @@ test_class_init (TestClass *klass) NULL, G_TYPE_UINT, 0); + g_signal_new ("generic-marshaller-interface-return", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, + NULL, + foo_get_type (), + 0); s = g_signal_new ("va-marshaller-uint-return", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, @@ -754,6 +803,35 @@ test_generic_marshaller_signal_uint_return (void) g_object_unref (test); } +static gpointer +on_generic_marshaller_interface_return (Test *test) +{ + return g_object_new (baa_get_type (), NULL); +} + +static void +test_generic_marshaller_signal_interface_return (void) +{ + Test *test; + guint id; + gpointer retval; + + test = g_object_new (test_get_type (), NULL); + + /* Test return value -30 */ + id = g_signal_connect (test, + "generic-marshaller-interface-return", + G_CALLBACK (on_generic_marshaller_interface_return), + NULL); + g_signal_emit_by_name (test, "generic-marshaller-interface-return", &retval); + g_assert_true (g_type_check_instance_is_a ((GTypeInstance*)retval, foo_get_type ())); + g_object_unref (retval); + + g_signal_handler_disconnect (test, id); + + g_object_unref (test); +} + static const GSignalInvocationHint dont_use_this = { 0, }; static void @@ -1082,6 +1160,7 @@ test_introspection (void) "generic-marshaller-int-return", "va-marshaller-int-return", "generic-marshaller-uint-return", + "generic-marshaller-interface-return", "va-marshaller-uint-return", "variant-changed-no-slot", "variant-changed", @@ -1495,6 +1574,7 @@ main (int argc, g_test_add_func ("/gobject/signals/generic-marshaller-enum-return-unsigned", test_generic_marshaller_signal_enum_return_unsigned); g_test_add_func ("/gobject/signals/generic-marshaller-int-return", test_generic_marshaller_signal_int_return); g_test_add_func ("/gobject/signals/generic-marshaller-uint-return", test_generic_marshaller_signal_uint_return); + g_test_add_func ("/gobject/signals/generic-marshaller-interface-return", test_generic_marshaller_signal_interface_return); g_test_add_func ("/gobject/signals/custom-marshaller", test_custom_marshaller); g_test_add_func ("/gobject/signals/connect", test_connect); g_test_add_func ("/gobject/signals/emission-hook", test_emission_hook); |