[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