summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorColin Walters <walters@verbum.org>2005-06-30 18:22:10 +0000
committerColin Walters <walters@verbum.org>2005-06-30 18:22:10 +0000
commit03d040311afd4b988b9a277a8aa360fa20243c92 (patch)
tree727854d43f1bc8b3757ce198675f12751edc85c1 /test
parentb3c42d226438fd0fda2db19b92944dec5e226d3f (diff)
2005-06-30 Colin Walters <walters@verbum.org>
* test/glib/test-dbus-glib.c: * test/glib/test-service-glib.c: * test/glib/test-service-glib.xml: Update tests for new error setting bits, also add async tests (patch from Ross Burton). * test/glib/Makefile.am (test_service_glib_LDADD): Add DBUS_GLIB_THREADS_LIBS. * glib/dbus-gproxy.c (get_name_owner) (dbus_g_pending_call_end_valist): Ditto. * glib/dbus-gobject.c (error_metadata): New mapping from GError domain (GQuark) to DBusGErrorInfo. (gerror_domaincode_to_dbus_error_name): Attempt to look up error quark in error_metadata. Take message interface as default error message interface. (gerror_to_dbus_error_message): Pass message interface. (dbus_set_g_error): Resurrected. (dbus_g_error_info_free): New function. (dbus_g_object_type_install_info): Use g_type_class_ref instead of _peek to actually create the object class if it hasn't been created yet. (dbus_g_error_domain_register): New function. * glib/dbus-gmain.c (dbus_g_bus_get): Switch to dbus_set_g_error. * glib/dbus-gparser.c (validate_signature): Ditto. * dbus/dbus-glib.h (dbus_g_error_set): Delete. (dbus_g_error_domain_register): Prototype. * glib/dbus-glib.c (dbus_g_error_set): Delete. Update tests.
Diffstat (limited to 'test')
-rw-r--r--test/glib/Makefile.am2
-rw-r--r--test/glib/test-dbus-glib.c16
-rw-r--r--test/glib/test-service-glib.c99
-rw-r--r--test/glib/test-service-glib.xml10
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>