summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorColin Walters <walters@verbum.org>2005-06-27 18:20:20 +0000
committerColin Walters <walters@verbum.org>2005-06-27 18:20:20 +0000
commit0c6f2bbff503c10212589c1540d06b29395587aa (patch)
treede341ef0b08f56ab97669cc2c65fb96aa1b04e71 /test
parent3427ef3d39c585ce574dfd01563de6e575217e5e (diff)
2005-06-27 Colin Walters <walters@verbum.org>
* test/glib/test-dbus-glib.c: * test/glib/test-service-glib.c: * test/glib/test-service-glib.xml: Test hash table signal emitting. * glib/dbus-gobject.c (_dbus_gobject_lookup_marshaller): Convert types to their fundamental basis types, since this is what marshallers operate on. Also add an entry for VOID__BOXED. (dbus_g_object_register_marshaller_array): Convert to fundamental.
Diffstat (limited to 'test')
-rw-r--r--test/glib/test-dbus-glib.c34
-rw-r--r--test/glib/test-service-glib.c24
-rw-r--r--test/glib/test-service-glib.xml5
3 files changed, 62 insertions, 1 deletions
diff --git a/test/glib/test-dbus-glib.c b/test/glib/test-dbus-glib.c
index 94aeaeb3..59284913 100644
--- a/test/glib/test-dbus-glib.c
+++ b/test/glib/test-dbus-glib.c
@@ -14,6 +14,7 @@ static int n_times_foo_received = 0;
static int n_times_frobnicate_received = 0;
static int n_times_sig0_received = 0;
static int n_times_sig1_received = 0;
+static int n_times_sig2_received = 0;
static guint exit_timeout = 0;
static gboolean
@@ -84,6 +85,24 @@ sig1_signal_handler (DBusGProxy *proxy,
g_source_remove (exit_timeout);
}
+static void
+sig2_signal_handler (DBusGProxy *proxy,
+ GHashTable *table,
+ void *user_data)
+{
+ n_times_sig2_received += 1;
+
+ g_assert (g_hash_table_size (table) == 2);
+
+ g_assert (g_hash_table_lookup (table, "baz") != NULL);
+ g_assert (!strcmp (g_hash_table_lookup (table, "baz"), "cow"));
+ g_assert (g_hash_table_lookup (table, "bar") != NULL);
+ g_assert (!strcmp (g_hash_table_lookup (table, "bar"), "foo"));
+
+ g_main_loop_quit (loop);
+ g_source_remove (exit_timeout);
+}
+
static void lose (const char *fmt, ...) G_GNUC_NORETURN G_GNUC_PRINTF (1, 2);
static void lose_gerror (const char *prefix, GError *error) G_GNUC_NORETURN;
@@ -721,7 +740,8 @@ main (int argc, char **argv)
G_TYPE_NONE, G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID);
dbus_g_proxy_add_signal (proxy, "Sig0", G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_INVALID);
- dbus_g_proxy_add_signal (proxy, "Sig1", G_TYPE_STRING, G_TYPE_VALUE);
+ dbus_g_proxy_add_signal (proxy, "Sig1", G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID);
+ dbus_g_proxy_add_signal (proxy, "Sig2", DBUS_TYPE_G_STRING_STRING_HASHTABLE, G_TYPE_INVALID);
dbus_g_proxy_connect_signal (proxy, "Sig0",
G_CALLBACK (sig0_signal_handler),
@@ -729,6 +749,9 @@ main (int argc, char **argv)
dbus_g_proxy_connect_signal (proxy, "Sig1",
G_CALLBACK (sig1_signal_handler),
NULL, NULL);
+ dbus_g_proxy_connect_signal (proxy, "Sig2",
+ G_CALLBACK (sig2_signal_handler),
+ NULL, NULL);
dbus_g_proxy_call_no_reply (proxy, "EmitSignals", G_TYPE_INVALID);
@@ -743,6 +766,15 @@ main (int argc, char **argv)
if (n_times_sig1_received != 1)
lose ("Sig1 signal received %d times, should have been 1", n_times_sig1_received);
+ dbus_g_proxy_call_no_reply (proxy, "EmitSignal2", G_TYPE_INVALID);
+ dbus_g_connection_flush (connection);
+
+ exit_timeout = g_timeout_add (5000, timed_exit, loop);
+ g_main_loop_run (loop);
+
+ if (n_times_sig2_received != 1)
+ lose ("Sig2 signal received %d times, should have been 1", n_times_sig2_received);
+
dbus_g_proxy_call_no_reply (proxy, "EmitSignals", G_TYPE_INVALID);
dbus_g_proxy_call_no_reply (proxy, "EmitSignals", G_TYPE_INVALID);
diff --git a/test/glib/test-service-glib.c b/test/glib/test-service-glib.c
index 21c4458d..46421d70 100644
--- a/test/glib/test-service-glib.c
+++ b/test/glib/test-service-glib.c
@@ -79,6 +79,7 @@ gboolean my_object_get_val (MyObject *obj, guint *ret, GError **error);
gboolean my_object_get_value (MyObject *obj, guint *ret, GError **error);
gboolean my_object_emit_signals (MyObject *obj, GError **error);
+gboolean my_object_emit_signal2 (MyObject *obj, GError **error);
gboolean my_object_emit_frobnicate (MyObject *obj, GError **error);
@@ -98,6 +99,7 @@ enum
FROBNICATE,
SIG0,
SIG1,
+ SIG2,
LAST_SIGNAL
};
@@ -206,6 +208,15 @@ my_object_class_init (MyObjectClass *mobject_class)
NULL, NULL,
my_object_marshal_VOID__STRING_BOXED,
G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_VALUE);
+
+ signals[SIG2] =
+ g_signal_new ("sig2",
+ G_OBJECT_CLASS_TYPE (mobject_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__BOXED,
+ G_TYPE_NONE, 1, DBUS_TYPE_G_STRING_STRING_HASHTABLE);
}
GQuark
@@ -438,6 +449,19 @@ my_object_emit_signals (MyObject *obj, GError **error)
return TRUE;
}
+gboolean
+my_object_emit_signal2 (MyObject *obj, GError **error)
+{
+ GHashTable *table;
+
+ table = g_hash_table_new (g_str_hash, g_str_equal);
+ g_hash_table_insert (table, "baz", "cow");
+ g_hash_table_insert (table, "bar", "foo");
+ g_signal_emit (obj, signals[SIG2], 0, table);
+ g_hash_table_destroy (table);
+ return TRUE;
+}
+
static GMainLoop *loop;
#define TEST_SERVICE_NAME "org.freedesktop.DBus.TestSuiteGLibService"
diff --git a/test/glib/test-service-glib.xml b/test/glib/test-service-glib.xml
index 05cb5abd..e2197ec3 100644
--- a/test/glib/test-service-glib.xml
+++ b/test/glib/test-service-glib.xml
@@ -102,6 +102,11 @@
<signal name="Sig1"/>
+ <method name="EmitSignal2">
+ </method>
+
+ <signal name="Sig2"/>
+
</interface>
</node>