From e241d266caac2966bbfdf40ea29443e334a6aa47 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Wed, 3 Mar 2021 14:13:47 +0100 Subject: tests: Add "signals" test object It is worth to test marshalling of signal arguments, add a basic (and barebones) object to add signals and emission methods to, so bindings can test the signal handlers. Related: https://gitlab.gnome.org/GNOME/gjs/-/issues/377 --- tests/gimarshallingtests.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++ tests/gimarshallingtests.h | 34 +++++++++++++++++++++ 2 files changed, 107 insertions(+) diff --git a/tests/gimarshallingtests.c b/tests/gimarshallingtests.c index 483fb619..46ac0fbf 100644 --- a/tests/gimarshallingtests.c +++ b/tests/gimarshallingtests.c @@ -5895,3 +5895,76 @@ gi_marshalling_tests_properties_object_new (void) { return g_object_new (GI_MARSHALLING_TESTS_TYPE_PROPERTIES_OBJECT, NULL); } + +G_DEFINE_TYPE (GIMarshallingTestsSignalsObject, gi_marshalling_tests_signals_object, G_TYPE_OBJECT); + +static void +gi_marshalling_tests_signals_object_init (GIMarshallingTestsSignalsObject *object G_GNUC_UNUSED) +{ +} + +static void +gi_marshalling_tests_signals_object_finalize (GObject *object) +{ + G_OBJECT_CLASS (gi_marshalling_tests_signals_object_parent_class)->finalize (object); +} + +static void +gi_marshalling_tests_signals_object_class_init (GIMarshallingTestsSignalsObjectClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->finalize = gi_marshalling_tests_signals_object_finalize; + + /** + * GIMarshallingTestsSignalsObject::some-boxed-gptrarray-utf8: + * @self: + * @arg: (element-type utf8): + */ + g_signal_new ("some-boxed-gptrarray-utf8", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + 0, NULL, NULL, NULL, + G_TYPE_NONE, 1, + G_TYPE_PTR_ARRAY); + + /** + * GIMarshallingTestsSignalsObject::some-boxed-gptrarray-boxed-struct: + * @self: + * @arg: (element-type GIMarshallingTestsBoxedStruct): + */ + g_signal_new ("some-boxed-gptrarray-boxed-struct", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + 0, NULL, NULL, NULL, + G_TYPE_NONE, 1, + G_TYPE_PTR_ARRAY); +} + +GIMarshallingTestsSignalsObject * +gi_marshalling_tests_signals_object_new (void) +{ + return g_object_new (GI_MARSHALLING_TESTS_TYPE_SIGNALS_OBJECT, NULL); +} + +void +gi_marshalling_tests_signals_object_emit_boxed_gptrarray_utf8 (GIMarshallingTestsSignalsObject *object) +{ + GPtrArray *ptrarray; + + ptrarray = gi_marshalling_tests_gptrarray_utf8_full_return (); + g_signal_emit_by_name (object, "some-boxed-gptrarray-utf8", + ptrarray); + g_ptr_array_unref (ptrarray); +} + +void +gi_marshalling_tests_signals_object_emit_boxed_gptrarray_boxed_struct (GIMarshallingTestsSignalsObject *object) +{ + GPtrArray *ptrarray; + + ptrarray = gi_marshalling_tests_gptrarray_boxed_struct_full_return (); + g_signal_emit_by_name (object, "some-boxed-gptrarray-boxed-struct", + ptrarray); + g_ptr_array_unref (ptrarray); +} diff --git a/tests/gimarshallingtests.h b/tests/gimarshallingtests.h index 5df1035e..c605c5a5 100644 --- a/tests/gimarshallingtests.h +++ b/tests/gimarshallingtests.h @@ -2049,4 +2049,38 @@ GType gi_marshalling_tests_properties_object_get_type (void) G_GNUC_CONST; _GI_TEST_EXTERN GIMarshallingTestsPropertiesObject *gi_marshalling_tests_properties_object_new (void); +/* Signals object */ + +#define GI_MARSHALLING_TESTS_TYPE_SIGNALS_OBJECT (gi_marshalling_tests_signals_object_get_type ()) +#define GI_MARSHALLING_TESTS_SIGNALS_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GI_MARSHALLING_TESTS_TYPE_SIGNALS_OBJECT, GIMarshallingTestsSignalsObject)) +#define GI_MARSHALLING_TESTS_SIGNALS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GI_MARSHALLING_TESTS_TYPE_SIGNALS_OBJECT, GIMarshallingTestsSignalsObjectClass)) +#define GI_MARSHALLING_TESTS_IS_SIGNALS_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GI_MARSHALLING_TESTS_TYPE_SIGNALS_OBJECT)) +#define GI_MARSHALLING_TESTS_IS_SIGNALS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GI_MARSHALLING_TESTS_TYPE_SIGNALS_OBJECT)) +#define GI_MARSHALLING_TESTS_SIGNALS_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GI_MARSHALLING_TESTS_TYPE_SIGNALS_OBJECT, GIMarshallingTestsSignalsObjectClass)) + +typedef struct _GIMarshallingTestsSignalsObject GIMarshallingTestsSignalsObject; +typedef struct _GIMarshallingTestsSignalsObjectClass GIMarshallingTestsSignalsObjectClass; + +struct _GIMarshallingTestsSignalsObject { + GObject parent_instance; +}; + +struct _GIMarshallingTestsSignalsObjectClass { + GObjectClass parent_class; +}; + + +_GI_TEST_EXTERN +GType gi_marshalling_tests_signals_object_get_type (void) G_GNUC_CONST; + + +_GI_TEST_EXTERN +GIMarshallingTestsSignalsObject *gi_marshalling_tests_signals_object_new (void); + +_GI_TEST_EXTERN +void gi_marshalling_tests_signals_object_emit_boxed_gptrarray_utf8 (GIMarshallingTestsSignalsObject *object); + +_GI_TEST_EXTERN +void gi_marshalling_tests_signals_object_emit_boxed_gptrarray_boxed_struct (GIMarshallingTestsSignalsObject *object); + #endif /* _GI_MARSHALLING_TESTS_H_ */ -- cgit v1.2.1