1 /* -*- mode: C; c-file-style: "gnu" -*- */
2 /* dbus-message-factory.c Generator of valid and invalid message data for test suite
4 * Copyright (C) 2005 Red Hat Inc.
6 * Licensed under the Academic Free License version 2.1
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 #ifdef DBUS_BUILD_TESTS
26 #include "dbus-message-factory.h"
27 #include "dbus-message-private.h"
29 typedef dbus_bool_t (* DBusMessageGeneratorFunc) (int sequence,
30 DBusMessage **message_p);
33 set_reply_serial (DBusMessage *message)
36 _dbus_assert_not_reached ("oom");
37 if (!dbus_message_set_reply_serial (message, 100))
38 _dbus_assert_not_reached ("oom");
42 generate_trivial (int sequence,
43 DBusMessage **message_p)
50 message = dbus_message_new_method_call ("org.freedesktop.TextEditor",
52 "org.freedesktop.DocumentFactory",
56 message = dbus_message_new (DBUS_MESSAGE_TYPE_METHOD_RETURN);
57 set_reply_serial (message);
60 message = dbus_message_new_signal ("/foo/bar",
61 "org.freedesktop.DocumentFactory",
65 message = dbus_message_new (DBUS_MESSAGE_TYPE_ERROR);
66 set_reply_serial (message);
73 _dbus_assert_not_reached ("oom");
80 static const DBusMessageGeneratorFunc generators[] = {
85 _dbus_message_data_free (DBusMessageData *data)
87 _dbus_string_free (&data->data);
91 _dbus_message_data_iter_init (DBusMessageDataIter *iter)
98 _dbus_message_data_iter_get_and_next (DBusMessageDataIter *iter,
99 DBusMessageData *data)
101 DBusMessageGeneratorFunc func;
102 DBusMessage *message;
104 if (iter->generator == _DBUS_N_ELEMENTS (generators))
107 func = generators[iter->generator];
109 if ((*func)(iter->sequence, &message))
113 iter->generator += 1;
117 _dbus_assert (message != NULL);
119 if (!_dbus_string_init (&data->data))
120 _dbus_assert_not_reached ("oom");
122 /* move for efficiency, since we'll nuke the message anyway */
123 if (!_dbus_string_move (&message->header.data, 0,
125 _dbus_assert_not_reached ("oom");
127 if (!_dbus_string_copy (&message->body, 0,
128 &data->data, _dbus_string_get_length (&data->data)))
129 _dbus_assert_not_reached ("oom");
131 dbus_message_unref (message);
136 #endif /* DBUS_BUILD_TESTS */