telepathy-glib: Add ChatState unit tests

Xavier Claessens xclaesse at kemper.freedesktop.org
Wed May 9 09:11:30 PDT 2012


Module: telepathy-glib
Branch: master
Commit: 5cc59603b4747632c53c4cafd1dfa39079281e10
URL:    http://cgit.freedesktop.org/telepathy/telepathy-glib/commit/?id=5cc59603b4747632c53c4cafd1dfa39079281e10

Author: Xavier Claessens <xavier.claessens at collabora.co.uk>
Date:   Mon Apr 30 13:29:03 2012 +0200

Add ChatState unit tests

https://bugs.freedesktop.org/show_bug.cgi?id=49215

---

 tests/dbus/text-channel.c |   77 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 77 insertions(+), 0 deletions(-)

diff --git a/tests/dbus/text-channel.c b/tests/dbus/text-channel.c
index 6070138..dd4253c 100644
--- a/tests/dbus/text-channel.c
+++ b/tests/dbus/text-channel.c
@@ -969,6 +969,81 @@ test_receive_muc_delivery (Test *test,
   g_ptr_array_unref (parts);
 }
 
+static void
+set_chat_state_cb (GObject *source,
+    GAsyncResult *result,
+    gpointer user_data)
+{
+  Test *test = user_data;
+
+  tp_text_channel_set_chat_state_finish (TP_TEXT_CHANNEL (source), result,
+      &test->error);
+
+  test->wait--;
+  if (test->wait <= 0)
+    g_main_loop_quit (test->mainloop);
+}
+
+static void
+contact_chat_state_changed_cb (TpTextChannel *channel,
+    TpContact *contact,
+    TpChannelChatState state,
+    Test *test)
+{
+  test->wait--;
+  if (test->wait <= 0)
+    g_main_loop_quit (test->mainloop);
+}
+
+static void
+test_chat_state (Test *test,
+    gconstpointer data G_GNUC_UNUSED)
+{
+  GQuark features[] = {
+      TP_CHANNEL_FEATURE_CONTACTS,
+      TP_TEXT_CHANNEL_FEATURE_CHAT_STATES,
+      0 };
+  TpContact *contact;
+  TpChannelChatState state;
+
+  /* Set an initial chat state, prepare the channel, and verify target contact
+   * has that state */
+  tp_message_mixin_change_chat_state (G_OBJECT (test->chan_service),
+      test->bob, TP_CHANNEL_CHAT_STATE_COMPOSING);
+
+  tp_tests_proxy_run_until_prepared (test->channel, features);
+
+  contact = tp_channel_get_target_contact ((TpChannel *) test->channel);
+  state = tp_text_channel_get_chat_state (test->channel, contact);
+  g_assert_cmpuint (state, ==, TP_CHANNEL_CHAT_STATE_COMPOSING);
+
+  /* Test setting invalid chat state */
+  tp_text_channel_set_chat_state_async (test->channel, -1,
+      set_chat_state_cb, test);
+  g_main_loop_run (test->mainloop);
+  g_assert_error (test->error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT);
+  g_clear_error (&test->error);
+
+  tp_text_channel_set_chat_state_async (test->channel,
+      TP_CHANNEL_CHAT_STATE_GONE, set_chat_state_cb, test);
+  g_main_loop_run (test->mainloop);
+  g_assert_error (test->error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT);
+  g_clear_error (&test->error);
+
+  /* Now set a valid chat state and verify self contact has that state */
+  tp_text_channel_set_chat_state_async (test->channel,
+      TP_CHANNEL_CHAT_STATE_COMPOSING, set_chat_state_cb, test);
+  g_signal_connect (test->channel, "contact-chat-state-changed",
+      G_CALLBACK (contact_chat_state_changed_cb), test);
+  test->wait = 2;
+  g_main_loop_run (test->mainloop);
+  g_assert_no_error (test->error);
+
+  contact = tp_connection_get_self_contact (test->connection);
+  state = tp_text_channel_get_chat_state (test->channel, contact);
+  g_assert_cmpuint (state, ==, TP_CHANNEL_CHAT_STATE_COMPOSING);
+}
+
 int
 main (int argc,
       char **argv)
@@ -1004,6 +1079,8 @@ main (int argc,
       test_sent_with_no_sender, teardown);
   g_test_add ("/text-channel/receive-muc-delivery", Test, NULL, setup,
       test_receive_muc_delivery, teardown);
+  g_test_add ("/text-channel/chat-state", Test, NULL, setup,
+      test_chat_state, teardown);
 
   return g_test_run ();
 }



More information about the telepathy-commits mailing list