diff options
Diffstat (limited to 'dbus/dbus-message-factory.c')
-rw-r--r-- | dbus/dbus-message-factory.c | 98 |
1 files changed, 74 insertions, 24 deletions
diff --git a/dbus/dbus-message-factory.c b/dbus/dbus-message-factory.c index 41d40137..d4b89565 100644 --- a/dbus/dbus-message-factory.c +++ b/dbus/dbus-message-factory.c @@ -20,14 +20,17 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ +#include <config.h> #ifdef DBUS_BUILD_TESTS - #include "dbus-message-factory.h" #include "dbus-message-private.h" -typedef dbus_bool_t (* DBusMessageGeneratorFunc) (int sequence, +typedef dbus_bool_t (* DBusInnerGeneratorFunc) (int sequence, DBusMessage **message_p); +typedef dbus_bool_t (* DBusMessageGeneratorFunc) (int sequence, + DBusString *data, + DBusValidity *expected_validity); static void set_reply_serial (DBusMessage *message) @@ -39,8 +42,8 @@ set_reply_serial (DBusMessage *message) } static dbus_bool_t -generate_trivial (int sequence, - DBusMessage **message_p) +generate_trivial_inner (int sequence, + DBusMessage **message_p) { DBusMessage *message; @@ -63,6 +66,22 @@ generate_trivial (int sequence, break; case 3: message = dbus_message_new (DBUS_MESSAGE_TYPE_ERROR); + + if (!dbus_message_set_error_name (message, + "org.freedesktop.TestErrorName")) + _dbus_assert_not_reached ("oom"); + + { + DBusMessageIter iter; + const char *v_STRING = "This is an error"; + + dbus_message_iter_init_append (message, &iter); + if (!dbus_message_iter_append_basic (&iter, + DBUS_TYPE_STRING, + &v_STRING)) + _dbus_assert_not_reached ("oom"); + } + set_reply_serial (message); break; default: @@ -77,6 +96,48 @@ generate_trivial (int sequence, return TRUE; } +static dbus_bool_t +generate_outer (int sequence, + DBusString *data, + DBusValidity *expected_validity, + DBusInnerGeneratorFunc func) +{ + DBusMessage *message; + + message = NULL; + if (!(*func)(sequence, &message)) + return FALSE; + + _dbus_assert (message != NULL); + + _dbus_message_set_serial (message, 1); + _dbus_message_lock (message); + + *expected_validity = DBUS_VALID; + + /* move for efficiency, since we'll nuke the message anyway */ + if (!_dbus_string_move (&message->header.data, 0, + data, 0)) + _dbus_assert_not_reached ("oom"); + + if (!_dbus_string_copy (&message->body, 0, + data, _dbus_string_get_length (data))) + _dbus_assert_not_reached ("oom"); + + dbus_message_unref (message); + + return TRUE; +} + +static dbus_bool_t +generate_trivial (int sequence, + DBusString *data, + DBusValidity *expected_validity) +{ + return generate_outer (sequence, data, expected_validity, + generate_trivial_inner); +} + static const DBusMessageGeneratorFunc generators[] = { generate_trivial }; @@ -99,36 +160,25 @@ _dbus_message_data_iter_get_and_next (DBusMessageDataIter *iter, DBusMessageData *data) { DBusMessageGeneratorFunc func; - DBusMessage *message; - + + restart: if (iter->generator == _DBUS_N_ELEMENTS (generators)) return FALSE; - + func = generators[iter->generator]; - if ((*func)(iter->sequence, &message)) + if (!_dbus_string_init (&data->data)) + _dbus_assert_not_reached ("oom"); + + if ((*func)(iter->sequence, &data->data, &data->expected_validity)) iter->sequence += 1; else { iter->generator += 1; iter->sequence = 0; + _dbus_string_free (&data->data); + goto restart; } - - _dbus_assert (message != NULL); - - if (!_dbus_string_init (&data->data)) - _dbus_assert_not_reached ("oom"); - - /* move for efficiency, since we'll nuke the message anyway */ - if (!_dbus_string_move (&message->header.data, 0, - &data->data, 0)) - _dbus_assert_not_reached ("oom"); - - if (!_dbus_string_copy (&message->body, 0, - &data->data, _dbus_string_get_length (&data->data))) - _dbus_assert_not_reached ("oom"); - - dbus_message_unref (message); return TRUE; } |