[Telepathy-commits] [telepathy-glib/master] test-group-mixin: check change_members_detailed

Will Thompson will.thompson at collabora.co.uk
Mon Jan 12 04:18:11 PST 2009


---
 tests/dbus/group-mixin.c |  127 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 126 insertions(+), 1 deletions(-)

diff --git a/tests/dbus/group-mixin.c b/tests/dbus/group-mixin.c
index f00134f..e9c7b22 100644
--- a/tests/dbus/group-mixin.c
+++ b/tests/dbus/group-mixin.c
@@ -224,8 +224,131 @@ check_incoming_invitation (TestTextChannelGroup *service_chan,
 }
 
 static void
+in_the_desert (TestTextChannelGroup *service_chan,
+               TpChannel *chan)
+{
+  TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (
+      service_chan->conn, TP_HANDLE_TYPE_CONTACT);
+  TpHandle camel  = tp_handle_ensure (contact_repo, "camel", NULL, NULL);
+  TpHandle camel2 = tp_handle_ensure (contact_repo, "camel2", NULL, NULL);
+  TpHandle self_handle = service_chan->conn->self_handle;
+
+  /* A camel is approaching */
+  {
+    TpIntSet *add = tp_intset_new ();
+
+    tp_intset_add (add, camel);
+    expect_signals ("", camel, TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
+    tp_group_mixin_change_members ((GObject *) service_chan, "", add, NULL,
+        NULL, NULL, camel, TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
+    wait_for_outstanding_signals ();
+    MYASSERT (!outstanding_signals (),
+        ": MembersChanged and MembersChangedDetailed should have fired once");
+
+    tp_intset_destroy (add);
+  }
+
+  /* A second camel is approaching (invited by the first camel) */
+  {
+    TpIntSet *add = tp_intset_new ();
+    GHashTable *details = g_hash_table_new_full (g_str_hash, g_str_equal,
+        NULL, (GDestroyNotify) tp_g_value_slice_free);
+    GValue *v;
+
+    tp_intset_add (add, camel2);
+
+    v = tp_g_value_slice_new (G_TYPE_UINT);
+    g_value_set_uint (v, camel);
+    g_hash_table_insert (details, "actor", v);
+
+    expect_signals ("", camel, TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
+    tp_group_mixin_change_members_detailed ((GObject *) service_chan, add,
+        NULL, NULL, NULL, details);
+    wait_for_outstanding_signals ();
+    MYASSERT (!outstanding_signals (),
+        ": MembersChanged and MembersChangedDetailed should have fired once");
+
+    tp_intset_destroy (add);
+    g_hash_table_unref (details);
+  }
+
+  {
+    TpIntSet *del = tp_intset_new ();
+    GHashTable *details = g_hash_table_new_full (g_str_hash, g_str_equal,
+        NULL, (GDestroyNotify) tp_g_value_slice_free);
+    GValue *v;
+
+    tp_intset_add (del, camel);
+
+    v = tp_g_value_slice_new (G_TYPE_UINT);
+    g_value_set_uint (v, camel2);
+    g_hash_table_insert (details, "actor", v);
+
+    /* It turns out that spitting was not included in the GroupChangeReason
+     * enum.
+     */
+    v = tp_g_value_slice_new (G_TYPE_STRING);
+    g_value_set_static_string (v, "le.mac.Spat");
+    g_hash_table_insert (details, "error", v);
+
+    v = tp_g_value_slice_new (G_TYPE_STRING);
+    g_value_set_static_string (v, "fluid");
+    g_hash_table_insert (details, "saliva-consistency", v);
+
+    /* Kicking is the closest we have to this .. unsavory act. */
+    v = tp_g_value_slice_new (G_TYPE_UINT);
+    g_value_set_uint (v, TP_CHANNEL_GROUP_CHANGE_REASON_KICKED);
+    g_hash_table_insert (details, "change-reason", v);
+
+    v = tp_g_value_slice_new (G_TYPE_STRING);
+    g_value_set_static_string (v, "*ptooey*");
+    g_hash_table_insert (details, "message", v);
+
+    /* Check that all the right information was extracted from the dict. */
+    expect_signals ("*ptooey*", camel2,
+        TP_CHANNEL_GROUP_CHANGE_REASON_KICKED);
+    tp_group_mixin_change_members_detailed ((GObject *) service_chan, NULL,
+        del, NULL, NULL, details);
+    wait_for_outstanding_signals ();
+    MYASSERT (!outstanding_signals (),
+        ": MembersChanged and MembersChangedDetailed should have fired once");
+
+    tp_intset_destroy (del);
+    g_hash_table_unref (details);
+  }
+
+  /* We and the second camel should be left in the channel */
+  {
+    const TpIntSet *members = tp_channel_group_get_members (chan);
+    GArray *service_members;
+    TpHandle a, b;
+
+    MYASSERT_SAME_UINT (tp_intset_size (members), 2);
+    MYASSERT (tp_intset_is_member (members, self_handle), "");
+    MYASSERT (tp_intset_is_member (members, camel2), ": what a pity");
+
+    /* And let's check that the group mixin agrees, in case that's just the
+     * client binding being wrong.
+     */
+    tp_group_mixin_get_members ((GObject *) service_chan, &service_members,
+        NULL);
+    MYASSERT_SAME_UINT (service_members->len, 2);
+    a = g_array_index (service_members, TpHandle, 0);
+    b = g_array_index (service_members, TpHandle, 1);
+    MYASSERT (a != b, "");
+    MYASSERT (a == self_handle || b == self_handle, "");
+    MYASSERT (a == camel2 || b == camel2, "");
+
+    g_array_free (service_members, TRUE);
+  }
+
+  tp_handle_unref (contact_repo, camel);
+  tp_handle_unref (contact_repo, camel2);
+}
+
+static void
 test_group_mixin (TestTextChannelGroup *service_chan,
-    TpChannel *chan)
+                  TpChannel *chan)
 {
   GError *error = NULL;
 
@@ -243,6 +366,8 @@ test_group_mixin (TestTextChannelGroup *service_chan,
   check_initial_properties (chan);
 
   check_incoming_invitation (service_chan, chan);
+
+  in_the_desert (service_chan, chan);
 }
 
 int
-- 
1.5.6.5




More information about the Telepathy-commits mailing list