diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2023-03-21 11:14:49 +0100 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2023-03-21 11:14:49 +0100 |
commit | 95e8155204d1ce85224cbb50661d36d53e9bd274 (patch) | |
tree | 5cb94888289405bab554cf8c187f5f93d0e8530f | |
parent | f8c0ce38c6954069a81561bff8207bf43a81c10f (diff) | |
download | vala-95e8155204d1ce85224cbb50661d36d53e9bd274.tar.gz |
tests: Add "signal with struct parameter" test to increase coverage
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rw-r--r-- | tests/objects/signals-struct.c-expected | 412 | ||||
-rw-r--r-- | tests/objects/signals-struct.vala | 38 |
3 files changed, 451 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index 6f4c5a752..b2c8c53dc 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -613,6 +613,7 @@ TESTS = \ objects/signals-prototype-access.vala \ objects/signals-prototype-access-invalid.test \ objects/signals-prototype-access-invalid-2.test \ + objects/signals-struct.vala \ objects/signals-struct-return.vala \ objects/simple-generics-chainup.vala \ objects/singleton.vala \ diff --git a/tests/objects/signals-struct.c-expected b/tests/objects/signals-struct.c-expected new file mode 100644 index 000000000..cdc093ff1 --- /dev/null +++ b/tests/objects/signals-struct.c-expected @@ -0,0 +1,412 @@ +/* objects_signals_struct.c generated by valac, the Vala compiler + * generated from objects_signals_struct.vala, do not modify */ + +#include <glib-object.h> +#include <stdlib.h> +#include <string.h> +#include <glib.h> + +#if !defined(VALA_EXTERN) +#if defined(_WIN32) || defined(__CYGWIN__) +#define VALA_EXTERN __declspec(dllexport) extern +#elif __GNUC__ >= 4 +#define VALA_EXTERN __attribute__((visibility("default"))) extern +#else +#define VALA_EXTERN extern +#endif +#endif + +#define TYPE_FOO (foo_get_type ()) +typedef struct _Foo Foo; +#define _g_free0(var) (var = (g_free (var), NULL)) + +#define TYPE_FAZ (faz_get_type ()) +typedef Foo Faz; +typedef struct _Baz Baz; + +#define TYPE_BAR (bar_get_type ()) +#define BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_BAR, Bar)) +#define BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_BAR, BarClass)) +#define IS_BAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_BAR)) +#define IS_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_BAR)) +#define BAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_BAR, BarClass)) + +typedef struct _Bar Bar; +typedef struct _BarClass BarClass; +typedef struct _BarPrivate BarPrivate; +enum { + BAR_0_PROPERTY, + BAR_NUM_PROPERTIES +}; +static GParamSpec* bar_properties[BAR_NUM_PROPERTIES]; +enum { + BAR_ON_FOO_SIGNAL, + BAR_ON_FAZ_SIGNAL, + BAR_ON_BAZ_SIGNAL, + BAR_NUM_SIGNALS +}; +static guint bar_signals[BAR_NUM_SIGNALS] = {0}; +#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL))) +#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg); +#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; } +#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; } +#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg); + +struct _Foo { + gchar* s; + gint i; +}; + +struct _Baz { + gint i; + gchar* s; +}; + +struct _Bar { + GObject parent_instance; + BarPrivate * priv; +}; + +struct _BarClass { + GObjectClass parent_class; +}; + +static gpointer bar_parent_class = NULL; + +VALA_EXTERN GType foo_get_type (void) G_GNUC_CONST ; +VALA_EXTERN Foo* foo_dup (const Foo* self); +VALA_EXTERN void foo_free (Foo* self); +VALA_EXTERN void foo_copy (const Foo* self, + Foo* dest); +VALA_EXTERN void foo_destroy (Foo* self); +G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC (Foo, foo_destroy) +VALA_EXTERN GType faz_get_type (void) G_GNUC_CONST ; +VALA_EXTERN Faz* faz_dup (const Faz* self); +VALA_EXTERN void faz_free (Faz* self); +VALA_EXTERN void faz_copy (const Faz* self, + Faz* dest); +VALA_EXTERN void faz_destroy (Faz* self); +G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC (Faz, faz_destroy) +VALA_EXTERN Baz* baz_dup (const Baz* self); +VALA_EXTERN void baz_free (Baz* self); +VALA_EXTERN void baz_copy (const Baz* self, + Baz* dest); +VALA_EXTERN void baz_destroy (Baz* self); +G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC (Baz, baz_destroy) +VALA_EXTERN GType bar_get_type (void) G_GNUC_CONST ; +G_DEFINE_AUTOPTR_CLEANUP_FUNC (Bar, g_object_unref) +VALA_EXTERN Bar* bar_new (void); +VALA_EXTERN Bar* bar_construct (GType object_type); +static GType bar_get_type_once (void); +static void _vala_main (void); +static void __lambda4_ (Foo* f); +static void ___lambda4__bar_on_foo (Bar* _sender, + Foo* foo, + gpointer self); +static void __lambda5_ (Faz* f); +static void ___lambda5__bar_on_faz (Bar* _sender, + Faz* faz, + gpointer self); +static void __lambda6_ (Baz* b); +static void ___lambda6__bar_on_baz (Bar* _sender, + Baz* baz, + gpointer self); + +void +foo_copy (const Foo* self, + Foo* dest) +{ + const gchar* _tmp0_; + gchar* _tmp1_; + _tmp0_ = (*self).s; + _tmp1_ = g_strdup (_tmp0_); + _g_free0 ((*dest).s); + (*dest).s = _tmp1_; + (*dest).i = (*self).i; +} + +void +foo_destroy (Foo* self) +{ + _g_free0 ((*self).s); +} + +Foo* +foo_dup (const Foo* self) +{ + Foo* dup; + dup = g_new0 (Foo, 1); + foo_copy (self, dup); + return dup; +} + +void +foo_free (Foo* self) +{ + foo_destroy (self); + g_free (self); +} + +static GType +foo_get_type_once (void) +{ + GType foo_type_id; + foo_type_id = g_boxed_type_register_static ("Foo", (GBoxedCopyFunc) foo_dup, (GBoxedFreeFunc) foo_free); + return foo_type_id; +} + +GType +foo_get_type (void) +{ + static volatile gsize foo_type_id__once = 0; + if (g_once_init_enter (&foo_type_id__once)) { + GType foo_type_id; + foo_type_id = foo_get_type_once (); + g_once_init_leave (&foo_type_id__once, foo_type_id); + } + return foo_type_id__once; +} + +void +faz_copy (const Faz* self, + Faz* dest) +{ + const gchar* _tmp0_; + gchar* _tmp1_; + _tmp0_ = (*self).s; + _tmp1_ = g_strdup (_tmp0_); + _g_free0 ((*dest).s); + (*dest).s = _tmp1_; + (*dest).i = (*self).i; +} + +void +faz_destroy (Faz* self) +{ + foo_destroy (self); +} + +Faz* +faz_dup (const Faz* self) +{ + Faz* dup; + dup = g_new0 (Faz, 1); + faz_copy (self, dup); + return dup; +} + +void +faz_free (Faz* self) +{ + faz_destroy (self); + g_free (self); +} + +static GType +faz_get_type_once (void) +{ + GType faz_type_id; + faz_type_id = g_boxed_type_register_static ("Faz", (GBoxedCopyFunc) faz_dup, (GBoxedFreeFunc) faz_free); + return faz_type_id; +} + +GType +faz_get_type (void) +{ + static volatile gsize faz_type_id__once = 0; + if (g_once_init_enter (&faz_type_id__once)) { + GType faz_type_id; + faz_type_id = faz_get_type_once (); + g_once_init_leave (&faz_type_id__once, faz_type_id); + } + return faz_type_id__once; +} + +void +baz_copy (const Baz* self, + Baz* dest) +{ + const gchar* _tmp0_; + gchar* _tmp1_; + (*dest).i = (*self).i; + _tmp0_ = (*self).s; + _tmp1_ = g_strdup (_tmp0_); + _g_free0 ((*dest).s); + (*dest).s = _tmp1_; +} + +void +baz_destroy (Baz* self) +{ + _g_free0 ((*self).s); +} + +Baz* +baz_dup (const Baz* self) +{ + Baz* dup; + dup = g_new0 (Baz, 1); + baz_copy (self, dup); + return dup; +} + +void +baz_free (Baz* self) +{ + baz_destroy (self); + g_free (self); +} + +Bar* +bar_construct (GType object_type) +{ + Bar * self = NULL; + self = (Bar*) g_object_new (object_type, NULL); + return self; +} + +Bar* +bar_new (void) +{ + return bar_construct (TYPE_BAR); +} + +static void +bar_class_init (BarClass * klass, + gpointer klass_data) +{ + bar_parent_class = g_type_class_peek_parent (klass); + bar_signals[BAR_ON_FOO_SIGNAL] = g_signal_new ("on-foo", TYPE_BAR, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED, G_TYPE_NONE, 1, TYPE_FOO); + bar_signals[BAR_ON_FAZ_SIGNAL] = g_signal_new ("on-faz", TYPE_BAR, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED, G_TYPE_NONE, 1, TYPE_FAZ); + bar_signals[BAR_ON_BAZ_SIGNAL] = g_signal_new ("on-baz", TYPE_BAR, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); +} + +static void +bar_instance_init (Bar * self, + gpointer klass) +{ +} + +static GType +bar_get_type_once (void) +{ + static const GTypeInfo g_define_type_info = { sizeof (BarClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) bar_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (Bar), 0, (GInstanceInitFunc) bar_instance_init, NULL }; + GType bar_type_id; + bar_type_id = g_type_register_static (G_TYPE_OBJECT, "Bar", &g_define_type_info, 0); + return bar_type_id; +} + +GType +bar_get_type (void) +{ + static volatile gsize bar_type_id__once = 0; + if (g_once_init_enter (&bar_type_id__once)) { + GType bar_type_id; + bar_type_id = bar_get_type_once (); + g_once_init_leave (&bar_type_id__once, bar_type_id); + } + return bar_type_id__once; +} + +static void +__lambda4_ (Foo* f) +{ + Foo _tmp0_; + const gchar* _tmp1_; + Foo _tmp2_; + g_return_if_fail (f != NULL); + _tmp0_ = *f; + _tmp1_ = _tmp0_.s; + _vala_assert (g_strcmp0 (_tmp1_, "foo") == 0, "f.s == \"foo\""); + _tmp2_ = *f; + _vala_assert (_tmp2_.i == 23, "f.i == 23"); +} + +static void +___lambda4__bar_on_foo (Bar* _sender, + Foo* foo, + gpointer self) +{ + __lambda4_ (foo); +} + +static void +__lambda5_ (Faz* f) +{ + Faz _tmp0_; + const gchar* _tmp1_; + Faz _tmp2_; + g_return_if_fail (f != NULL); + _tmp0_ = *f; + _tmp1_ = _tmp0_.s; + _vala_assert (g_strcmp0 (_tmp1_, "faz") == 0, "f.s == \"faz\""); + _tmp2_ = *f; + _vala_assert (_tmp2_.i == 42, "f.i == 42"); +} + +static void +___lambda5__bar_on_faz (Bar* _sender, + Faz* faz, + gpointer self) +{ + __lambda5_ (faz); +} + +static void +__lambda6_ (Baz* b) +{ + Baz _tmp0_; + Baz _tmp1_; + const gchar* _tmp2_; + g_return_if_fail (b != NULL); + _tmp0_ = *b; + _vala_assert (_tmp0_.i == 4711, "b.i == 4711"); + _tmp1_ = *b; + _tmp2_ = _tmp1_.s; + _vala_assert (g_strcmp0 (_tmp2_, "baz") == 0, "b.s == \"baz\""); +} + +static void +___lambda6__bar_on_baz (Bar* _sender, + Baz* baz, + gpointer self) +{ + __lambda6_ (baz); +} + +static void +_vala_main (void) +{ + Bar* bar = NULL; + Bar* _tmp0_; + Foo _tmp1_ = {0}; + Faz _tmp2_ = {0}; + Baz _tmp3_ = {0}; + _tmp0_ = bar_new (); + bar = _tmp0_; + g_signal_connect (bar, "on-foo", (GCallback) ___lambda4__bar_on_foo, NULL); + _g_free0 (_tmp1_.s); + _tmp1_.s = "foo"; + _tmp1_.i = 23; + g_signal_emit (bar, bar_signals[BAR_ON_FOO_SIGNAL], 0, &_tmp1_); + g_signal_connect (bar, "on-faz", (GCallback) ___lambda5__bar_on_faz, NULL); + _g_free0 (_tmp2_.s); + _tmp2_.s = "faz"; + _tmp2_.i = 42; + g_signal_emit (bar, bar_signals[BAR_ON_FAZ_SIGNAL], 0, &_tmp2_); + g_signal_connect (bar, "on-baz", (GCallback) ___lambda6__bar_on_baz, NULL); + _tmp3_.i = 4711; + _g_free0 (_tmp3_.s); + _tmp3_.s = "baz"; + g_signal_emit (bar, bar_signals[BAR_ON_BAZ_SIGNAL], 0, &_tmp3_); + _g_object_unref0 (bar); +} + +int +main (int argc, + char ** argv) +{ + _vala_main (); + return 0; +} + diff --git a/tests/objects/signals-struct.vala b/tests/objects/signals-struct.vala new file mode 100644 index 000000000..8ee6e4d85 --- /dev/null +++ b/tests/objects/signals-struct.vala @@ -0,0 +1,38 @@ +struct Foo { + public string s; + public int i; +} + +struct Faz : Foo { +} + +[CCode (has_type_id = false)] +struct Baz { + public int i; + public string s; +} + +class Bar : Object { + public signal void on_foo (Foo foo); + public signal void on_faz (Faz faz); + public signal void on_baz (Baz baz); +} + +void main () { + var bar = new Bar (); + bar.on_foo.connect ((f) => { + assert (f.s == "foo"); + assert (f.i == 23); + }); + bar.on_foo ({ "foo", 23 }); + bar.on_faz.connect ((f) => { + assert (f.s == "faz"); + assert (f.i == 42); + }); + bar.on_faz ({ "faz", 42 }); + bar.on_baz.connect ((b) => { + assert (b.i == 4711); + assert (b.s == "baz"); + }); + bar.on_baz ({ 4711, "baz" }); +} |