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
25 #ifdef DBUS_BUILD_TESTS
26 #include "dbus-message-factory.h"
27 #include "dbus-message-private.h"
29 typedef dbus_bool_t (* DBusInnerGeneratorFunc) (int sequence,
30 DBusMessage **message_p);
31 typedef dbus_bool_t (* DBusMessageGeneratorFunc) (int sequence,
33 DBusValidity *expected_validity);
36 set_reply_serial (DBusMessage *message)
39 _dbus_assert_not_reached ("oom");
40 if (!dbus_message_set_reply_serial (message, 100))
41 _dbus_assert_not_reached ("oom");
45 generate_trivial_inner (int sequence,
46 DBusMessage **message_p)
53 message = dbus_message_new_method_call ("org.freedesktop.TextEditor",
55 "org.freedesktop.DocumentFactory",
59 message = dbus_message_new (DBUS_MESSAGE_TYPE_METHOD_RETURN);
60 set_reply_serial (message);
63 message = dbus_message_new_signal ("/foo/bar",
64 "org.freedesktop.DocumentFactory",
68 message = dbus_message_new (DBUS_MESSAGE_TYPE_ERROR);
70 if (!dbus_message_set_error_name (message,
71 "org.freedesktop.TestErrorName"))
72 _dbus_assert_not_reached ("oom");
76 const char *v_STRING = "This is an error";
78 dbus_message_iter_init_append (message, &iter);
79 if (!dbus_message_iter_append_basic (&iter,
82 _dbus_assert_not_reached ("oom");
85 set_reply_serial (message);
92 _dbus_assert_not_reached ("oom");
100 generate_outer (int sequence,
102 DBusValidity *expected_validity,
103 DBusInnerGeneratorFunc func)
105 DBusMessage *message;
108 if (!(*func)(sequence, &message))
111 _dbus_assert (message != NULL);
113 _dbus_message_set_serial (message, 1);
114 _dbus_message_lock (message);
116 *expected_validity = DBUS_VALID;
118 /* move for efficiency, since we'll nuke the message anyway */
119 if (!_dbus_string_move (&message->header.data, 0,
121 _dbus_assert_not_reached ("oom");
123 if (!_dbus_string_copy (&message->body, 0,
124 data, _dbus_string_get_length (data)))
125 _dbus_assert_not_reached ("oom");
127 dbus_message_unref (message);
133 generate_trivial (int sequence,
135 DBusValidity *expected_validity)
137 return generate_outer (sequence, data, expected_validity,
138 generate_trivial_inner);
141 static const DBusMessageGeneratorFunc generators[] = {
146 _dbus_message_data_free (DBusMessageData *data)
148 _dbus_string_free (&data->data);
152 _dbus_message_data_iter_init (DBusMessageDataIter *iter)
159 _dbus_message_data_iter_get_and_next (DBusMessageDataIter *iter,
160 DBusMessageData *data)
162 DBusMessageGeneratorFunc func;
165 if (iter->generator == _DBUS_N_ELEMENTS (generators))
168 func = generators[iter->generator];
170 if (!_dbus_string_init (&data->data))
171 _dbus_assert_not_reached ("oom");
173 if ((*func)(iter->sequence, &data->data, &data->expected_validity))
177 iter->generator += 1;
179 _dbus_string_free (&data->data);
186 #endif /* DBUS_BUILD_TESTS */