From 330ae27487375e2feadb77e90930f3b250ed7952 Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Sun, 23 Jan 2005 00:30:49 +0000 Subject: accidentally committed this stuff along with the doc changes, probably broken, will fix it soon --- dbus/dbus-message-factory.c | 136 ++++++++++++++++++++++++++++++++++++++++++++ dbus/dbus-message-factory.h | 60 +++++++++++++++++++ 2 files changed, 196 insertions(+) create mode 100644 dbus/dbus-message-factory.c create mode 100644 dbus/dbus-message-factory.h diff --git a/dbus/dbus-message-factory.c b/dbus/dbus-message-factory.c new file mode 100644 index 00000000..41d40137 --- /dev/null +++ b/dbus/dbus-message-factory.c @@ -0,0 +1,136 @@ +/* -*- mode: C; c-file-style: "gnu" -*- */ +/* dbus-message-factory.c Generator of valid and invalid message data for test suite + * + * Copyright (C) 2005 Red Hat Inc. + * + * Licensed under the Academic Free License version 2.1 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifdef DBUS_BUILD_TESTS + +#include "dbus-message-factory.h" +#include "dbus-message-private.h" + +typedef dbus_bool_t (* DBusMessageGeneratorFunc) (int sequence, + DBusMessage **message_p); + +static void +set_reply_serial (DBusMessage *message) +{ + if (message == NULL) + _dbus_assert_not_reached ("oom"); + if (!dbus_message_set_reply_serial (message, 100)) + _dbus_assert_not_reached ("oom"); +} + +static dbus_bool_t +generate_trivial (int sequence, + DBusMessage **message_p) +{ + DBusMessage *message; + + switch (sequence) + { + case 0: + message = dbus_message_new_method_call ("org.freedesktop.TextEditor", + "/foo/bar", + "org.freedesktop.DocumentFactory", + "Create"); + break; + case 1: + message = dbus_message_new (DBUS_MESSAGE_TYPE_METHOD_RETURN); + set_reply_serial (message); + break; + case 2: + message = dbus_message_new_signal ("/foo/bar", + "org.freedesktop.DocumentFactory", + "Created"); + break; + case 3: + message = dbus_message_new (DBUS_MESSAGE_TYPE_ERROR); + set_reply_serial (message); + break; + default: + return FALSE; + } + + if (message == NULL) + _dbus_assert_not_reached ("oom"); + + *message_p = message; + + return TRUE; +} + +static const DBusMessageGeneratorFunc generators[] = { + generate_trivial +}; + +void +_dbus_message_data_free (DBusMessageData *data) +{ + _dbus_string_free (&data->data); +} + +void +_dbus_message_data_iter_init (DBusMessageDataIter *iter) +{ + iter->generator = 0; + iter->sequence = 0; +} + +dbus_bool_t +_dbus_message_data_iter_get_and_next (DBusMessageDataIter *iter, + DBusMessageData *data) +{ + DBusMessageGeneratorFunc func; + DBusMessage *message; + + if (iter->generator == _DBUS_N_ELEMENTS (generators)) + return FALSE; + + func = generators[iter->generator]; + + if ((*func)(iter->sequence, &message)) + iter->sequence += 1; + else + { + iter->generator += 1; + iter->sequence = 0; + } + + _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; +} + +#endif /* DBUS_BUILD_TESTS */ diff --git a/dbus/dbus-message-factory.h b/dbus/dbus-message-factory.h new file mode 100644 index 00000000..28a169b9 --- /dev/null +++ b/dbus/dbus-message-factory.h @@ -0,0 +1,60 @@ +/* -*- mode: C; c-file-style: "gnu" -*- */ +/* dbus-message-factory.h Generator of valid and invalid message data for test suite + * + * Copyright (C) 2005 Red Hat Inc. + * + * Licensed under the Academic Free License version 2.1 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef DBUS_MESSAGE_FACTORY_H +#define DBUS_MESSAGE_FACTORY_H + +#ifdef DBUS_BUILD_TESTS + +#include +#include +#include + +DBUS_BEGIN_DECLS + +typedef struct +{ + dbus_bool_t validity_known; + DBusValidity expected_validity; + + DBusString data; + +} DBusMessageData; + +typedef struct +{ + int generator; + int sequence; +} DBusMessageDataIter; + +void _dbus_message_data_free (DBusMessageData *data); +void _dbus_message_data_iter_init (DBusMessageDataIter *iter); +dbus_bool_t _dbus_message_data_iter_get_and_next (DBusMessageDataIter *iter, + DBusMessageData *data); + + +DBUS_END_DECLS + +#endif /* DBUS_BUILD_TESTS */ + +#endif /* DBUS_MESSAGE_FACTORY_H */ -- cgit