[Telepathy-commits] [telepathy-glib/master] test-group-mixin: check diff arrays of MembersChanged signals
Will Thompson
will.thompson at collabora.co.uk
Fri Jan 2 18:08:10 PST 2009
---
tests/dbus/group-mixin.c | 125 ++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 116 insertions(+), 9 deletions(-)
diff --git a/tests/dbus/group-mixin.c b/tests/dbus/group-mixin.c
index 72db2d4..d1723ca 100644
--- a/tests/dbus/group-mixin.c
+++ b/tests/dbus/group-mixin.c
@@ -27,12 +27,17 @@ static int fail = 0;
static GMainLoop *mainloop;
TestTextChannelGroup *service_chan;
TpChannel *chan = NULL;
+TpHandle camel, camel2;
+
+typedef void (*diff_checker) (const GArray *added, const GArray *removed,
+ const GArray *local_pending, const GArray *remote_pending);
static gboolean expecting_members_changed = FALSE;
static gboolean expecting_members_changed_detailed = FALSE;
static const gchar *expected_message;
static TpHandle expected_actor;
static TpChannelGroupChangeReason expected_reason;
+static diff_checker expected_diffs;
static void
myassert_failed (void)
@@ -43,7 +48,8 @@ myassert_failed (void)
static void
expect_signals (const gchar *message,
TpHandle actor,
- TpChannelGroupChangeReason reason)
+ TpChannelGroupChangeReason reason,
+ diff_checker check_diffs)
{
expecting_members_changed = TRUE;
expecting_members_changed_detailed = TRUE;
@@ -51,6 +57,7 @@ expect_signals (const gchar *message,
expected_message = message;
expected_actor = actor;
expected_reason = reason;
+ expected_diffs = check_diffs;
}
static gboolean
@@ -85,6 +92,9 @@ on_members_changed (TpChannel *proxy,
MYASSERT_SAME_UINT (arg_Actor, expected_actor);
MYASSERT_SAME_UINT (arg_Reason, expected_reason);
+ expected_diffs (arg_Added, arg_Removed, arg_Local_Pending,
+ arg_Remote_Pending);
+
if (!outstanding_signals ())
g_main_loop_quit (mainloop);
}
@@ -140,6 +150,9 @@ on_members_changed_detailed (TpChannel *proxy,
": utterly unreasonable");
}
+ expected_diffs (arg_Added, arg_Removed, arg_Local_Pending,
+ arg_Remote_Pending);
+
if (!outstanding_signals ())
g_main_loop_quit (mainloop);
}
@@ -185,6 +198,42 @@ check_initial_properties (void)
}
static void
+self_added_to_lp (const GArray *added,
+ const GArray *removed,
+ const GArray *local_pending,
+ const GArray *remote_pending)
+{
+ TpHandle h;
+
+ MYASSERT (added->len == 0, ": no new added to members");
+ MYASSERT (removed->len == 0, ": no-one removed");
+ MYASSERT (remote_pending->len == 0, ": no new remote pending");
+ MYASSERT (local_pending->len == 1, ": one local pending...");
+
+ /* ...which is us */
+ h = g_array_index (local_pending, TpHandle, 0);
+ MYASSERT_SAME_UINT (h, service_chan->conn->self_handle);
+}
+
+static void
+self_added_to_members (const GArray *added,
+ const GArray *removed,
+ const GArray *local_pending,
+ const GArray *remote_pending)
+{
+ TpHandle h;
+
+ MYASSERT (added->len == 1, ": one added");
+
+ h = g_array_index (added, TpHandle, 0);
+ MYASSERT_SAME_UINT (h, service_chan->conn->self_handle);
+
+ MYASSERT (removed->len == 0, ": no-one removed");
+ MYASSERT (local_pending->len == 0, ": no new local pending");
+ MYASSERT (remote_pending->len == 0, ": no new remote pending");
+}
+
+static void
check_incoming_invitation (void)
{
GError *error = NULL;
@@ -194,7 +243,8 @@ check_incoming_invitation (void)
TpIntSet *add_local_pending = tp_intset_new ();
tp_intset_add (add_local_pending, service_chan->conn->self_handle);
- expect_signals ("HELLO THAR", 0, TP_CHANNEL_GROUP_CHANGE_REASON_INVITED);
+ expect_signals ("HELLO THAR", 0, TP_CHANNEL_GROUP_CHANGE_REASON_INVITED,
+ self_added_to_lp);
tp_group_mixin_change_members ((GObject *) service_chan, "HELLO THAR", NULL,
NULL, add_local_pending, NULL, 0,
TP_CHANNEL_GROUP_CHANGE_REASON_INVITED);
@@ -213,7 +263,7 @@ check_incoming_invitation (void)
g_array_append_val (contacts, service_chan->conn->self_handle);
expect_signals ("", service_chan->conn->self_handle,
- TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
+ TP_CHANNEL_GROUP_CHANGE_REASON_NONE, self_added_to_members);
MYASSERT (tp_cli_channel_interface_group_run_add_members (chan, -1,
contacts, "", &error, NULL), "");
MYASSERT_NO_ERROR (error);
@@ -226,20 +276,76 @@ check_incoming_invitation (void)
}
static void
+camel_added (const GArray *added,
+ const GArray *removed,
+ const GArray *local_pending,
+ const GArray *remote_pending)
+{
+ TpHandle h;
+
+ MYASSERT (added->len == 1, ": one added");
+
+ h = g_array_index (added, TpHandle, 0);
+ MYASSERT_SAME_UINT (h, camel);
+
+ MYASSERT (removed->len == 0, ": no-one removed");
+ MYASSERT (local_pending->len == 0, ": no new local pending");
+ MYASSERT (remote_pending->len == 0, ": no new remote pending");
+}
+
+static void
+camel2_added (const GArray *added,
+ const GArray *removed,
+ const GArray *local_pending,
+ const GArray *remote_pending)
+{
+ TpHandle h;
+
+ MYASSERT (added->len == 1, ": one added");
+
+ h = g_array_index (added, TpHandle, 0);
+ MYASSERT_SAME_UINT (h, camel2);
+
+ MYASSERT (removed->len == 0, ": no-one removed");
+ MYASSERT (local_pending->len == 0, ": no new local pending");
+ MYASSERT (remote_pending->len == 0, ": no new remote pending");
+}
+
+static void
+camel_removed (const GArray *added,
+ const GArray *removed,
+ const GArray *local_pending,
+ const GArray *remote_pending)
+{
+ TpHandle h;
+
+ MYASSERT (removed->len == 1, ": one removed");
+
+ h = g_array_index (removed, TpHandle, 0);
+ MYASSERT_SAME_UINT (h, camel);
+
+ MYASSERT (added->len == 0, ": no-one added");
+ MYASSERT (local_pending->len == 0, ": no new local pending");
+ MYASSERT (remote_pending->len == 0, ": no new remote pending");
+}
+
+static void
in_the_desert (void)
{
+ TpHandle self_handle = service_chan->conn->self_handle;
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;
+
+ camel = tp_handle_ensure (contact_repo, "camel", NULL, NULL);
+ camel2 = tp_handle_ensure (contact_repo, "camel2", NULL, NULL);
/* A camel is approaching */
{
TpIntSet *add = tp_intset_new ();
tp_intset_add (add, camel);
- expect_signals ("", camel, TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
+ expect_signals ("", camel, TP_CHANNEL_GROUP_CHANGE_REASON_NONE,
+ camel_added);
tp_group_mixin_change_members ((GObject *) service_chan, "", add, NULL,
NULL, NULL, camel, TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
wait_for_outstanding_signals ();
@@ -262,7 +368,8 @@ in_the_desert (void)
g_value_set_uint (v, camel);
g_hash_table_insert (details, "actor", v);
- expect_signals ("", camel, TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
+ expect_signals ("", camel, TP_CHANNEL_GROUP_CHANGE_REASON_NONE,
+ camel2_added);
tp_group_mixin_change_members_detailed ((GObject *) service_chan, add,
NULL, NULL, NULL, details);
wait_for_outstanding_signals ();
@@ -307,7 +414,7 @@ in_the_desert (void)
/* Check that all the right information was extracted from the dict. */
expect_signals ("*ptooey*", camel2,
- TP_CHANNEL_GROUP_CHANGE_REASON_KICKED);
+ TP_CHANNEL_GROUP_CHANGE_REASON_KICKED, camel_removed);
tp_group_mixin_change_members_detailed ((GObject *) service_chan, NULL,
del, NULL, NULL, details);
wait_for_outstanding_signals ();
--
1.5.6.5
More information about the Telepathy-commits
mailing list