summaryrefslogtreecommitdiffstats
path: root/test/glib/test-dbus-glib.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/glib/test-dbus-glib.c')
-rw-r--r--test/glib/test-dbus-glib.c56
1 files changed, 54 insertions, 2 deletions
diff --git a/test/glib/test-dbus-glib.c b/test/glib/test-dbus-glib.c
index fb8be4cc..5cb31235 100644
--- a/test/glib/test-dbus-glib.c
+++ b/test/glib/test-dbus-glib.c
@@ -4,11 +4,43 @@
#include <stdlib.h>
#include <string.h>
+static GMainLoop *loop = NULL;
+static int n_times_foo_received = 0;
+
+static void
+foo_signal_handler (DBusGProxy *proxy,
+ DBusMessage *signal,
+ void *user_data)
+{
+ double d;
+ DBusError derror;
+
+ if (!dbus_message_is_signal (signal,
+ "org.freedesktop.TestSuite",
+ "Foo"))
+ {
+ g_printerr ("Signal handler received the wrong message\n");
+ exit (1);
+ }
+
+ dbus_error_init (&derror);
+ if (!dbus_message_get_args (signal, &derror, DBUS_TYPE_DOUBLE,
+ &d, DBUS_TYPE_INVALID))
+ {
+ g_printerr ("failed to get signal args: %s\n", derror.message);
+ dbus_error_free (&derror);
+ exit (1);
+ }
+
+ n_times_foo_received += 1;
+
+ g_main_loop_quit (loop);
+}
+
int
main (int argc, char **argv)
{
DBusConnection *connection;
- GMainLoop *loop;
GError *error;
DBusGProxy *driver;
DBusGProxy *proxy;
@@ -135,7 +167,7 @@ main (int argc, char **argv)
proxy = dbus_gproxy_new_for_service (connection,
"org.freedesktop.DBus.TestSuiteEchoService",
- "/fixme/the/test/service/ignores/this", /* FIXME */
+ "/org/freedesktop/TestSuite",
"org.freedesktop.TestSuite");
call = dbus_gproxy_begin_call (proxy, "Echo",
@@ -156,6 +188,26 @@ main (int argc, char **argv)
g_print ("String echoed = \"%s\"\n", str);
dbus_free (str);
+
+ /* Test oneway call and signal handling */
+
+ dbus_gproxy_connect_signal (proxy, "Foo",
+ foo_signal_handler,
+ NULL, NULL);
+
+ dbus_gproxy_call_no_reply (proxy, "EmitFoo",
+ DBUS_TYPE_INVALID);
+
+ dbus_connection_flush (connection);
+
+ g_main_loop_run (loop);
+
+ if (n_times_foo_received != 1)
+ {
+ g_printerr ("Foo signal received %d times, should have been 1\n",
+ n_times_foo_received);
+ exit (1);
+ }
g_object_unref (G_OBJECT (driver));
g_object_unref (G_OBJECT (proxy));