[Galago-commits] r2329 - in trunk/libgalago: . libgalago tests
galago-commits at freedesktop.org
galago-commits at freedesktop.org
Sun Nov 20 01:01:31 PST 2005
Author: chipx86
Date: 2005-11-20 01:01:24 -0800 (Sun, 20 Nov 2005)
New Revision: 2329
Modified:
trunk/libgalago/ChangeLog
trunk/libgalago/libgalago/galago-presence.c
trunk/libgalago/libgalago/galago-status.c
trunk/libgalago/tests/check-libgalago.c
Log:
- Implement proper array storage of statuses in a GalagoPerson.
- Give GalagoPresence a D-BUS signature.
- Fine-tune the unit testing for D-BUS signatures on a per-class basis.
Modified: trunk/libgalago/ChangeLog
===================================================================
--- trunk/libgalago/ChangeLog 2005-11-20 00:19:43 UTC (rev 2328)
+++ trunk/libgalago/ChangeLog 2005-11-20 09:01:24 UTC (rev 2329)
@@ -1,3 +1,12 @@
+Sun Nov 20 01:00:24 PST 2005 Christian Hammond <chipx86 at chipx86.com>
+
+ * libgalago/galago-presence.c:
+ * libgalago/galago-status.c:
+ * tests/check-libgalago.c:
+ - Implement proper array storage of statuses in a GalagoPerson.
+ - Give GalagoPresence a D-BUS signature.
+ - Fine-tune the unit testing for D-BUS signatures on a per-class basis.
+
Sat Nov 19 16:18:38 PST 2005 Christian Hammond <chipx86 at chipx86.com>
* libgalago/galago-person.c:
Modified: trunk/libgalago/libgalago/galago-presence.c
===================================================================
--- trunk/libgalago/libgalago/galago-presence.c 2005-11-20 00:19:43 UTC (rev 2328)
+++ trunk/libgalago/libgalago/galago-presence.c 2005-11-20 09:01:24 UTC (rev 2329)
@@ -74,6 +74,7 @@
static void galago_presence_dbus_message_append(DBusMessageIter *iter,
const GalagoObject *object);
static void *galago_presence_dbus_message_get(DBusMessageIter *iter);
+static gchar *galago_presence_dbus_get_signature(void);
static void galago_presence_set_property(GObject *object, guint prop_id,
const GValue *value,
GParamSpec *pspec);
@@ -98,6 +99,7 @@
object_class->dbus_message_append = galago_presence_dbus_message_append;
object_class->dbus_message_get = galago_presence_dbus_message_get;
+ object_class->dbus_get_signature = galago_presence_dbus_get_signature;
gobject_class->set_property = galago_presence_set_property;
gobject_class->get_property = galago_presence_get_property;
@@ -248,6 +250,18 @@
return presence;
}
+static gchar *
+galago_presence_dbus_get_signature(void)
+{
+ return g_strconcat(
+ galago_object_type_get_dbus_signature(GALAGO_TYPE_ACCOUNT), // account
+ DBUS_TYPE_BOOLEAN_AS_STRING, // idle flag
+ DBUS_TYPE_UINT32_AS_STRING, // idle time
+ DBUS_TYPE_ARRAY_AS_STRING, // array of statuses
+ galago_object_type_get_dbus_signature(GALAGO_TYPE_STATUS),
+ NULL);
+}
+
static void
galago_presence_set_property(GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
@@ -655,10 +669,10 @@
int score1 = 0, score2 = 0;
GList *l;
- g_return_val_if_fail(presence1 == NULL ||
- GALAGO_IS_PRESENCE(presence1), 1);
- g_return_val_if_fail(presence2 == NULL ||
- GALAGO_IS_PRESENCE(presence2), -1);
+ g_return_val_if_fail(presence1 == NULL || GALAGO_IS_PRESENCE(presence1),
+ 1);
+ g_return_val_if_fail(presence2 == NULL || GALAGO_IS_PRESENCE(presence2),
+ -1);
if (presence1 == presence2)
return 0;
Modified: trunk/libgalago/libgalago/galago-status.c
===================================================================
--- trunk/libgalago/libgalago/galago-status.c 2005-11-20 00:19:43 UTC (rev 2328)
+++ trunk/libgalago/libgalago/galago-status.c 2005-11-20 09:01:24 UTC (rev 2329)
@@ -78,6 +78,8 @@
static void galago_status_dbus_message_append(DBusMessageIter *iter,
const GalagoObject *object);
static void *galago_status_dbus_message_get(DBusMessageIter *iter);
+static gchar *galago_status_dbus_get_signature(void);
+static const gchar *galago_status_attr_dbus_get_signature(void);
static GalagoObjectClass *parent_class = NULL;
@@ -94,6 +96,7 @@
object_class->destroy = galago_status_destroy;
object_class->dbus_message_append = galago_status_dbus_message_append;
object_class->dbus_message_get = galago_status_dbus_message_get;
+ object_class->dbus_get_signature = galago_status_dbus_get_signature;
}
static void
@@ -135,11 +138,11 @@
const GalagoObject *object)
{
GalagoStatus *status = (GalagoStatus *)object;
- GList *attrs, *l;
+ GList *l;
+ DBusMessageIter array_iter, struct_iter, value_iter;
GalagoStatusType type;
const char *id, *name;
gboolean exclusive;
- guint attr_count;
type = galago_status_get_primitive(status);
id = galago_status_get_id(status);
@@ -151,64 +154,92 @@
dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &name);
dbus_message_iter_append_basic(iter, DBUS_TYPE_BOOLEAN, &exclusive);
- attrs = galago_status_get_attributes(status);
+ dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY,
+ galago_status_attr_dbus_get_signature(),
+ &array_iter);
- attr_count = g_list_length(attrs);
- dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT32, &attr_count);
-
- for (l = attrs; l != NULL; l = l->next)
+ for (l = galago_status_get_attributes(status); l != NULL; l = l->next)
{
GalagoStatusAttr *attr = (GalagoStatusAttr *)l->data;
- GalagoStatusAttrType attr_type = galago_status_attr_get_type(attr);
const char *attr_id = galago_status_attr_get_id(attr);
- dbus_message_iter_append_basic(iter, DBUS_TYPE_BYTE, &attr_type);
- dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &attr_id);
+ dbus_message_iter_open_container(&array_iter, DBUS_TYPE_STRUCT, NULL,
+ &struct_iter);
+ dbus_message_iter_append_basic(&struct_iter, DBUS_TYPE_STRING,
+ &attr_id);
- switch (attr_type)
+ switch (galago_status_attr_get_type(attr))
{
case GALAGO_STATUS_ATTR_BOOL:
{
gboolean value = galago_status_attr_get_bool(attr);
- dbus_message_iter_append_basic(iter, DBUS_TYPE_BOOLEAN,
- &value);
+ dbus_message_iter_open_container(&struct_iter,
+ DBUS_TYPE_VARIANT,
+ DBUS_TYPE_BOOLEAN_AS_STRING,
+ &value_iter);
+ dbus_message_iter_append_basic(&value_iter,
+ DBUS_TYPE_BOOLEAN, &value);
+ dbus_message_iter_close_container(&struct_iter, &value_iter);
break;
}
case GALAGO_STATUS_ATTR_STRING:
{
const char *value = galago_status_attr_get_string(attr);
- dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &value);
+ dbus_message_iter_open_container(&struct_iter,
+ DBUS_TYPE_VARIANT,
+ DBUS_TYPE_STRING_AS_STRING,
+ &value_iter);
+ dbus_message_iter_append_basic(&value_iter,
+ DBUS_TYPE_STRING, &value);
+ dbus_message_iter_close_container(&struct_iter, &value_iter);
break;
}
case GALAGO_STATUS_ATTR_INT:
{
int value = galago_status_attr_get_int(attr);
- dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT32, &value);
+ dbus_message_iter_open_container(&struct_iter,
+ DBUS_TYPE_VARIANT,
+ DBUS_TYPE_UINT32_AS_STRING,
+ &value_iter);
+ dbus_message_iter_append_basic(&value_iter,
+ DBUS_TYPE_UINT32, &value);
+ dbus_message_iter_close_container(&struct_iter, &value_iter);
break;
}
case GALAGO_STATUS_ATTR_DOUBLE:
{
double value = galago_status_attr_get_double(attr);
- dbus_message_iter_append_basic(iter, DBUS_TYPE_DOUBLE, &value);
+ dbus_message_iter_open_container(&struct_iter,
+ DBUS_TYPE_VARIANT,
+ DBUS_TYPE_DOUBLE_AS_STRING,
+ &value_iter);
+ dbus_message_iter_append_basic(&value_iter,
+ DBUS_TYPE_DOUBLE, &value);
+ dbus_message_iter_close_container(&struct_iter, &value_iter);
break;
}
default: /* This should never be reached. */
+ g_assert_not_reached();
break;
}
+
+ dbus_message_iter_close_container(&array_iter, &struct_iter);
}
+
+ dbus_message_iter_close_container(iter, &array_iter);
}
static void *
galago_status_dbus_message_get(DBusMessageIter *iter)
{
GalagoStatus *status;
+ DBusMessageIter array_iter, struct_iter, value_iter;
char type;
const char *id, *name;
- dbus_uint32_t num_attrs, i;
gboolean exclusive;
dbus_message_iter_get_basic(iter, &type);
@@ -225,65 +256,86 @@
status = galago_status_new((GalagoStatusType)type, id, name, exclusive);
- dbus_message_iter_get_basic(iter, &num_attrs);
+ dbus_message_iter_recurse(iter, &array_iter);
- for (i = 0; i < num_attrs; i++)
+ while (dbus_message_iter_get_arg_type(&array_iter) != DBUS_TYPE_INVALID)
{
- char attr_type;
const char *attr_id;
- const char *str;
- dbus_message_iter_next(iter);
+ dbus_message_iter_recurse(&array_iter, &struct_iter);
+ dbus_message_iter_get_basic(&struct_iter, &attr_id);
+ dbus_message_iter_next(&struct_iter);
- dbus_message_iter_get_basic(iter, &attr_type);
- dbus_message_iter_next(iter);
+ dbus_message_iter_recurse(&struct_iter, &value_iter);
- dbus_message_iter_get_basic(iter, &attr_id);
-
- switch ((GalagoStatusAttrType)attr_type)
+ switch (dbus_message_iter_get_arg_type(&value_iter))
{
- case GALAGO_STATUS_ATTR_BOOL:
+ case DBUS_TYPE_BOOLEAN:
{
gboolean value;
- dbus_message_iter_next(iter);
- dbus_message_iter_get_basic(iter, &value);
+ dbus_message_iter_get_basic(&value_iter, &value);
galago_status_set_attr_bool(status, attr_id, value);
break;
}
- case GALAGO_STATUS_ATTR_STRING:
- dbus_message_iter_next(iter);
- str = galago_dbus_message_iter_get_string_or_nil(iter);
- galago_status_set_attr_string(status, attr_id, str);
+ case DBUS_TYPE_STRING:
+ {
+ const char *value;
+ dbus_message_iter_get_basic(&value_iter, &value);
+ galago_status_set_attr_string(status, attr_id, value);
break;
+ }
- case GALAGO_STATUS_ATTR_INT:
+ case DBUS_TYPE_UINT32:
{
dbus_uint32_t value;
- dbus_message_iter_next(iter);
- dbus_message_iter_get_basic(iter, &value);
+ dbus_message_iter_get_basic(&value_iter, &value);
galago_status_set_attr_int(status, attr_id, value);
break;
}
- case GALAGO_STATUS_ATTR_DOUBLE:
+ case DBUS_TYPE_DOUBLE:
{
double value;
- dbus_message_iter_next(iter);
- dbus_message_iter_get_basic(iter, &value);
+ dbus_message_iter_get_basic(&value_iter, &value);
galago_status_set_attr_double(status, attr_id, value);
break;
}
default: /* This should never be reached. */
+ g_assert_not_reached();
break;
}
+
+ dbus_message_iter_next(&array_iter);
}
return status;
}
+static const gchar *
+galago_status_attr_dbus_get_signature(void)
+{
+ return DBUS_STRUCT_BEGIN_CHAR_AS_STRING
+ DBUS_TYPE_STRING_AS_STRING // id
+ DBUS_TYPE_VARIANT_AS_STRING // value
+ DBUS_STRUCT_END_CHAR_AS_STRING;
+}
+static gchar *
+galago_status_dbus_get_signature(void)
+{
+ return g_strconcat(
+ DBUS_TYPE_BYTE_AS_STRING, // type
+ DBUS_TYPE_STRING_AS_STRING, // id
+ DBUS_TYPE_STRING_AS_STRING, // name
+ DBUS_TYPE_BOOLEAN_AS_STRING, // exclusive
+ DBUS_TYPE_ARRAY_AS_STRING, // array of attributes
+ galago_status_attr_dbus_get_signature,
+ NULL);
+}
+
+
/**************************************************************************
* Status ID to Name mapping
**************************************************************************/
@@ -462,8 +514,8 @@
type = galago_status_get_primitive(status);
- return (type == GALAGO_STATUS_AVAILABLE ||
- type == GALAGO_STATUS_HIDDEN);
+ return type == GALAGO_STATUS_AVAILABLE ||
+ type == GALAGO_STATUS_HIDDEN;
}
static GalagoStatusAttr *
@@ -607,7 +659,8 @@
if (attr == NULL)
return NULL;
- else if (attr->type != type)
+
+ if (attr->type != type)
{
galago_log_error("Attempted to retrieve existing attribute ID %s with "
"invalid type: %s\n",
@@ -693,7 +746,7 @@
g_return_val_if_fail(attr_id != NULL, FALSE);
g_return_val_if_fail(GALAGO_IS_STATUS(status), FALSE);
- return (g_hash_table_lookup(status->priv->attrs_table, attr_id) != NULL);
+ return g_hash_table_lookup(status->priv->attrs_table, attr_id) != NULL;
}
GList *
Modified: trunk/libgalago/tests/check-libgalago.c
===================================================================
--- trunk/libgalago/tests/check-libgalago.c 2005-11-20 00:19:43 UTC (rev 2328)
+++ trunk/libgalago/tests/check-libgalago.c 2005-11-20 09:01:24 UTC (rev 2329)
@@ -28,23 +28,48 @@
/**************************************************************************
* libgalago tests
**************************************************************************/
-START_TEST(test_dbus_signatures)
+START_TEST(test_dbus_signature_account)
{
fail_unless(
galago_object_type_get_dbus_signature(GALAGO_TYPE_ACCOUNT) != NULL,
"GalagoAccount's D-BUS signature is NULL");
+}
+END_TEST
+
+START_TEST(test_dbus_signature_image)
+{
fail_unless(
galago_object_type_get_dbus_signature(GALAGO_TYPE_IMAGE) != NULL,
"GalagoImage's D-BUS signature is NULL");
+}
+END_TEST
+
+START_TEST(test_dbus_signature_person)
+{
fail_unless(
galago_object_type_get_dbus_signature(GALAGO_TYPE_PERSON) != NULL,
"GalagoPerson's D-BUS signature is NULL");
+}
+END_TEST
+
+START_TEST(test_dbus_signature_presence)
+{
fail_unless(
galago_object_type_get_dbus_signature(GALAGO_TYPE_PRESENCE) != NULL,
"GalagoPresence's D-BUS signature is NULL");
+}
+END_TEST
+
+START_TEST(test_dbus_signature_service)
+{
fail_unless(
galago_object_type_get_dbus_signature(GALAGO_TYPE_SERVICE) != NULL,
"GalagoService's D-BUS signature is NULL");
+}
+END_TEST
+
+START_TEST(test_dbus_signature_status)
+{
fail_unless(
galago_object_type_get_dbus_signature(GALAGO_TYPE_STATUS) != NULL,
"GalagoStatus's D-BUS signature is NULL");
@@ -91,8 +116,15 @@
/* libgalago tests */
ADD_TCASE("init_reinit", test_init_reinit); /* This MUST run first! */
- ADD_TCASE("dbus_signatures", test_dbus_signatures);
+ /* Test D-BUS object signature support */
+ ADD_TCASE("dbus_signature_account", test_dbus_signature_account);
+ ADD_TCASE("dbus_signature_image", test_dbus_signature_image);
+ ADD_TCASE("dbus_signature_person", test_dbus_signature_person);
+ ADD_TCASE("dbus_signature_presence", test_dbus_signature_presence);
+ ADD_TCASE("dbus_signature_service", test_dbus_signature_service);
+ ADD_TCASE("dbus_signature_status", test_dbus_signature_status);
+
return s;
}
More information about the galago-commits
mailing list