summaryrefslogtreecommitdiffstats
path: root/dbus/dbus-message-factory.c
diff options
context:
space:
mode:
Diffstat (limited to 'dbus/dbus-message-factory.c')
-rw-r--r--dbus/dbus-message-factory.c98
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;
}