diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2013-09-27 14:52:36 +0200 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2013-09-30 14:06:47 +0200 |
commit | d0e14a0064e0ff6bee3caa7b034fd8bd44073151 (patch) | |
tree | f909ea1e268661db302df528d9449788ddd3e8c0 | |
parent | 9eddabeae916e360f2b7dbe1f2b2562ae86a86c3 (diff) | |
download | telepathy-logger-d0e14a0064e0ff6bee3caa7b034fd8bd44073151.tar.gz |
textchann-null has been replaced by echo-chan in tp-glib next
-rw-r--r-- | tests/lib/Makefile.am | 4 | ||||
-rw-r--r-- | tests/lib/echo-chan.c | 223 | ||||
-rw-r--r-- | tests/lib/echo-chan.h | 56 | ||||
-rw-r--r-- | tests/lib/textchan-null.c | 574 | ||||
-rw-r--r-- | tests/lib/textchan-null.h | 135 |
5 files changed, 281 insertions, 711 deletions
diff --git a/tests/lib/Makefile.am b/tests/lib/Makefile.am index 5a3b35d..1130029 100644 --- a/tests/lib/Makefile.am +++ b/tests/lib/Makefile.am @@ -5,6 +5,8 @@ libtp_logger_tests_la_SOURCES = \ contacts-conn.h \ contact-list-manager.c \ contact-list-manager.h \ + echo-chan.c \ + echo-chan.h \ room-list-chan.c \ room-list-chan.h \ simple-account.c \ @@ -13,8 +15,6 @@ libtp_logger_tests_la_SOURCES = \ simple-account-manager.h \ simple-conn.c \ simple-conn.h \ - textchan-null.c \ - textchan-null.h \ util.c \ util.h \ logger-test-helper.c \ diff --git a/tests/lib/echo-chan.c b/tests/lib/echo-chan.c new file mode 100644 index 0000000..868fbcf --- /dev/null +++ b/tests/lib/echo-chan.c @@ -0,0 +1,223 @@ +/* + * chan.c - an example text channel talking to a particular + * contact. Similar code is used for 1-1 IM channels in many protocols + * (IRC private messages ("/query"), XMPP IM etc.) + * + * Copyright (C) 2007 Collabora Ltd. <http://www.collabora.co.uk/> + * Copyright (C) 2007 Nokia Corporation + * + * Copying and distribution of this file, with or without modification, + * are permitted in any medium without royalty provided the copyright + * notice and this notice are preserved. + */ + +#include "config.h" + +#include "echo-chan.h" + +#include <telepathy-glib/telepathy-glib.h> +#include <telepathy-glib/telepathy-glib-dbus.h> + +static void destroyable_iface_init (gpointer iface, gpointer data); + +G_DEFINE_TYPE_WITH_CODE (TpTestsEchoChannel, + tp_tests_echo_channel, + TP_TYPE_BASE_CHANNEL, + G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_TYPE_TEXT, + tp_message_mixin_iface_init); + G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_DESTROYABLE, + destroyable_iface_init); + ) + +/* type definition stuff */ + +static GPtrArray * +tp_tests_echo_channel_get_interfaces (TpBaseChannel *self) +{ + GPtrArray *interfaces; + + interfaces = TP_BASE_CHANNEL_CLASS (tp_tests_echo_channel_parent_class)-> + get_interfaces (self); + + g_ptr_array_add (interfaces, TP_IFACE_CHANNEL_INTERFACE_DESTROYABLE); + return interfaces; +}; + +static void +tp_tests_echo_channel_init (TpTestsEchoChannel *self) +{ +} + +static void text_send (GObject *object, TpMessage *message, + TpMessageSendingFlags flags); + +static void +constructed (GObject *object) +{ + TpTestsEchoChannel *self = TP_TESTS_ECHO_CHANNEL (object); + TpBaseConnection *conn = tp_base_channel_get_connection (TP_BASE_CHANNEL (self)); + const TpChannelTextMessageType types[] = { + TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL, + TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION, + TP_CHANNEL_TEXT_MESSAGE_TYPE_NOTICE, + }; + const gchar * supported_content_types[] = { + "text/plain", + NULL + }; + g_assert (conn != NULL); + + G_OBJECT_CLASS (tp_tests_echo_channel_parent_class)->constructed (object); + + tp_base_channel_register (TP_BASE_CHANNEL (self)); + + tp_message_mixin_init (object, + G_STRUCT_OFFSET (TpTestsEchoChannel, message), + conn); + tp_message_mixin_implement_sending (object, + text_send, G_N_ELEMENTS (types), types, 0, 0, + supported_content_types); +} + +static void +finalize (GObject *object) +{ + tp_message_mixin_finalize (object); + + ((GObjectClass *) tp_tests_echo_channel_parent_class)->finalize (object); +} + +static void +tp_tests_echo_channel_close (TpTestsEchoChannel *self) +{ + GObject *object = (GObject *) self; + gboolean closed = tp_base_channel_is_destroyed (TP_BASE_CHANNEL (self)); + + if (!closed) + { + TpHandle first_sender; + + /* The manager wants to be able to respawn the channel if it has pending + * messages. When respawned, the channel must have the initiator set + * to the contact who sent us those messages (if it isn't already), + * and the messages must be marked as having been rescued so they + * don't get logged twice. */ + if (tp_message_mixin_has_pending_messages (object, &first_sender)) + { + tp_base_channel_reopened (TP_BASE_CHANNEL (self), first_sender); + tp_message_mixin_set_rescued (object); + } + else + { + tp_base_channel_destroyed (TP_BASE_CHANNEL (self)); + } + } +} + +static void +channel_close (TpBaseChannel *channel) +{ + TpTestsEchoChannel *self = TP_TESTS_ECHO_CHANNEL (channel); + + tp_tests_echo_channel_close (self); +} + +static void +tp_tests_echo_channel_class_init (TpTestsEchoChannelClass *klass) +{ + GObjectClass *object_class = (GObjectClass *) klass; + TpBaseChannelClass *base_class = TP_BASE_CHANNEL_CLASS (klass); + + object_class->constructed = constructed; + object_class->finalize = finalize; + + base_class->channel_type = TP_IFACE_CHANNEL_TYPE_TEXT; + base_class->target_handle_type = TP_HANDLE_TYPE_CONTACT; + base_class->get_interfaces = tp_tests_echo_channel_get_interfaces; + base_class->close = channel_close; + + tp_message_mixin_init_dbus_properties (object_class); +} + + +static void +text_send (GObject *object, + TpMessage *message, + TpMessageSendingFlags flags) +{ + TpTestsEchoChannel *self = TP_TESTS_ECHO_CHANNEL (object); + TpChannelTextMessageType type = tp_message_get_message_type (message); + TpChannelTextMessageType echo_type = type; + TpHandle target = tp_base_channel_get_target_handle (TP_BASE_CHANNEL (self)); + gchar *echo; + gint64 now = time (NULL); + const GHashTable *part; + const gchar *text; + TpMessage *msg; + + /* Pretend that the remote contact has replied. Normally, you'd + * call tp_text_mixin_receive or tp_text_mixin_receive_with_flags + * in response to network events */ + + part = tp_message_peek (message, 1); + text = tp_asv_get_string (part, "content"); + + switch (type) + { + case TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL: + echo = g_strdup_printf ("You said: %s", text); + break; + case TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION: + echo = g_strdup_printf ("notices that the user %s", text); + break; + case TP_CHANNEL_TEXT_MESSAGE_TYPE_NOTICE: + echo = g_strdup_printf ("You sent a notice: %s", text); + break; + default: + echo = g_strdup_printf ("You sent some weird message type, %u: \"%s\"", + type, text); + echo_type = TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL; + } + + tp_message_mixin_sent (object, message, 0, "", NULL); + + msg = tp_cm_message_new ( + tp_base_channel_get_connection (TP_BASE_CHANNEL (self)), + 2); + + tp_cm_message_set_sender (msg, target); + tp_message_set_uint32 (msg, 0, "message-type", echo_type); + tp_message_set_int64 (msg, 0, "message-sent", now); + tp_message_set_int64 (msg, 0, "message-received", now); + + tp_message_set_string (msg, 1, "content-type", "text/plain"); + tp_message_set_string (msg, 1, "content", echo); + + tp_message_mixin_take_received (object, msg); + + g_free (echo); +} + +static void +destroyable_destroy (TpSvcChannelInterfaceDestroyable *iface, + DBusGMethodInvocation *context) +{ + TpTestsEchoChannel *self = TP_TESTS_ECHO_CHANNEL (iface); + + tp_message_mixin_clear ((GObject *) self); + tp_base_channel_destroyed (TP_BASE_CHANNEL (self)); + + tp_svc_channel_interface_destroyable_return_from_destroy (context); +} + +static void +destroyable_iface_init (gpointer iface, + gpointer data) +{ + TpSvcChannelInterfaceDestroyableClass *klass = iface; + +#define IMPLEMENT(x) \ + tp_svc_channel_interface_destroyable_implement_##x (klass, destroyable_##x) + IMPLEMENT (destroy); +#undef IMPLEMENT +} diff --git a/tests/lib/echo-chan.h b/tests/lib/echo-chan.h new file mode 100644 index 0000000..5fbe6ee --- /dev/null +++ b/tests/lib/echo-chan.h @@ -0,0 +1,56 @@ +/* + * chan.h - header for an example channel + * + * Copyright (C) 2007 Collabora Ltd. <http://www.collabora.co.uk/> + * Copyright (C) 2007 Nokia Corporation + * + * Copying and distribution of this file, with or without modification, + * are permitted in any medium without royalty provided the copyright + * notice and this notice are preserved. + */ + +#ifndef __TP_TESTS_CHAN_H__ +#define __TP_TESTS_CHAN_H__ + +#include <glib-object.h> +#include <telepathy-glib/telepathy-glib.h> + +G_BEGIN_DECLS + +typedef struct _TpTestsEchoChannel TpTestsEchoChannel; +typedef struct _TpTestsEchoChannelClass TpTestsEchoChannelClass; +typedef struct _TpTestsEchoChannelPrivate TpTestsEchoChannelPrivate; + +GType tp_tests_echo_channel_get_type (void); + +#define TP_TESTS_TYPE_ECHO_CHANNEL \ + (tp_tests_echo_channel_get_type ()) +#define TP_TESTS_ECHO_CHANNEL(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TESTS_TYPE_ECHO_CHANNEL, \ + TpTestsEchoChannel)) +#define TP_TESTS_ECHO_CHANNEL_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TESTS_TYPE_ECHO_CHANNEL, \ + TpTestsEchoChannelClass)) +#define TP_TESTS_IS_ECHO_CHANNEL(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TESTS_TYPE_ECHO_CHANNEL)) +#define TP_TESTS_IS_ECHO_CHANNEL_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TESTS_TYPE_ECHO_CHANNEL)) +#define TP_TESTS_ECHO_CHANNEL_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_ECHO_CHANNEL, \ + TpTestsEchoChannelClass)) + +struct _TpTestsEchoChannelClass { + TpBaseChannelClass parent_class; + TpDBusPropertiesMixinClass dbus_properties_class; +}; + +struct _TpTestsEchoChannel { + TpBaseChannel parent; + TpMessageMixin message; + + TpTestsEchoChannelPrivate *priv; +}; + +G_END_DECLS + +#endif /* #ifndef __TP_TESTS_CHAN_H__ */ diff --git a/tests/lib/textchan-null.c b/tests/lib/textchan-null.c deleted file mode 100644 index c426acf..0000000 --- a/tests/lib/textchan-null.c +++ /dev/null @@ -1,574 +0,0 @@ -/* - * /dev/null as a text channel - * - * Copyright (C) 2008 Collabora Ltd. <http://www.collabora.co.uk/> - * Copyright (C) 2008 Nokia Corporation - * - * Copying and distribution of this file, with or without modification, - * are permitted in any medium without royalty provided the copyright - * notice and this notice are preserved. - */ - -#include "config.h" - -#include "textchan-null.h" - -#include <telepathy-glib/telepathy-glib.h> -#include <telepathy-glib/telepathy-glib-dbus.h> - -/* This is for text-mixin unit tests, others should be using ExampleEcho2Channel - * which uses newer TpMessageMixin */ -G_GNUC_BEGIN_IGNORE_DEPRECATIONS - -static void text_iface_init (gpointer iface, gpointer data); -static void channel_iface_init (gpointer iface, gpointer data); - -G_DEFINE_TYPE_WITH_CODE (TpTestsTextChannelNull, - tp_tests_text_channel_null, - G_TYPE_OBJECT, - G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL, channel_iface_init); - G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_TYPE_TEXT, text_iface_init); - G_IMPLEMENT_INTERFACE (TP_TYPE_CHANNEL_IFACE, NULL)) - -G_DEFINE_TYPE_WITH_CODE (TpTestsPropsTextChannel, - tp_tests_props_text_channel, - TP_TESTS_TYPE_TEXT_CHANNEL_NULL, - G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES, - tp_dbus_properties_mixin_iface_init)) - -G_DEFINE_TYPE_WITH_CODE (TpTestsPropsGroupTextChannel, - tp_tests_props_group_text_channel, - TP_TESTS_TYPE_PROPS_TEXT_CHANNEL, - G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_GROUP, - tp_group_mixin_iface_init)) - -static const char *tp_tests_text_channel_null_interfaces[] = { NULL }; - -/* type definition stuff */ - -enum -{ - PROP_OBJECT_PATH = 1, - PROP_CHANNEL_TYPE, - PROP_HANDLE_TYPE, - PROP_HANDLE, - PROP_TARGET_ID, - PROP_CONNECTION, - PROP_INTERFACES, - PROP_REQUESTED, - PROP_INITIATOR_HANDLE, - PROP_INITIATOR_ID, - N_PROPS -}; - -struct _TpTestsTextChannelNullPrivate -{ - TpBaseConnection *conn; - gchar *object_path; - TpHandle handle; - - unsigned closed:1; - unsigned disposed:1; -}; - -static void -tp_tests_text_channel_null_init (TpTestsTextChannelNull *self) -{ - self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, - TP_TESTS_TYPE_TEXT_CHANNEL_NULL, TpTestsTextChannelNullPrivate); -} - -static void -tp_tests_props_text_channel_init (TpTestsPropsTextChannel *self) -{ - self->dbus_property_interfaces_retrieved = g_hash_table_new (NULL, NULL); -} - -static GObject * -constructor (GType type, - guint n_props, - GObjectConstructParam *props) -{ - GObject *object = - G_OBJECT_CLASS (tp_tests_text_channel_null_parent_class)->constructor (type, - n_props, props); - TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (object); - TpHandleRepoIface *contact_repo = tp_base_connection_get_handles - (self->priv->conn, TP_HANDLE_TYPE_CONTACT); - - tp_handle_ref (contact_repo, self->priv->handle); - - tp_dbus_daemon_register_object ( - tp_base_connection_get_dbus_daemon (self->priv->conn), - self->priv->object_path, self); - - tp_text_mixin_init (object, G_STRUCT_OFFSET (TpTestsTextChannelNull, text), - contact_repo); - - tp_text_mixin_set_message_types (object, - TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL, - TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION, - TP_CHANNEL_TEXT_MESSAGE_TYPE_NOTICE, - G_MAXUINT); - - return object; -} - -static void -get_property (GObject *object, - guint property_id, - GValue *value, - GParamSpec *pspec) -{ - TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (object); - - switch (property_id) - { - case PROP_OBJECT_PATH: - g_value_set_string (value, self->priv->object_path); - break; - case PROP_CHANNEL_TYPE: - g_value_set_static_string (value, TP_IFACE_CHANNEL_TYPE_TEXT); - break; - case PROP_HANDLE_TYPE: - g_value_set_uint (value, TP_HANDLE_TYPE_CONTACT); - break; - case PROP_HANDLE: - g_value_set_uint (value, self->priv->handle); - break; - case PROP_TARGET_ID: - { - TpHandleRepoIface *contact_repo = tp_base_connection_get_handles ( - self->priv->conn, TP_HANDLE_TYPE_CONTACT); - - g_value_set_string (value, - tp_handle_inspect (contact_repo, self->priv->handle)); - } - break; - case PROP_REQUESTED: - g_value_set_boolean (value, TRUE); - break; - case PROP_INITIATOR_HANDLE: - g_value_set_uint (value, tp_base_connection_get_self_handle ( - self->priv->conn)); - break; - case PROP_INITIATOR_ID: - { - TpHandleRepoIface *contact_repo = tp_base_connection_get_handles ( - self->priv->conn, TP_HANDLE_TYPE_CONTACT); - - g_value_set_string (value, - tp_handle_inspect (contact_repo, - tp_base_connection_get_self_handle (self->priv->conn))); - } - break; - case PROP_INTERFACES: - g_value_set_boxed (value, tp_tests_text_channel_null_interfaces); - break; - case PROP_CONNECTION: - g_value_set_object (value, self->priv->conn); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - break; - } -} - -static void -set_property (GObject *object, - guint property_id, - const GValue *value, - GParamSpec *pspec) -{ - TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (object); - - switch (property_id) - { - case PROP_OBJECT_PATH: - g_free (self->priv->object_path); - self->priv->object_path = g_value_dup_string (value); - break; - case PROP_HANDLE: - /* we don't ref it here because we don't necessarily have access to the - * contact repo yet - instead we ref it in the constructor. - */ - self->priv->handle = g_value_get_uint (value); - break; - case PROP_HANDLE_TYPE: - case PROP_CHANNEL_TYPE: - /* these properties are writable in the interface, but not actually - * meaningfully changable on this channel, so we do nothing */ - break; - case PROP_CONNECTION: - self->priv->conn = g_value_get_object (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - break; - } -} - -void -tp_tests_text_channel_null_close (TpTestsTextChannelNull *self) -{ - if (!self->priv->closed) - { - self->priv->closed = TRUE; - tp_svc_channel_emit_closed (self); - tp_dbus_daemon_unregister_object ( - tp_base_connection_get_dbus_daemon (self->priv->conn), self); - } -} - -static void -dispose (GObject *object) -{ - TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (object); - - if (self->priv->disposed) - return; - - self->priv->disposed = TRUE; - tp_tests_text_channel_null_close (self); - - ((GObjectClass *) tp_tests_text_channel_null_parent_class)->dispose (object); -} - -static void -finalize (GObject *object) -{ - TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (object); - TpHandleRepoIface *contact_handles = tp_base_connection_get_handles - (self->priv->conn, TP_HANDLE_TYPE_CONTACT); - - tp_handle_unref (contact_handles, self->priv->handle); - g_free (self->priv->object_path); - - tp_text_mixin_finalize (object); - - ((GObjectClass *) tp_tests_text_channel_null_parent_class)->finalize (object); -} - -static void -tp_tests_text_channel_null_class_init (TpTestsTextChannelNullClass *klass) -{ - GObjectClass *object_class = (GObjectClass *) klass; - GParamSpec *param_spec; - - g_type_class_add_private (klass, sizeof (TpTestsTextChannelNullPrivate)); - - object_class->constructor = constructor; - object_class->set_property = set_property; - object_class->get_property = get_property; - object_class->dispose = dispose; - object_class->finalize = finalize; - - g_object_class_override_property (object_class, PROP_OBJECT_PATH, - "object-path"); - g_object_class_override_property (object_class, PROP_CHANNEL_TYPE, - "channel-type"); - g_object_class_override_property (object_class, PROP_HANDLE_TYPE, - "handle-type"); - g_object_class_override_property (object_class, PROP_HANDLE, "handle"); - - param_spec = g_param_spec_object ("connection", "TpBaseConnection object", - "Connection object that owns this channel", - TP_TYPE_BASE_CONNECTION, - G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); - g_object_class_install_property (object_class, PROP_CONNECTION, param_spec); - - param_spec = g_param_spec_boxed ("interfaces", "Extra D-Bus interfaces", - "Additional Channel.Interface.* interfaces", - G_TYPE_STRV, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); - g_object_class_install_property (object_class, PROP_INTERFACES, param_spec); - - param_spec = g_param_spec_string ("target-id", "Peer's ID", - "The string obtained by inspecting the target handle", - NULL, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); - g_object_class_install_property (object_class, PROP_TARGET_ID, param_spec); - - param_spec = g_param_spec_uint ("initiator-handle", "Initiator's handle", - "The contact who initiated the channel", - 0, G_MAXUINT32, 0, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); - g_object_class_install_property (object_class, PROP_INITIATOR_HANDLE, - param_spec); - - param_spec = g_param_spec_string ("initiator-id", "Initiator's ID", - "The string obtained by inspecting the initiator-handle", - NULL, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); - g_object_class_install_property (object_class, PROP_INITIATOR_ID, - param_spec); - - param_spec = g_param_spec_boolean ("requested", "Requested?", - "True if this channel was requested by the local user", - FALSE, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); - g_object_class_install_property (object_class, PROP_REQUESTED, param_spec); - - tp_text_mixin_class_init (object_class, - G_STRUCT_OFFSET (TpTestsTextChannelNullClass, text_class)); -} - -static void -tp_tests_props_text_channel_getter_gobject_properties (GObject *object, - GQuark interface, - GQuark name, - GValue *value, - gpointer getter_data) -{ - TpTestsPropsTextChannel *self = TP_TESTS_PROPS_TEXT_CHANNEL (object); - - g_hash_table_insert (self->dbus_property_interfaces_retrieved, - GUINT_TO_POINTER (interface), GUINT_TO_POINTER (interface)); - - tp_dbus_properties_mixin_getter_gobject_properties (object, interface, name, - value, getter_data); -} - -static void -props_finalize (GObject *object) -{ - TpTestsPropsTextChannel *self = TP_TESTS_PROPS_TEXT_CHANNEL (object); - - g_hash_table_unref (self->dbus_property_interfaces_retrieved); - - ((GObjectClass *) tp_tests_props_text_channel_parent_class)->finalize (object); -} - -static void -tp_tests_props_text_channel_class_init (TpTestsPropsTextChannelClass *klass) -{ - GObjectClass *object_class = (GObjectClass *) klass; - static TpDBusPropertiesMixinPropImpl channel_props[] = { - { "TargetHandleType", "handle-type", NULL }, - { "TargetHandle", "handle", NULL }, - { "ChannelType", "channel-type", NULL }, - { "Interfaces", "interfaces", NULL }, - { "TargetID", "target-id", NULL }, - { "Requested", "requested", NULL }, - { "InitiatorHandle", "initiator-handle", NULL }, - { "InitiatorID", "initiator-id", NULL }, - { NULL } - }; - static TpDBusPropertiesMixinIfaceImpl prop_interfaces[] = { - { TP_IFACE_CHANNEL, - tp_tests_props_text_channel_getter_gobject_properties, - NULL, - channel_props, - }, - { NULL } - }; - - object_class->finalize = props_finalize; - - klass->dbus_properties_class.interfaces = prop_interfaces; - tp_dbus_properties_mixin_class_init (object_class, - G_STRUCT_OFFSET (TpTestsPropsTextChannelClass, dbus_properties_class)); -} - -static void -tp_tests_props_group_text_channel_init (TpTestsPropsGroupTextChannel *self) -{ -} - -static void -group_constructed (GObject *self) -{ - TpBaseConnection *conn = TP_TESTS_TEXT_CHANNEL_NULL (self)->priv->conn; - void (*chain_up) (GObject *) = - ((GObjectClass *) tp_tests_props_group_text_channel_parent_class)->constructed; - - if (chain_up != NULL) - chain_up (self); - - tp_group_mixin_init (self, - G_STRUCT_OFFSET (TpTestsPropsGroupTextChannel, group), - tp_base_connection_get_handles (conn, TP_HANDLE_TYPE_CONTACT), - tp_base_connection_get_self_handle (conn)); - tp_group_mixin_change_flags (self, TP_CHANNEL_GROUP_FLAG_PROPERTIES, 0); -} - -static void -group_finalize (GObject *self) -{ - tp_group_mixin_finalize (self); - - ((GObjectClass *) tp_tests_props_group_text_channel_parent_class)->finalize (self); -} - -static gboolean -dummy_add_remove_member (GObject *obj, - TpHandle handle, - const gchar *message, - GError **error) -{ - return TRUE; -} - -static void -group_iface_props_getter (GObject *object, - GQuark interface, - GQuark name, - GValue *value, - gpointer getter_data) -{ - TpTestsPropsTextChannel *self = TP_TESTS_PROPS_TEXT_CHANNEL (object); - - g_hash_table_insert (self->dbus_property_interfaces_retrieved, - GUINT_TO_POINTER (interface), GUINT_TO_POINTER (interface)); - - tp_group_mixin_get_dbus_property (object, interface, name, value, getter_data); -} - -static void -tp_tests_props_group_text_channel_class_init (TpTestsPropsGroupTextChannelClass *klass) -{ - GObjectClass *object_class = (GObjectClass *) klass; - static TpDBusPropertiesMixinPropImpl group_props[] = { - { "GroupFlags", NULL, NULL }, - { "HandleOwners", NULL, NULL }, - { "LocalPendingMembers", NULL, NULL }, - { "Members", NULL, NULL }, - { "RemotePendingMembers", NULL, NULL }, - { "SelfHandle", NULL, NULL }, - { NULL } - }; - - object_class->constructed = group_constructed; - object_class->finalize = group_finalize; - - tp_group_mixin_class_init (object_class, - G_STRUCT_OFFSET (TpTestsPropsGroupTextChannelClass, group_class), - dummy_add_remove_member, - dummy_add_remove_member); - tp_dbus_properties_mixin_implement_interface (object_class, - TP_IFACE_QUARK_CHANNEL_INTERFACE_GROUP, group_iface_props_getter, NULL, - group_props); -} - -static void -channel_close (TpSvcChannel *iface, - DBusGMethodInvocation *context) -{ - TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (iface); - - tp_tests_text_channel_null_close (self); - tp_svc_channel_return_from_close (context); -} - -static void -channel_get_channel_type (TpSvcChannel *iface, - DBusGMethodInvocation *context) -{ - TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (iface); - - self->get_channel_type_called++; - - tp_svc_channel_return_from_get_channel_type (context, - TP_IFACE_CHANNEL_TYPE_TEXT); -} - -static void -channel_get_handle (TpSvcChannel *iface, - DBusGMethodInvocation *context) -{ - TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (iface); - - self->get_handle_called++; - - tp_svc_channel_return_from_get_handle (context, TP_HANDLE_TYPE_CONTACT, - self->priv->handle); -} - -static void -channel_get_interfaces (TpSvcChannel *iface, - DBusGMethodInvocation *context) -{ - TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (iface); - - self->get_interfaces_called++; - - tp_svc_channel_return_from_get_interfaces (context, - tp_tests_text_channel_null_interfaces); -} - -static void -channel_iface_init (gpointer iface, - gpointer data) -{ - TpSvcChannelClass *klass = iface; - -#define IMPLEMENT(x) tp_svc_channel_implement_##x (klass, channel_##x) - IMPLEMENT (close); - IMPLEMENT (get_channel_type); - IMPLEMENT (get_handle); - IMPLEMENT (get_interfaces); -#undef IMPLEMENT -} - -static void -text_send (TpSvcChannelTypeText *iface, - guint type, - const gchar *text, - DBusGMethodInvocation *context) -{ - /* silently swallow the message */ - tp_svc_channel_type_text_return_from_send (context); -} - -static void -text_iface_init (gpointer iface, - gpointer data) -{ - TpSvcChannelTypeTextClass *klass = iface; - - tp_text_mixin_iface_init (iface, data); -#define IMPLEMENT(x) tp_svc_channel_type_text_implement_##x (klass, text_##x) - IMPLEMENT (send); -#undef IMPLEMENT -} - -GHashTable * -tp_tests_text_channel_get_props (TpTestsTextChannelNull *self) -{ - GHashTable *props; - TpHandleType handle_type; - TpHandle handle; - gchar *target_id; - gboolean requested; - TpHandle initiator_handle; - gchar *initiator_id; - GStrv interfaces; - - g_object_get (self, - "handle-type", &handle_type, - "handle", &handle, - "target-id", &target_id, - "requested", &requested, - "initiator-handle", &initiator_handle, - "initiator-id", &initiator_id, - "interfaces", &interfaces, - NULL); - - props = tp_asv_new ( - TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_TEXT, - TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, handle_type, - TP_PROP_CHANNEL_TARGET_HANDLE, G_TYPE_UINT, handle, - TP_PROP_CHANNEL_TARGET_ID, G_TYPE_STRING, target_id, - TP_PROP_CHANNEL_REQUESTED, G_TYPE_BOOLEAN, requested, - TP_PROP_CHANNEL_INITIATOR_HANDLE, G_TYPE_UINT, initiator_handle, - TP_PROP_CHANNEL_INITIATOR_ID, G_TYPE_STRING, initiator_id, - TP_PROP_CHANNEL_INTERFACES, G_TYPE_STRV, interfaces, - NULL); - - g_free (target_id); - g_free (initiator_id); - g_strfreev (interfaces); - return props; -} - -G_GNUC_END_IGNORE_DEPRECATIONS diff --git a/tests/lib/textchan-null.h b/tests/lib/textchan-null.h deleted file mode 100644 index 076defb..0000000 --- a/tests/lib/textchan-null.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * /dev/null as a text channel - * - * Copyright (C) 2008 Collabora Ltd. <http://www.collabora.co.uk/> - * Copyright (C) 2008 Nokia Corporation - * - * Copying and distribution of this file, with or without modification, - * are permitted in any medium without royalty provided the copyright - * notice and this notice are preserved. - */ - -#ifndef __TP_TESTS_TEXT_CHANNEL_NULL_H__ -#define __TP_TESTS_TEXT_CHANNEL_NULL_H__ - -#include <glib-object.h> -#include <telepathy-glib/telepathy-glib.h> - -G_BEGIN_DECLS - -typedef struct _TpTestsTextChannelNull TpTestsTextChannelNull; -typedef struct _TpTestsTextChannelNullClass TpTestsTextChannelNullClass; -typedef struct _TpTestsTextChannelNullPrivate TpTestsTextChannelNullPrivate; - -GType tp_tests_text_channel_null_get_type (void); - -#define TP_TESTS_TYPE_TEXT_CHANNEL_NULL \ - (tp_tests_text_channel_null_get_type ()) -#define TP_TESTS_TEXT_CHANNEL_NULL(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TESTS_TYPE_TEXT_CHANNEL_NULL, \ - TpTestsTextChannelNull)) -#define TP_TESTS_TEXT_CHANNEL_NULL_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TESTS_TYPE_TEXT_CHANNEL_NULL, \ - TpTestsTextChannelNullClass)) -#define TP_TESTS_IS_TEXT_CHANNEL_NULL(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TESTS_TYPE_TEXT_CHANNEL_NULL)) -#define TP_TESTS_IS_TEXT_CHANNEL_NULL_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TESTS_TYPE_TEXT_CHANNEL_NULL)) -#define TP_TESTS_TEXT_CHANNEL_NULL_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_TEXT_CHANNEL_NULL, \ - TpTestsTextChannelNullClass)) - -struct _TpTestsTextChannelNullClass { - GObjectClass parent_class; - - TpTextMixinClass text_class; -}; - -struct _TpTestsTextChannelNull { - GObject parent; - TpTextMixin text; - - guint get_handle_called; - guint get_interfaces_called; - guint get_channel_type_called; - - TpTestsTextChannelNullPrivate *priv; -}; - -/* Subclass with D-Bus properties */ - -typedef struct _TestPropsTextChannel TpTestsPropsTextChannel; -typedef struct _TestPropsTextChannelClass TpTestsPropsTextChannelClass; - -struct _TestPropsTextChannel { - TpTestsTextChannelNull parent; - - GHashTable *dbus_property_interfaces_retrieved; -}; - -struct _TestPropsTextChannelClass { - TpTestsTextChannelNullClass parent; - - TpDBusPropertiesMixinClass dbus_properties_class; -}; - -GType tp_tests_props_text_channel_get_type (void); - -#define TP_TESTS_TYPE_PROPS_TEXT_CHANNEL \ - (tp_tests_props_text_channel_get_type ()) -#define TP_TESTS_PROPS_TEXT_CHANNEL(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TESTS_TYPE_PROPS_TEXT_CHANNEL, \ - TpTestsPropsTextChannel)) -#define TP_TESTS_PROPS_TEXT_CHANNEL_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TESTS_TYPE_PROPS_TEXT_CHANNEL, \ - TpTestsPropsTextChannelClass)) -#define TP_TESTS_IS_PROPS_TEXT_CHANNEL(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TESTS_TYPE_PROPS_TEXT_CHANNEL)) -#define TP_TESTS_IS_PROPS_TEXT_CHANNEL_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TESTS_TYPE_PROPS_TEXT_CHANNEL)) -#define TP_TESTS_PROPS_TEXT_CHANNEL_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_PROPS_TEXT_CHANNEL, \ - TpTestsPropsTextChannelClass)) - -/* Subclass with D-Bus properties and Group */ - -typedef struct _TestPropsGroupTextChannel TpTestsPropsGroupTextChannel; -typedef struct _TestPropsGroupTextChannelClass TpTestsPropsGroupTextChannelClass; - -struct _TestPropsGroupTextChannel { - TpTestsPropsTextChannel parent; - - TpGroupMixin group; -}; - -struct _TestPropsGroupTextChannelClass { - TpTestsPropsTextChannelClass parent; - - TpGroupMixinClass group_class; -}; - -GType tp_tests_props_group_text_channel_get_type (void); - -#define TP_TESTS_TYPE_PROPS_GROUP_TEXT_CHANNEL \ - (tp_tests_props_group_text_channel_get_type ()) -#define TP_TESTS_PROPS_GROUP_TEXT_CHANNEL(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TESTS_TYPE_PROPS_GROUP_TEXT_CHANNEL, \ - TpTestsPropsGroupTextChannel)) -#define TP_TESTS_PROPS_GROUP_TEXT_CHANNEL_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TESTS_TYPE_PROPS_GROUP_TEXT_CHANNEL, \ - TpTestsPropsGroupTextChannelClass)) -#define TP_TESTS_IS_PROPS_GROUP_TEXT_CHANNEL(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TESTS_TYPE_PROPS_GROUP_TEXT_CHANNEL)) -#define TP_TESTS_IS_PROPS_GROUP_TEXT_CHANNEL_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TESTS_TYPE_PROPS_GROUP_TEXT_CHANNEL)) -#define TP_TESTS_PROPS_GROUP_TEXT_CHANNEL_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_PROPS_GROUP_TEXT_CHANNEL, \ - TpTestsPropsGroupTextChannelClass)) - -void tp_tests_text_channel_null_close (TpTestsTextChannelNull *self); - -GHashTable * tp_tests_text_channel_get_props (TpTestsTextChannelNull *self); - -G_END_DECLS - -#endif /* #ifndef __TP_TESTS_TEXT_CHANNEL_NULL_H__ */ |