Lines
62.11 %
Functions
54.55 %
Branches
58.33 %
#include <droute/droute.h>
#include <glib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "atspi/atspi.h"
#define TEST_OBJECT_PATH "/test/object"
#define TEST_INTERFACE_ONE "test.interface.One"
#define TEST_INTERFACE_TWO "test.interface.Two"
#define OBJECT_ONE "ObjectOne";
#define OBJECT_TWO "ObjectTwo";
#define STRING_ONE "StringOne"
#define STRING_TWO "StringTwo"
#define INT_ONE 0
#define INT_TWO 456
#define NONE_REPLY_STRING "NoneMethod"
const gchar *test_interface_One =
"<interface name=\"test.interface.One\">"
" <method name=\"null\"/>"
" <method name=\"getInt\">"
" <arg direction=\"out\" type=\"o\"/>"
" </method>"
" <method name=\"setInt\">"
" <arg direction=\"in\" type=\"o\"/>"
" <method name=\"getString\">"
" <arg direction=\"out\" type=\"s\"/>"
" <method name=\"setString\">"
" <arg direction=\"in\" type=\"s\"/>"
"</interface>";
const gchar *test_interface_Two =
typedef struct _AnObject
{
gchar *astring;
guint *anint;
} AnObject;
static DBusConnection *bus;
static GMainLoop *main_loop;
static gboolean success = TRUE;
static DBusMessage *
impl_null (DBusConnection *bus, DBusMessage *message, void *user_data)
DBusMessage *reply;
reply = dbus_message_new_method_return (message);
return reply;
}
impl_getInt (DBusConnection *bus, DBusMessage *message, void *user_data)
AnObject *object = (AnObject *) user_data;
DBusError error;
dbus_error_init (&error);
dbus_message_append_args (reply, DBUS_TYPE_INT32, &(object->anint), DBUS_TYPE_INVALID);
impl_setInt (DBusConnection *bus, DBusMessage *message, void *user_data)
dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &(object->anint), DBUS_TYPE_INVALID);
impl_getString (DBusConnection *bus, DBusMessage *message, void *user_data)
dbus_message_append_args (reply, DBUS_TYPE_STRING, &(object->astring), DBUS_TYPE_INVALID);
impl_setString (DBusConnection *bus, DBusMessage *message, void *user_data)
g_free (object->astring);
dbus_message_get_args (message, &error, DBUS_TYPE_STRING, &(object->astring), DBUS_TYPE_INVALID);
impl_getInterfaceOne (DBusConnection *bus, DBusMessage *message, void *user_data)
gchar *itf = TEST_INTERFACE_ONE;
dbus_message_append_args (reply, DBUS_TYPE_STRING, &itf, DBUS_TYPE_INVALID);
impl_getInterfaceTwo (DBusConnection *bus, DBusMessage *message, void *user_data)
gchar *itf = TEST_INTERFACE_TWO;
static DRouteMethod test_methods_one[] = {
{ impl_null, "null" },
{ impl_getInt, "getInt" },
{ impl_setInt, "setInt" },
{ impl_getString, "getString" },
{ impl_setString, "setString" },
{ impl_getInterfaceOne, "getInterfaceOne" },
{ NULL, NULL }
};
static DRouteMethod test_methods_two[] = {
{ impl_getInterfaceTwo, "getInterfaceTwo" },
static DRouteProperty test_properties[] = {
{ NULL, NULL, NULL }
static void
set_reply (DBusPendingCall *pending, void *user_data)
void **replyptr = (void **) user_data;
*replyptr = dbus_pending_call_steal_reply (pending);
dbus_pending_call_unref (pending);
send_and_allow_reentry (DBusConnection *bus, DBusMessage *message, DBusError *error)
DBusPendingCall *pending;
DBusMessage *reply = NULL;
if (!dbus_connection_send_with_reply (bus, message, &pending, -1))
return NULL;
dbus_pending_call_set_notify (pending, set_reply, (void *) &reply, NULL);
while (!reply)
if (!dbus_connection_read_write_dispatch (bus, -1))
gboolean
do_tests_func (gpointer data)
const gchar *bus_name;
DBusMessage *message, *reply;
gchar *expected_string;
gchar *result_string;
bus_name = dbus_bus_get_unique_name (bus);
/* --------------------------------------------------------*/
message = dbus_message_new_method_call (bus_name,
TEST_OBJECT_PATH,
TEST_INTERFACE_ONE,
"null");
reply = send_and_allow_reentry (bus, message, NULL);
dbus_message_unref (message);
if (reply)
dbus_message_unref (reply);
expected_string = TEST_INTERFACE_ONE;
result_string = NULL;
"getInterfaceOne");
dbus_message_get_args (reply, NULL, DBUS_TYPE_STRING, &result_string,
DBUS_TYPE_INVALID);
if (g_strcmp0 (expected_string, result_string))
g_print ("Failed: reply to getInterfaceOne was %s; expected %s\n",
result_string, expected_string);
exit (1);
g_main_loop_quit (main_loop);
return FALSE;
int
main (int argc, char **argv)
DRouteContext *cnx;
DRoutePath *path;
AnObject *object;
/* Setup some server object */
object = g_new0 (AnObject, 1);
object->astring = g_strdup (STRING_ONE);
object->anint = INT_ONE;
main_loop = g_main_loop_new (NULL, FALSE);
bus = dbus_bus_get (DBUS_BUS_SESSION, &error);
atspi_dbus_connection_setup_with_g_main (bus, g_main_context_default ());
cnx = droute_new ();
path = droute_add_one (cnx, TEST_OBJECT_PATH, object);
droute_path_add_interface (path,
test_interface_One,
test_methods_one,
test_properties);
TEST_INTERFACE_TWO,
test_interface_Two,
test_methods_two,
droute_path_register (path, bus);
g_idle_add (do_tests_func, NULL);
g_main_loop_run (main_loop);
droute_free (cnx);
g_free (object);
if (success)
return 0;
else
return 1;