From af119aeb8f499029f23afcb936019930d84abea3 Mon Sep 17 00:00:00 2001 From: Fabian Deutsch Date: Mon, 22 Mar 2010 14:47:04 +0100 Subject: [PATCH] D-Bus: Add loopback signals test. Signed-off-by: Fabian Deutsch --- tests/dbus/signals-loopback.test | 56 ++++++++++++++++++++++++++++++++++++++ 1 files changed, 56 insertions(+), 0 deletions(-) create mode 100644 tests/dbus/signals-loopback.test diff --git a/tests/dbus/signals-loopback.test b/tests/dbus/signals-loopback.test new file mode 100644 index 0000000..69a8a1d --- /dev/null +++ b/tests/dbus/signals-loopback.test @@ -0,0 +1,56 @@ +Packages: dbus-glib-1 + +Program: loopback + +[DBus (name = "org.example.Test")] +class Test : Object { + public signal void foo (int i); + + public void do_foo (int i) { + this.foo (i); + } +} + +MainLoop main_loop; +Test server; + +void client_exit (Pid pid, int status) { + // client finished, terminate server + assert (status == 0); + main_loop.quit (); +} + +void main () { + var conn = DBus.Bus.get (DBus.BusType.SESSION); + dynamic DBus.Object bus = conn.get_object ("org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus"); + + // try to register service in session bus + uint request_name_result = bus.request_name ("org.example.Test", (uint) 0); + if (request_name_result == DBus.RequestNameReply.PRIMARY_OWNER) + { + // start server + server = new Test (); + conn.register_object ("/org/example/test", server); + + // server ready, spawn client + Pid client_pid; + Process.spawn_async (null, { "test", "/dbus/signals/loopback" }, null, SpawnFlags.DO_NOT_REAP_CHILD, null, out client_pid); + ChildWatch.add (client_pid, client_exit); + } + else + { + // client + var test = (Test) conn.get_object ("org.example.Test", "/org/example/test"); + + test.foo.connect ((i) => { + assert (i == 42); + main_loop.quit (); + }); + + test.do_foo (42); + } + + main_loop = new MainLoop (null, false); + main_loop.run (); +} + -- 1.7.0.1