diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/glib/Makefile.am | 2 | ||||
| -rw-r--r-- | test/glib/test-dbus-glib.c | 16 | ||||
| -rw-r--r-- | test/glib/test-service-glib.c | 99 | ||||
| -rw-r--r-- | test/glib/test-service-glib.xml | 10 | 
4 files changed, 119 insertions, 8 deletions
diff --git a/test/glib/Makefile.am b/test/glib/Makefile.am index 77ee1906..04d9c644 100644 --- a/test/glib/Makefile.am +++ b/test/glib/Makefile.am @@ -61,7 +61,7 @@ my-object-marshal.h: Makefile my-object-marshal.list  CLEANFILES = $(BUILT_SOURCES) -test_service_glib_LDADD= $(top_builddir)/glib/libdbus-glib-1.la +test_service_glib_LDADD= $(top_builddir)/glib/libdbus-glib-1.la $(DBUS_GLIB_THREADS_LIBS)   else  ### not building tests diff --git a/test/glib/test-dbus-glib.c b/test/glib/test-dbus-glib.c index e8cb74af..fd71d743 100644 --- a/test/glib/test-dbus-glib.c +++ b/test/glib/test-dbus-glib.c @@ -441,7 +441,8 @@ main (int argc, char **argv)    if (dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID) != FALSE)      lose ("ThrowError call unexpectedly succeeded!");    if (!dbus_g_error_has_name (error, "org.freedesktop.DBus.Tests.MyObject.Foo")) -    lose ("ThrowError call returned unexpected error %s", dbus_g_error_get_name (error)); +    lose ("ThrowError call returned unexpected error \"%s\": %s", dbus_g_error_get_name (error), +	  error->message);    g_print ("ThrowError failed (as expected) returned error: %s\n", error->message);    g_clear_error (&error); @@ -490,6 +491,13 @@ main (int argc, char **argv)    if (v_UINT32_2 != 43)      lose ("(wrapped) increment call returned %d, should be 43", v_UINT32_2); +  v_UINT32_2 = 0; +  if (!org_freedesktop_DBus_Tests_MyObject_async_increment (proxy, 42, &v_UINT32_2, &error)) +    lose_gerror ("Failed to complete (wrapped) AsyncIncrement call", error); + +  if (v_UINT32_2 != 43) +    lose ("(wrapped) async increment call returned %d, should be 43", v_UINT32_2); +    g_print ("Calling (wrapped) throw_error\n");    if (org_freedesktop_DBus_Tests_MyObject_throw_error (proxy, &error) != FALSE)      lose ("(wrapped) ThrowError call unexpectedly succeeded!"); @@ -497,6 +505,12 @@ main (int argc, char **argv)    g_print ("(wrapped) ThrowError failed (as expected) returned error: %s\n", error->message);    g_clear_error (&error); +  if (org_freedesktop_DBus_Tests_MyObject_async_throw_error (proxy, &error) != FALSE) +    lose ("(wrapped) AsyncThrowError call unexpectedly succeeded!"); + +  g_print ("(wrapped) AsyncThrowError failed (as expected) returned error: %s\n", error->message); +  g_clear_error (&error); +    g_print ("Calling (wrapped) uppercase\n");    if (!org_freedesktop_DBus_Tests_MyObject_uppercase (proxy, "foobar", &v_STRING_2, &error))       lose_gerror ("Failed to complete (wrapped) Uppercase call", error); diff --git a/test/glib/test-service-glib.c b/test/glib/test-service-glib.c index 9d5dfcc8..84b57c68 100644 --- a/test/glib/test-service-glib.c +++ b/test/glib/test-service-glib.c @@ -44,7 +44,9 @@ typedef enum    MY_OBJECT_ERROR_BAR  } MyObjectError; -#define MY_OBJECT_ERROR my_object_error_quark () +#define MY_OBJECT_ERROR (my_object_error_quark ()) + +#define MY_TYPE_ERROR (my_object_error_get_type ())   gboolean my_object_do_nothing (MyObject *obj, GError **error); @@ -85,10 +87,16 @@ gboolean my_object_emit_frobnicate (MyObject *obj, GError **error);  gboolean my_object_terminate (MyObject *obj, GError **error); +gboolean my_object_async_increment (MyObject *obj, gint32 x, DBusGMethodInvocation *context); + +gboolean my_object_async_throw_error (MyObject *obj, DBusGMethodInvocation *context); +  #include "test-service-glib-glue.h"  GQuark my_object_error_quark (void); +GType my_object_error_get_type (void); +  /* Properties */  enum  { @@ -231,6 +239,30 @@ my_object_error_quark (void)    return quark;  } +/* This should really be standard. */ +#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC } + +GType +my_object_error_get_type (void) +{ +	static GType etype = 0; + +	if (etype == 0) +	{ +		static const GEnumValue values[] = +		{ + +			ENUM_ENTRY (MY_OBJECT_ERROR_FOO, "Foo"), +			ENUM_ENTRY (MY_OBJECT_ERROR_BAR, "Bar"), +			{ 0, 0, 0 } +		}; + +		etype = g_enum_register_static ("MyObjectError", values); +	} + +	return etype; +} +  static GObject *obj;  static GObject *obj2; @@ -250,9 +282,11 @@ my_object_increment (MyObject *obj, gint32 x, gint32 *ret, GError **error)  gboolean  my_object_throw_error (MyObject *obj, GError **error)  { -  dbus_g_error_set (error, -		    "org.freedesktop.DBus.Tests.MyObject.Foo", -		    "this method always loses");     +  g_set_error (error, +	       MY_OBJECT_ERROR, +	       MY_OBJECT_ERROR_FOO, +	       "%s", +	       "this method always loses");        return FALSE;  } @@ -464,6 +498,53 @@ my_object_emit_signal2 (MyObject *obj, GError **error)    return TRUE;  } +typedef struct { +  gint32 x; +  DBusGMethodInvocation *context; +} IncrementData; + +static gboolean +do_async_increment (IncrementData *data) +{ +  gint32 newx = data->x + 1; +  dbus_g_method_return (data->context, newx); +  g_free (data); +  return FALSE; +} + +gboolean +my_object_async_increment (MyObject *obj, gint32 x, DBusGMethodInvocation *context) +{ +  IncrementData *data = g_new0 (IncrementData, 1); +  data->x = x; +  data->context = context; +  g_idle_add ((GSourceFunc)do_async_increment, data); +  return TRUE; +} + +static gboolean +do_async_error (IncrementData *data) +{ +  GError *error; +  error = g_error_new (MY_OBJECT_ERROR, +		       MY_OBJECT_ERROR_FOO, +		       "%s", +		       "this method always loses"); +  dbus_g_method_return_error (data->context, error); +  g_free (data); +  return FALSE; +} + +gboolean +my_object_async_throw_error (MyObject *obj, DBusGMethodInvocation *context) +{ +  IncrementData *data = g_new0(IncrementData, 1); +  data->context = context; +  g_idle_add ((GSourceFunc)do_async_error,  data); +  return TRUE; +} + +  static GMainLoop *loop;  gboolean @@ -484,6 +565,14 @@ main (int argc, char **argv)    guint32 request_name_ret;    g_type_init (); +  g_thread_init (NULL); dbus_g_thread_init (); + +  dbus_g_object_type_install_info (MY_TYPE_OBJECT, +				   &dbus_glib_my_object_object_info); + +  dbus_g_error_domain_register (MY_OBJECT_ERROR, +				NULL, +				MY_TYPE_ERROR);    g_printerr ("Launching test-service-glib\n"); @@ -506,8 +595,6 @@ main (int argc, char **argv)    obj = g_object_new (MY_TYPE_OBJECT, NULL);    obj2 = g_object_new (MY_TYPE_OBJECT, NULL); -  dbus_g_object_type_install_info (MY_TYPE_OBJECT, -				   &dbus_glib_my_object_object_info);    dbus_g_connection_register_g_object (connection,                                         "/org/freedesktop/DBus/Tests/MyTestObject",                                         obj); diff --git a/test/glib/test-service-glib.xml b/test/glib/test-service-glib.xml index 83240b47..58058626 100644 --- a/test/glib/test-service-glib.xml +++ b/test/glib/test-service-glib.xml @@ -77,6 +77,16 @@      <method name="IncrementVal">      </method> +    <method name="AsyncIncrement"> +      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/> +      <arg type="u" name="x" /> +      <arg type="u" direction="out" /> +    </method> + +    <method name="AsyncThrowError"> +      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/> +    </method> +          <method name="GetVal">        <arg type="u" direction="out" />      </method>  | 
