4 #include <droute/droute.h>
6 #include "dbus/dbus-glib-lowlevel.h"
8 #define TEST_OBJECT_PATH "/test/object"
9 #define TEST_INTERFACE_ONE "test.interface.One"
10 #define TEST_INTERFACE_TWO "test.interface.Two"
12 #define OBJECT_ONE "ObjectOne";
13 #define OBJECT_TWO "ObjectTwo";
15 #if !defined TEST_INTROSPECTION_DIRECTORY
16 #error "No introspection XML directory defined"
19 #define STRING_ONE "StringOne"
20 #define STRING_TWO "StringTwo"
25 #define NONE_REPLY_STRING "NoneMethod"
27 typedef struct _AnObject
33 static DBusConnection *bus;
34 static GMainLoop *main_loop;
35 static gboolean success = TRUE;
38 impl_null (DBusConnection *bus, DBusMessage *message, void *user_data)
40 AnObject *object = (AnObject *) user_data;
44 reply = dbus_message_new_method_return (message);
49 impl_getInt (DBusConnection *bus, DBusMessage *message, void *user_data)
51 AnObject *object = (AnObject *) user_data;
55 dbus_error_init (&error);
57 reply = dbus_message_new_method_return (message);
58 dbus_message_append_args (reply, DBUS_TYPE_INT32, &(object->anint), DBUS_TYPE_INVALID);
63 impl_setInt (DBusConnection *bus, DBusMessage *message, void *user_data)
65 AnObject *object = (AnObject *) user_data;
69 dbus_error_init (&error);
71 dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &(object->anint), DBUS_TYPE_INVALID);
73 reply = dbus_message_new_method_return (message);
78 impl_getString (DBusConnection *bus, DBusMessage *message, void *user_data)
80 AnObject *object = (AnObject *) user_data;
84 dbus_error_init (&error);
86 reply = dbus_message_new_method_return (message);
87 dbus_message_append_args (reply, DBUS_TYPE_STRING, &(object->astring), DBUS_TYPE_INVALID);
92 impl_setString (DBusConnection *bus, DBusMessage *message, void *user_data)
94 AnObject *object = (AnObject *) user_data;
98 dbus_error_init (&error);
100 g_free (object->astring);
101 dbus_message_get_args (message, &error, DBUS_TYPE_STRING, &(object->astring), DBUS_TYPE_INVALID);
103 reply = dbus_message_new_method_return (message);
108 impl_getInterfaceOne (DBusConnection *bus, DBusMessage *message, void *user_data)
110 AnObject *object = (AnObject *) user_data;
113 gchar *itf = TEST_INTERFACE_ONE;
115 dbus_error_init (&error);
117 reply = dbus_message_new_method_return (message);
118 dbus_message_append_args (reply, DBUS_TYPE_STRING, &itf, DBUS_TYPE_INVALID);
123 impl_getInterfaceTwo (DBusConnection *bus, DBusMessage *message, void *user_data)
125 AnObject *object = (AnObject *) user_data;
128 gchar *itf = TEST_INTERFACE_TWO;
130 dbus_error_init (&error);
132 reply = dbus_message_new_method_return (message);
133 dbus_message_append_args (reply, DBUS_TYPE_STRING, &itf, DBUS_TYPE_INVALID);
137 static DRouteMethod test_methods_one[] = {
139 {impl_getInt, "getInt"},
140 {impl_setInt, "setInt"},
141 {impl_getString, "getString"},
142 {impl_setString, "setString"},
143 {impl_getInterfaceOne, "getInterfaceOne"},
147 static DRouteMethod test_methods_two[] = {
149 {impl_getInt, "getInt"},
150 {impl_setInt, "setInt"},
151 {impl_getString, "getString"},
152 {impl_setString, "setString"},
153 {impl_getInterfaceTwo, "getInterfaceTwo"},
157 static DRouteProperty test_properties[] = {
162 do_tests_func (gpointer data)
167 gchar *expected_string;
168 gchar *result_string;
170 dbus_error_init (&error);
171 bus_name = dbus_bus_get_unique_name (bus);
173 /* --------------------------------------------------------*/
175 dbind_method_call_reentrant (bus,
183 /* --------------------------------------------------------*/
185 expected_string = TEST_INTERFACE_ONE;
186 result_string = NULL;
187 dbind_method_call_reentrant (bus,
195 if (g_strcmp0(expected_string, result_string))
197 g_print ("Failed: reply to getInterfaceOne not as expected\n");
201 /* --------------------------------------------------------*/
204 g_main_loop_quit (main_loop);
209 int main (int argc, char **argv)
216 /* Setup some server object */
218 object = g_new0(AnObject, 1);
219 object->astring = g_strdup (STRING_ONE);
220 object->anint = INT_ONE;
222 dbus_error_init (&error);
223 main_loop = g_main_loop_new(NULL, FALSE);
224 bus = dbus_bus_get (DBUS_BUS_SESSION, &error);
225 dbus_connection_setup_with_g_main(bus, g_main_context_default());
227 cnx = droute_new (bus, TEST_INTROSPECTION_DIRECTORY);
228 path = droute_add_one (cnx, TEST_OBJECT_PATH, object);
230 droute_path_add_interface (path,
235 droute_path_add_interface (path,
240 g_idle_add (do_tests_func, NULL);
241 g_main_run(main_loop);