summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2023-03-21 11:14:49 +0100
committerRico Tzschichholz <ricotz@ubuntu.com>2023-03-21 11:14:49 +0100
commit95e8155204d1ce85224cbb50661d36d53e9bd274 (patch)
tree5cb94888289405bab554cf8c187f5f93d0e8530f
parentf8c0ce38c6954069a81561bff8207bf43a81c10f (diff)
downloadvala-95e8155204d1ce85224cbb50661d36d53e9bd274.tar.gz
tests: Add "signal with struct parameter" test to increase coverage
-rw-r--r--tests/Makefile.am1
-rw-r--r--tests/objects/signals-struct.c-expected412
-rw-r--r--tests/objects/signals-struct.vala38
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" });
+}