diff options
author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2012-04-25 15:57:13 +0100 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2012-04-30 19:20:03 +0100 |
commit | 521799547ad4daf15d006a9ede630bcc7ff98f86 (patch) | |
tree | c70af4413bde4803756855c7bcb7e1283b7a3ee3 /tests/capabilities.c | |
parent | 6cdfe94bfdb340455fa1c377fb807a45cbb265d1 (diff) | |
download | telepathy-glib-521799547ad4daf15d006a9ede630bcc7ff98f86.tar.gz |
Add and test functions to check for particular file transfer properties
These functions make the simplifying assumption that all of these
properties are orthogonal, so if both (say) InitialOffset and Description
are supported, then they'll be supported in the same requestable
channel class.
This is about the best you can do without exposing the
requestable channel classes themselves as API and having applications
iterate through them, which seems lower-level than we want.
Signed-off-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
Reviewed-by: Jonny Lamb <jonny.lamb@collabora.co.uk>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=48780
Diffstat (limited to 'tests/capabilities.c')
-rw-r--r-- | tests/capabilities.c | 140 |
1 files changed, 134 insertions, 6 deletions
diff --git a/tests/capabilities.c b/tests/capabilities.c index 61c1ce60d..45ee48c21 100644 --- a/tests/capabilities.c +++ b/tests/capabilities.c @@ -53,15 +53,19 @@ add_text_chat_class (GPtrArray *classes, } static void -add_ft_class (GPtrArray *classes) +add_ft_class (GPtrArray *classes, + const gchar * const *allowed) { GHashTable *fixed; - const gchar * const allowed[] = { + const gchar * const default_allowed[] = { TP_PROP_CHANNEL_TYPE_FILE_TRANSFER_FILENAME, TP_PROP_CHANNEL_TYPE_FILE_TRANSFER_SIZE, NULL }; GValueArray *arr; + if (allowed == NULL) + allowed = default_allowed; + fixed = tp_asv_new ( TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_FILE_TRANSFER, @@ -95,7 +99,7 @@ test_basics (Test *test, /* TpCapabilities containing the text chats and ft caps */ classes = g_ptr_array_sized_new (2); add_text_chat_class (classes, TP_HANDLE_TYPE_CONTACT); - add_ft_class (classes); + add_ft_class (classes, NULL); caps = tp_tests_object_new_static_class (TP_TYPE_CAPABILITIES, "channel-classes", classes, @@ -628,7 +632,7 @@ test_supports_room_list (Test *test, /* Does not support room list */ classes = g_ptr_array_sized_new (4); - add_ft_class (classes); + add_ft_class (classes, NULL); caps = tp_tests_object_new_static_class (TP_TYPE_CAPABILITIES, "channel-classes", classes, @@ -645,7 +649,7 @@ test_supports_room_list (Test *test, /* Support room list but no server */ classes = g_ptr_array_sized_new (4); - add_ft_class (classes); + add_ft_class (classes, NULL); add_room_list_class (classes, FALSE, FALSE); caps = tp_tests_object_new_static_class (TP_TYPE_CAPABILITIES, @@ -663,7 +667,7 @@ test_supports_room_list (Test *test, /* Support room list with server */ classes = g_ptr_array_sized_new (4); - add_ft_class (classes); + add_ft_class (classes, NULL); add_room_list_class (classes, TRUE, FALSE); caps = tp_tests_object_new_static_class (TP_TYPE_CAPABILITIES, @@ -961,6 +965,128 @@ test_supports_call (Test *test, g_object_unref (caps); } +static void +test_supports_ft_props (Test *test, + gconstpointer data G_GNUC_UNUSED) +{ + TpCapabilities *caps; + GPtrArray *classes; + const gchar * const allow_uri[] = { TP_PROP_CHANNEL_TYPE_FILE_TRANSFER_URI, + NULL }; + const gchar * const allow_desc[] = { + TP_PROP_CHANNEL_TYPE_FILE_TRANSFER_DESCRIPTION, NULL }; + const gchar * const allow_date[] = { + TP_PROP_CHANNEL_TYPE_FILE_TRANSFER_DATE, NULL }; + const gchar * const allow_initial_offset[] = { + TP_PROP_CHANNEL_TYPE_FILE_TRANSFER_INITIAL_OFFSET, NULL }; + + /* TpCapabilities containing no caps */ + caps = _tp_capabilities_new (NULL, TRUE); + + g_assert (!tp_capabilities_supports_file_transfer (caps)); + g_assert (!tp_capabilities_supports_file_transfer_uri (caps)); + g_assert (!tp_capabilities_supports_file_transfer_description (caps)); + g_assert (!tp_capabilities_supports_file_transfer_timestamp (caps)); + g_assert (!tp_capabilities_supports_file_transfer_initial_offset (caps)); + + g_object_unref (caps); + + classes = g_ptr_array_sized_new (1); + add_ft_class (classes, NULL); + + caps = tp_tests_object_new_static_class (TP_TYPE_CAPABILITIES, + "channel-classes", classes, + "contact-specific", TRUE, + NULL); + + g_boxed_free (TP_ARRAY_TYPE_REQUESTABLE_CHANNEL_CLASS_LIST, + classes); + + g_assert (tp_capabilities_supports_file_transfer (caps)); + g_assert (!tp_capabilities_supports_file_transfer_uri (caps)); + g_assert (!tp_capabilities_supports_file_transfer_description (caps)); + g_assert (!tp_capabilities_supports_file_transfer_timestamp (caps)); + g_assert (!tp_capabilities_supports_file_transfer_initial_offset (caps)); + + g_object_unref (caps); + + classes = g_ptr_array_sized_new (1); + add_ft_class (classes, allow_uri); + + caps = tp_tests_object_new_static_class (TP_TYPE_CAPABILITIES, + "channel-classes", classes, + "contact-specific", TRUE, + NULL); + + g_boxed_free (TP_ARRAY_TYPE_REQUESTABLE_CHANNEL_CLASS_LIST, + classes); + + g_assert (tp_capabilities_supports_file_transfer (caps)); + g_assert (tp_capabilities_supports_file_transfer_uri (caps)); + g_assert (!tp_capabilities_supports_file_transfer_description (caps)); + g_assert (!tp_capabilities_supports_file_transfer_timestamp (caps)); + g_assert (!tp_capabilities_supports_file_transfer_initial_offset (caps)); + + g_object_unref (caps); + + classes = g_ptr_array_sized_new (1); + add_ft_class (classes, allow_desc); + + caps = tp_tests_object_new_static_class (TP_TYPE_CAPABILITIES, + "channel-classes", classes, + "contact-specific", TRUE, + NULL); + + g_boxed_free (TP_ARRAY_TYPE_REQUESTABLE_CHANNEL_CLASS_LIST, + classes); + + g_assert (tp_capabilities_supports_file_transfer (caps)); + g_assert (!tp_capabilities_supports_file_transfer_uri (caps)); + g_assert (tp_capabilities_supports_file_transfer_description (caps)); + g_assert (!tp_capabilities_supports_file_transfer_timestamp (caps)); + g_assert (!tp_capabilities_supports_file_transfer_initial_offset (caps)); + + g_object_unref (caps); + + classes = g_ptr_array_sized_new (1); + add_ft_class (classes, allow_date); + + caps = tp_tests_object_new_static_class (TP_TYPE_CAPABILITIES, + "channel-classes", classes, + "contact-specific", TRUE, + NULL); + + g_boxed_free (TP_ARRAY_TYPE_REQUESTABLE_CHANNEL_CLASS_LIST, + classes); + + g_assert (tp_capabilities_supports_file_transfer (caps)); + g_assert (!tp_capabilities_supports_file_transfer_uri (caps)); + g_assert (!tp_capabilities_supports_file_transfer_description (caps)); + g_assert (tp_capabilities_supports_file_transfer_timestamp (caps)); + g_assert (!tp_capabilities_supports_file_transfer_initial_offset (caps)); + + g_object_unref (caps); + + classes = g_ptr_array_sized_new (1); + add_ft_class (classes, allow_initial_offset); + + caps = tp_tests_object_new_static_class (TP_TYPE_CAPABILITIES, + "channel-classes", classes, + "contact-specific", TRUE, + NULL); + + g_boxed_free (TP_ARRAY_TYPE_REQUESTABLE_CHANNEL_CLASS_LIST, + classes); + + g_assert (tp_capabilities_supports_file_transfer (caps)); + g_assert (!tp_capabilities_supports_file_transfer_uri (caps)); + g_assert (!tp_capabilities_supports_file_transfer_description (caps)); + g_assert (!tp_capabilities_supports_file_transfer_timestamp (caps)); + g_assert (tp_capabilities_supports_file_transfer_initial_offset (caps)); + + g_object_unref (caps); +} + int main (int argc, char **argv) @@ -974,6 +1100,8 @@ main (int argc, NULL); g_test_add (TEST_PREFIX "supports", Test, NULL, setup, test_supports, NULL); + g_test_add (TEST_PREFIX "supports/ft-props", Test, NULL, setup, + test_supports_ft_props, NULL); g_test_add (TEST_PREFIX "supports/tube", Test, NULL, setup, test_supports_tube, NULL); g_test_add (TEST_PREFIX "supports/room-list", Test, NULL, setup, |