summaryrefslogtreecommitdiff
path: root/dbus/dbus-message-util.c
diff options
context:
space:
mode:
authorChristian Dywan <christian.dywan@lanedo.com>2010-09-23 19:22:53 +0200
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2015-05-13 18:44:42 +0100
commit8e83c6e4d5478085c7571bf5d2ea44a6ebce26c9 (patch)
treeb81452ad34c371094b8ffb3232ce8d16442c647d /dbus/dbus-message-util.c
parentae56222048a633248a50408b41a05b560125f138 (diff)
downloaddbus-8e83c6e4d5478085c7571bf5d2ea44a6ebce26c9.tar.gz
Implement dbus_message_iter_get_element_count
According unit tests are added to _dbus_message_test. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=30350 Reviewed-by: Havoc Pennington <hp@pobox.com>
Diffstat (limited to 'dbus/dbus-message-util.c')
-rw-r--r--dbus/dbus-message-util.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/dbus/dbus-message-util.c b/dbus/dbus-message-util.c
index 0c0ab7cc..ded72036 100644
--- a/dbus/dbus-message-util.c
+++ b/dbus/dbus-message-util.c
@@ -1208,6 +1208,16 @@ _dbus_message_test (const char *test_data_dir)
char **decomposed;
DBusInitialFDs *initial_fds;
dbus_bool_t ok;
+ char basic_types[] = DBUS_TYPE_BYTE_AS_STRING \
+ DBUS_TYPE_BOOLEAN_AS_STRING \
+ DBUS_TYPE_INT16_AS_STRING \
+ DBUS_TYPE_INT32_AS_STRING \
+ DBUS_TYPE_INT64_AS_STRING \
+ DBUS_TYPE_UINT16_AS_STRING \
+ DBUS_TYPE_UINT32_AS_STRING \
+ DBUS_TYPE_UINT64_AS_STRING \
+ DBUS_TYPE_DOUBLE_AS_STRING \
+ DBUS_TYPE_STRING_AS_STRING;
initial_fds = _dbus_check_fdleaks_enter ();
@@ -1598,6 +1608,52 @@ _dbus_message_test (const char *test_data_dir)
_dbus_check_fdleaks_leave (initial_fds);
initial_fds = _dbus_check_fdleaks_enter ();
+ /* Test enumeration of array elements */
+ for (i = strlen (basic_types) - 1; i > 0; i--)
+ {
+ int some;
+ char* signature = _dbus_strdup ("?");
+ signature[0] = basic_types[i];
+ s = "SomeThingToSay";
+ message = dbus_message_new_method_call ("de.ende.test",
+ "/de/ende/test", "de.ende.Test", "ArtistName");
+ _dbus_assert (message != NULL);
+ dbus_message_iter_init_append (message, &iter);
+ dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY,
+ signature, &array_iter);
+ for (some = 0; some < 3; some++)
+ {
+ if (basic_types[i] == DBUS_TYPE_STRING)
+ dbus_message_iter_append_basic (&array_iter, DBUS_TYPE_STRING, &s);
+ else
+ dbus_message_iter_append_basic (&array_iter, basic_types[i], &some);
+ }
+ dbus_message_iter_close_container (&iter, &array_iter);
+ dbus_message_iter_init (message, &iter);
+ _dbus_assert (dbus_message_iter_get_element_count (&iter) == some);
+ dbus_message_unref (message);
+ dbus_free (signature);
+ }
+ /* Array of structs */
+ message = dbus_message_new_method_call ("de.ende.test",
+ "/de/ende/test", "de.ende.Test", "ArtistName");
+ _dbus_assert (message != NULL);
+ dbus_message_iter_init_append (message, &iter);
+ dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY,
+ DBUS_STRUCT_BEGIN_CHAR_AS_STRING
+ DBUS_TYPE_STRING_AS_STRING
+ DBUS_STRUCT_END_CHAR_AS_STRING, &array_iter);
+ dbus_message_iter_open_container (&array_iter, DBUS_TYPE_STRUCT,
+ NULL, &struct_iter);
+ s = "SpamAndEggs";
+ dbus_message_iter_append_basic (&struct_iter, DBUS_TYPE_STRING, &s);
+ dbus_message_iter_close_container (&array_iter, &struct_iter);
+ dbus_message_iter_close_container (&iter, &array_iter);
+ dbus_message_iter_init (message, &iter);
+ _dbus_assert (dbus_message_iter_get_element_count (&iter) == 1);
+ dbus_message_unref (message);
+ check_memleaks ();
+
/* Check that we can abandon a container */
message = dbus_message_new_method_call ("org.freedesktop.DBus.TestService",
"/org/freedesktop/TestPath",