[glib] tests: Add test showing default marshaller override
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] tests: Add test showing default marshaller override
- Date: Thu, 25 Aug 2016 17:41:47 +0000 (UTC)
commit edfbfc18279b6c39fbf6db8676268ea7fec97fc8
Author: Benjamin Otte <otte redhat com>
Date: Thu Jul 28 09:52:52 2016 -0400
tests: Add test showing default marshaller override
https://bugzilla.gnome.org/show_bug.cgi?id=769076
gobject/tests/signals.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 79 insertions(+), 0 deletions(-)
---
diff --git a/gobject/tests/signals.c b/gobject/tests/signals.c
index cae8eca..c1de480 100644
--- a/gobject/tests/signals.c
+++ b/gobject/tests/signals.c
@@ -29,6 +29,40 @@ typedef enum {
*/
} TestUnsignedEnum;
+static void
+custom_marshal_VOID__INVOCATIONHINT (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__INVOCATIONHINT) (gpointer data1,
+ gpointer invocation_hint,
+ gpointer data2);
+ GMarshalFunc_VOID__INVOCATIONHINT callback;
+ GCClosure *cc = (GCClosure*) closure;
+ gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 2);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_VOID__INVOCATIONHINT) (marshal_data ? marshal_data : cc->callback);
+
+ callback (data1,
+ invocation_hint,
+ data2);
+}
+
static GType
test_enum_get_type (void)
{
@@ -224,6 +258,15 @@ test_class_init (TestClass *klass)
0);
g_signal_set_va_marshaller (s, G_TYPE_FROM_CLASS (klass),
test_UINT__VOIDv);
+ simple_id = g_signal_new ("custom-marshaller",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ custom_marshal_VOID__INVOCATIONHINT,
+ G_TYPE_NONE,
+ 1,
+ G_TYPE_POINTER);
g_signal_new ("variant-changed-no-slot",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST | G_SIGNAL_MUST_COLLECT,
@@ -702,6 +745,41 @@ test_generic_marshaller_signal_uint_return (void)
g_object_unref (test);
}
+static const GSignalInvocationHint dont_use_this = { 0, };
+
+static void
+custom_marshaller_callback (Test *test,
+ GSignalInvocationHint *hint,
+ gpointer unused)
+{
+ GSignalInvocationHint *ihint;
+
+ g_assert (hint != &dont_use_this);
+
+ ihint = g_signal_get_invocation_hint (test);
+
+ g_assert_cmpuint (hint->signal_id, ==, ihint->signal_id);
+ g_assert_cmpuint (hint->detail , ==, ihint->detail);
+ g_assert_cmpflags (GSignalFlags, hint->run_type, ==, ihint->run_type);
+}
+
+static void
+test_custom_marshaller (void)
+{
+ Test *test;
+
+ test = g_object_new (test_get_type (), NULL);
+
+ g_signal_connect (test,
+ "custom-marshaller",
+ G_CALLBACK (custom_marshaller_callback),
+ NULL);
+
+ g_signal_emit_by_name (test, "custom-marshaller", &dont_use_this);
+
+ g_object_unref (test);
+}
+
static int all_type_handlers_count = 0;
static void
@@ -1183,6 +1261,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/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);
g_test_add_func ("/gobject/signals/introspection", test_introspection);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]