[Telepathy-commits] [telepathy-salut/master] Stop using the workaround for bug #17329

Alban Crequy alban.crequy at collabora.co.uk
Thu Feb 26 11:20:15 PST 2009


- Update the spec in extensions/:
There was a bug in dbus-glib that prevent to use the right type:
Instead of a{ua(a{sv}as)}, we used a(ua{sv}as) as a workaround.
See http://bugs.freedesktop.org/show_bug.cgi?id=17329
Now there is a fix, so we don't use the workaround anymore.

- Update the implementation for the new spec

- Update the unit test

This commit is similar to the following commit in telepathy-gabble:
|commit 6971f458ad0816e40807549202d8a4ffe58b72aa
|Author: Alban Crequy <alban.crequy at collabora.co.uk>
|Date:   Wed Oct 8 11:30:59 2008 +0100
---
 .../Connection_Interface_Contact_Capabilities.xml  |   76 ++++++---
 src/salut-connection.c                             |   14 +-
 src/salut-im-manager.c                             |    5 +-
 src/salut-tubes-manager.c                          |    5 +-
 tests/twisted/avahi/test-caps-tubes.py             |  176 ++++++++++----------
 5 files changed, 153 insertions(+), 123 deletions(-)

diff --git a/extensions/Connection_Interface_Contact_Capabilities.xml b/extensions/Connection_Interface_Contact_Capabilities.xml
index 55b3256..4d1d632 100644
--- a/extensions/Connection_Interface_Contact_Capabilities.xml
+++ b/extensions/Connection_Interface_Contact_Capabilities.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <node name="/Connection_Interface_Contact_Capabilities" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
-  <tp:copyright> Copyright (C) 2005, 2006 Collabora Limited </tp:copyright>
-  <tp:copyright> Copyright (C) 2005, 2006 Nokia Corporation </tp:copyright>
+  <tp:copyright> Copyright (C) 2005, 2006, 2008 Collabora Limited </tp:copyright>
+  <tp:copyright> Copyright (C) 2005, 2006, 2008 Nokia Corporation </tp:copyright>
   <tp:copyright> Copyright (C) 2006 INdT </tp:copyright>
   <tp:license xmlns="http://www.w3.org/1999/xhtml">
     <p>This library is free software; you can redistribute it and/or
@@ -22,25 +22,27 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
     <tp:requires interface="org.freedesktop.Telepathy.Connection"/>
 
     <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
-      <p>An interface for connections where it is possible to know what channel
-        classes may be created before the request is made to the connection
-        object. Each capability represents a commitment by the connection
-        manager that it will ordinarily be able to create a channel when given
-        a request with the properties defined by the channel class.</p>
+      <p>An interface to get contact capabilities in order to know what channel
+        classes may be created with a contact before the request is made to the
+        connection object. Each capability represents a commitment by the
+        connection manager that it will ordinarily be able to create a channel
+        with a contact when given a request with the properties defined by the
+        channel class.</p>
 
       <p>Capabilities pertain to particular contact handles, and represent
         activities such as having a text chat, a voice call with the user or a
         stream tube of a defined type.</p>
 
-      <p>This interface also provides for user interfaces notifying the
-        connection manager of what capabilities to advertise for the user. This
-        is done by using the SetSelfCapabilities method, and deals with
+      <p>This interface also enables user interfaces to notify the connection
+        manager what capabilities to advertise for the user to other contacts.
+        This is done by using the SetSelfCapabilities method, and deals with
         channel properties values pertaining to them which are implemented by
         available client processes.</p>
 
     </tp:docstring>
 
-    <method name="SetSelfCapabilities">
+    <method name="SetSelfCapabilities"
+            tp:name-for-bindings="Set_Self_Capabilities">
       <arg direction="in" name="caps" type="aa{sv}"
            tp:type="String_Variant_Map[]">
         <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
@@ -68,7 +70,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:possible-errors>
     </method>
 
-    <method name="GetContactCapabilities">
+    <method name="GetContactCapabilities"
+            tp:name-for-bindings="Get_Contact_Capabilities">
       <arg direction="in" name="handles" type="au" tp:type="Contact_Handle[]">
         <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
           <p>An array of contact handles for this connection.</p>
@@ -76,8 +79,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
           <p>The handle zero MUST NOT be included in the request.</p>
         </tp:docstring>
       </arg>
-      <arg direction="out" type="a(ua{sv}as)"
-           tp:type="Enhanced_Contact_Capability[]">
+      <!-- There was a bug in dbus-glib that prevent to use the right type:
+           Instead of a{ua(a{sv}as)}, we used a(ua{sv}as) as a workaround.
+           See http://bugs.freedesktop.org/show_bug.cgi?id=17329
+           Now there is a fix, so we don't use the workaround anymore.
+        -->
+      <arg direction="out" type="a{ua(a{sv}as)}"
+           tp:type="Contact_Handle_Enhanced_Contact_Capability_Map">
         <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
           An array of structures containing:
           <ul>
@@ -99,8 +107,15 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:possible-errors>
     </method>
 
-    <signal name="ContactCapabilitiesChanged">
-      <arg name="caps" type="a(ua{sv}as)" tp:type="Enhanced_Contact_Capability[]">
+    <signal name="ContactCapabilitiesChanged"
+            tp:name-for-bindings="Contact_Capabilities_Changed">
+      <arg name="handle" type="u" tp:type="Contact_Handle">
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+          <p>A contact handle.</p>
+        </tp:docstring>
+      </arg>
+      <arg name="caps" type="a(a{sv}as)"
+           tp:type="Enhanced_Contact_Capability[]">
         <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
           All the capabilities of the contact
         </tp:docstring>
@@ -111,7 +126,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </signal>
 
-    <tp:struct name="Enhanced_Contact_Capability" array-name="Enhanced_Contact_Capability_List">
+    <tp:struct name="Enhanced_Contact_Capability"
+               array-name="Enhanced_Contact_Capability_List">
       <tp:docstring>
         A struct representing a capability posessed by a contact,
         as returned by GetContactCapabilities on the ContactCapabilities
@@ -121,7 +137,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         the request contains a property which does not belong to
         Fixed_Properties nor to Allowed_Properties, the request will fail.
       </tp:docstring>
-      <tp:member type="u" tp:type="Contact_Handle" name="Handle"/>
       <tp:member type="a{sv}" tp:type="Channel_Class"
                  name="Fixed_Properties">
         <tp:docstring>
@@ -135,15 +150,22 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:member>
     </tp:struct>
 
-    <tp:struct name="Contact_Capability_Change" array-name="Contact_Capability_Change_List">
-      <tp:docstring>A struct representing a change to one of a contact's capabilities, as
-        seen in the ContactCapabilitiesChanged signal on the ContactCapabilities
-        interface.</tp:docstring>
-      <tp:member type="a(ua{sv}as)" tp:type="Enhanced_Contact_Capability[]"
-                 name="Removed_Capabilities"/>
-      <tp:member type="a(ua{sv}as)" tp:type="Enhanced_Contact_Capability[]"
-                 name="Added_Capabilities"/>
-    </tp:struct>
+  <tp:mapping name="Contact_Handle_Enhanced_Contact_Capability_Map"
+              array-name="Contact_Handle_Enhanced_Contact_Capability_Map_List">
+    <tp:docstring>A mapping from contact handle to their capabilities.
+    </tp:docstring>
+    <tp:member type="u" name="Key" tp:type="Contact_Handle">
+      <tp:docstring>
+        A contact handle.
+      </tp:docstring>
+    </tp:member>
+    <tp:member type="a(a{sv}as)" name="Value"
+               tp:type="Enhanced_Contact_Capability[]">
+      <tp:docstring>
+        The contact capabilities.
+      </tp:docstring>
+    </tp:member>
+  </tp:mapping>
 
   </interface>
 </node>
diff --git a/src/salut-connection.c b/src/salut-connection.c
index 9e2f8e6..58ecc51 100644
--- a/src/salut-connection.c
+++ b/src/salut-connection.c
@@ -1947,7 +1947,7 @@ salut_connection_get_contact_capabilities (
   TpHandleRepoIface *contact_handles = tp_base_connection_get_handles (base,
       TP_HANDLE_TYPE_CONTACT);
   guint i;
-  GPtrArray *ret;
+  GHashTable *ret;
   GError *error = NULL;
 
   TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context);
@@ -1959,19 +1959,23 @@ salut_connection_get_contact_capabilities (
       return;
     }
 
-  ret = g_ptr_array_new ();
+  ret = g_hash_table_new_full (NULL, NULL, NULL,
+      (GDestroyNotify) salut_free_enhanced_contact_capabilities);
 
   for (i = 0; i < handles->len; i++)
     {
+      GPtrArray *arr = g_ptr_array_new ();
       TpHandle handle = g_array_index (handles, TpHandle, i);
 
-      salut_connection_get_handle_contact_capabilities (self, handle, ret);
+      salut_connection_get_handle_contact_capabilities (self, handle, arr);
+
+      g_hash_table_insert (ret, GINT_TO_POINTER (handle), arr);
     }
 
   salut_svc_connection_interface_contact_capabilities_return_from_get_contact_capabilities
       (context, ret);
 
-  salut_free_enhanced_contact_capabilities (ret);
+  g_hash_table_destroy (ret);
 }
 
 
@@ -2018,7 +2022,7 @@ _emit_contact_capabilities_changed (SalutConnection *conn,
 
   salut_connection_get_handle_contact_capabilities (conn, handle, ret);
   salut_svc_connection_interface_contact_capabilities_emit_contact_capabilities_changed (
-      conn, ret);
+      conn, handle, ret);
 
   salut_free_enhanced_contact_capabilities (ret);
 }
diff --git a/src/salut-im-manager.c b/src/salut-im-manager.c
index 057c32f..f5f462b 100644
--- a/src/salut-im-manager.c
+++ b/src/salut-im-manager.c
@@ -692,9 +692,8 @@ salut_im_factory_get_contact_caps (SalutCapsChannelManager *manager,
       target_handle_type_value);
 
   dbus_g_type_struct_set (&monster,
-      0, handle,
-      1, fixed_properties,
-      2, text_allowed_properties,
+      0, fixed_properties,
+      1, text_allowed_properties,
       G_MAXUINT);
 
   g_hash_table_destroy (fixed_properties);
diff --git a/src/salut-tubes-manager.c b/src/salut-tubes-manager.c
index cf5481e..715ca8c 100644
--- a/src/salut-tubes-manager.c
+++ b/src/salut-tubes-manager.c
@@ -1121,9 +1121,8 @@ add_service_to_array (gchar *service,
         target_handle_type_value);
 
   dbus_g_type_struct_set (&monster,
-      0, handle,
-      1, fixed_properties,
-      2, tube_allowed_properties,
+      0, fixed_properties,
+      1, tube_allowed_properties,
       G_MAXUINT);
 
   g_hash_table_destroy (fixed_properties);
diff --git a/tests/twisted/avahi/test-caps-tubes.py b/tests/twisted/avahi/test-caps-tubes.py
index 5c0092a..1edac93 100644
--- a/tests/twisted/avahi/test-caps-tubes.py
+++ b/tests/twisted/avahi/test-caps-tubes.py
@@ -154,7 +154,8 @@ def receive_presence_and_ask_caps(q, stream, service):
             EventPattern('service-resolved', service=service),
             EventPattern('dbus-signal', signal='ContactCapabilitiesChanged')
         )
-    signaled_caps = event_dbus.args[0]
+    assert event_dbus.args[0] == 1
+    signaled_caps = event_dbus.args[1]
 
     hash = txt_get_key(event_avahi.txt, "hash")
     ver = txt_get_key(event_avahi.txt, "ver")
@@ -238,8 +239,8 @@ def test_tube_caps_from_contact(q, bus, conn, service,
     sync_stream(q, incoming)
 
     # no special capabilities
-    basic_caps = [(contact_handle, text_fixed_properties,
-            text_allowed_properties)]
+    basic_caps = dbus.Dictionary({contact_handle:
+            [(text_fixed_properties, text_allowed_properties)]})
     caps = conn_caps_iface.GetContactCapabilities([contact_handle])
     assert caps == basic_caps, caps
     # test again, to check GetContactCapabilities does not have side effect
@@ -249,7 +250,8 @@ def test_tube_caps_from_contact(q, bus, conn, service,
     caps_via_contacts_iface = conn_contacts_iface.GetContactAttributes(
             [contact_handle], [caps_iface], False) \
             [contact_handle][caps_iface + '/caps']
-    assert caps_via_contacts_iface == caps, caps_via_contacts_iface
+    assert caps_via_contacts_iface == caps[contact_handle], \
+            caps_via_contacts_iface
 
     # send presence with 1 stream tube cap
     txt_record['ver'] = 'njTWnNVMGeDjS8+4TkMuMX6Z/Ug='
@@ -271,16 +273,17 @@ def test_tube_caps_from_contact(q, bus, conn, service,
     incoming.send(result)
 
     event = q.expect('dbus-signal', signal='ContactCapabilitiesChanged')
-    signaled_caps = event.args[0]
+    assert event.args[0] == contact_handle
+    signaled_caps = event.args[1]
     assert len(signaled_caps) == 2, signaled_caps # basic caps + daap
-    assert signaled_caps[1][1] \
+    assert signaled_caps[1][0] \
         ['org.freedesktop.Telepathy.Channel.Type.StreamTube.DRAFT.Service'] \
         == 'daap'
 
     # daap capabilities
-    daap_caps = [
-        (contact_handle, text_fixed_properties, text_allowed_properties),
-        (contact_handle, daap_fixed_properties, daap_allowed_properties)]
+    daap_caps = dbus.Dictionary({contact_handle:
+        [(text_fixed_properties, text_allowed_properties),
+        (daap_fixed_properties, daap_allowed_properties)]})
     caps = conn_caps_iface.GetContactCapabilities([contact_handle])
     assert caps == daap_caps, caps
     # test again, to check GetContactCapabilities does not have side effect
@@ -290,7 +293,8 @@ def test_tube_caps_from_contact(q, bus, conn, service,
     caps_via_contacts_iface = conn_contacts_iface.GetContactAttributes(
             [contact_handle], [caps_iface], False) \
             [contact_handle][caps_iface + '/caps']
-    assert caps_via_contacts_iface == caps, caps_via_contacts_iface
+    assert caps_via_contacts_iface == caps[contact_handle], \
+        caps_via_contacts_iface
 
     # send presence with 1 D-Bus tube cap
     txt_record['ver'] = '8/mwj7yF0K23YT6GurBXI1X4hd4='
@@ -312,16 +316,17 @@ def test_tube_caps_from_contact(q, bus, conn, service,
     incoming.send(result)
 
     event = q.expect('dbus-signal', signal='ContactCapabilitiesChanged')
-    signaled_caps = event.args[0]
+    assert event.args[0] == contact_handle
+    signaled_caps = event.args[1]
     assert len(signaled_caps) == 2, signaled_caps # basic caps + Xiangqi
-    assert signaled_caps[1][1] \
+    assert signaled_caps[1][0] \
         ['org.freedesktop.Telepathy.Channel.Type.DBusTube.DRAFT.ServiceName'] \
         == 'com.example.Xiangqi'
 
     # xiangqi capabilities
-    xiangqi_caps = [
-        (contact_handle, text_fixed_properties, text_allowed_properties),
-        (contact_handle, xiangqi_fixed_properties, xiangqi_allowed_properties)]
+    xiangqi_caps = dbus.Dictionary({contact_handle:
+        [(text_fixed_properties, text_allowed_properties),
+        (xiangqi_fixed_properties, xiangqi_allowed_properties)]})
     caps = conn_caps_iface.GetContactCapabilities([contact_handle])
     assert caps == xiangqi_caps, caps
     # test again, to check GetContactCapabilities does not have side effect
@@ -331,7 +336,8 @@ def test_tube_caps_from_contact(q, bus, conn, service,
     caps_via_contacts_iface = conn_contacts_iface.GetContactAttributes(
             [contact_handle], [caps_iface], False) \
             [contact_handle][caps_iface + '/caps']
-    assert caps_via_contacts_iface == caps, caps_via_contacts_iface
+    assert caps_via_contacts_iface == caps[contact_handle], \
+        caps_via_contacts_iface
 
     # send presence with both D-Bus and stream tube caps
     txt_record['ver'] = 'moS31cvk2kf9Zka4gb6ncj2VJCo='
@@ -355,20 +361,21 @@ def test_tube_caps_from_contact(q, bus, conn, service,
     incoming.send(result)
 
     event = q.expect('dbus-signal', signal='ContactCapabilitiesChanged')
-    signaled_caps = event.args[0]
+    assert event.args[0] == contact_handle
+    signaled_caps = event.args[1]
     assert len(signaled_caps) == 3, signaled_caps # basic caps + daap+xiangqi
-    assert signaled_caps[1][1] \
+    assert signaled_caps[1][0] \
         ['org.freedesktop.Telepathy.Channel.Type.StreamTube.DRAFT.Service'] \
         == 'daap'
-    assert signaled_caps[2][1] \
+    assert signaled_caps[2][0] \
         ['org.freedesktop.Telepathy.Channel.Type.DBusTube.DRAFT.ServiceName'] \
         == 'com.example.Xiangqi'
 
     # daap + xiangqi capabilities
-    daap_xiangqi_caps = [
-        (contact_handle, text_fixed_properties, text_allowed_properties),
-        (contact_handle, daap_fixed_properties, daap_allowed_properties),
-        (contact_handle, xiangqi_fixed_properties, xiangqi_allowed_properties)]
+    daap_xiangqi_caps = dbus.Dictionary({contact_handle:
+        [(text_fixed_properties, text_allowed_properties),
+        (daap_fixed_properties, daap_allowed_properties),
+        (xiangqi_fixed_properties, xiangqi_allowed_properties)]})
     caps = conn_caps_iface.GetContactCapabilities([contact_handle])
     assert caps == daap_xiangqi_caps, caps
     # test again, to check GetContactCapabilities does not have side effect
@@ -378,7 +385,8 @@ def test_tube_caps_from_contact(q, bus, conn, service,
     caps_via_contacts_iface = conn_contacts_iface.GetContactAttributes(
             [contact_handle], [caps_iface], False) \
             [contact_handle][caps_iface + '/caps']
-    assert caps_via_contacts_iface == caps, caps_via_contacts_iface
+    assert caps_via_contacts_iface == caps[contact_handle], \
+        caps_via_contacts_iface
 
     # send presence with 4 tube caps
     txt_record['ver'] = '4uwiaJY110AjLEFSIeu4/mVJ8wc='
@@ -406,29 +414,30 @@ def test_tube_caps_from_contact(q, bus, conn, service,
     incoming.send(result)
 
     event = q.expect('dbus-signal', signal='ContactCapabilitiesChanged')
-    signaled_caps = event.args[0]
+    assert event.args[0] == contact_handle
+    signaled_caps = event.args[1]
     assert len(signaled_caps) == 5, signaled_caps # basic caps + 4 tubes
-    assert signaled_caps[1][1] \
+    assert signaled_caps[1][0] \
         ['org.freedesktop.Telepathy.Channel.Type.StreamTube.DRAFT.Service'] \
         == 'daap'
-    assert signaled_caps[2][1] \
+    assert signaled_caps[2][0] \
         ['org.freedesktop.Telepathy.Channel.Type.StreamTube.DRAFT.Service'] \
         == 'http'
-    assert signaled_caps[3][1] \
+    assert signaled_caps[3][0] \
         ['org.freedesktop.Telepathy.Channel.Type.DBusTube.DRAFT.ServiceName'] \
         == 'com.example.Xiangqi'
-    assert signaled_caps[4][1] \
+    assert signaled_caps[4][0] \
         ['org.freedesktop.Telepathy.Channel.Type.DBusTube.DRAFT.ServiceName'] \
         == 'com.example.Go'
 
     # http + daap + xiangqi + go capabilities
-    all_tubes_caps = [
-        (contact_handle, text_fixed_properties, text_allowed_properties),
-        (contact_handle, daap_fixed_properties, daap_allowed_properties),
-        (contact_handle, http_fixed_properties, http_allowed_properties),
-        (contact_handle, xiangqi_fixed_properties,
+    all_tubes_caps = dbus.Dictionary({contact_handle:
+        [(text_fixed_properties, text_allowed_properties),
+        (daap_fixed_properties, daap_allowed_properties),
+        (http_fixed_properties, http_allowed_properties),
+        (xiangqi_fixed_properties,
                 xiangqi_allowed_properties),
-        (contact_handle, go_fixed_properties, go_allowed_properties)]
+        (go_fixed_properties, go_allowed_properties)]})
     caps = conn_caps_iface.GetContactCapabilities([contact_handle])
     assert caps == all_tubes_caps, caps
     # test again, to check GetContactCapabilities does not have side effect
@@ -438,7 +447,8 @@ def test_tube_caps_from_contact(q, bus, conn, service,
     caps_via_contacts_iface = conn_contacts_iface.GetContactAttributes(
             [contact_handle], [caps_iface], False) \
             [contact_handle][caps_iface + '/caps']
-    assert caps_via_contacts_iface == caps, caps_via_contacts_iface
+    assert caps_via_contacts_iface == caps[contact_handle], \
+        caps_via_contacts_iface
 
     # send presence with both D-Bus and stream tube caps
     txt_record['ver'] = 'moS31cvk2kf9Zka4gb6ncj2VJCo='
@@ -447,20 +457,21 @@ def test_tube_caps_from_contact(q, bus, conn, service,
     # Salut does not look up our capabilities because of the cache
 
     event = q.expect('dbus-signal', signal='ContactCapabilitiesChanged')
-    signaled_caps = event.args[0]
+    assert event.args[0] == contact_handle
+    signaled_caps = event.args[1]
     assert len(signaled_caps) == 3, signaled_caps # basic caps + daap+xiangqi
-    assert signaled_caps[1][1] \
+    assert signaled_caps[1][0] \
         ['org.freedesktop.Telepathy.Channel.Type.StreamTube.DRAFT.Service'] \
         == 'daap'
-    assert signaled_caps[2][1] \
+    assert signaled_caps[2][0] \
         ['org.freedesktop.Telepathy.Channel.Type.DBusTube.DRAFT.ServiceName'] \
         == 'com.example.Xiangqi'
 
     # daap + xiangqi capabilities
-    daap_xiangqi_caps = [
-        (contact_handle, text_fixed_properties, text_allowed_properties),
-        (contact_handle, daap_fixed_properties, daap_allowed_properties),
-        (contact_handle, xiangqi_fixed_properties, xiangqi_allowed_properties)]
+    daap_xiangqi_caps = dbus.Dictionary({contact_handle:
+        [(text_fixed_properties, text_allowed_properties),
+        (daap_fixed_properties, daap_allowed_properties),
+        (xiangqi_fixed_properties, xiangqi_allowed_properties)]})
     caps = conn_caps_iface.GetContactCapabilities([contact_handle])
     assert caps == daap_xiangqi_caps, caps
     # test again, to check GetContactCapabilities does not have side effect
@@ -470,27 +481,28 @@ def test_tube_caps_from_contact(q, bus, conn, service,
     caps_via_contacts_iface = conn_contacts_iface.GetContactAttributes(
             [contact_handle], [caps_iface], False) \
             [contact_handle][caps_iface + '/caps']
-    assert caps_via_contacts_iface == caps, caps_via_contacts_iface
+    assert caps_via_contacts_iface == caps[contact_handle], \
+        caps_via_contacts_iface
 
 def test_tube_caps_to_contact(q, bus, conn, service):
-    basic_caps = [(1, text_fixed_properties,
-            text_allowed_properties)]
-    daap_caps = [
-        (1, text_fixed_properties, text_allowed_properties),
-        (1, daap_fixed_properties, daap_allowed_properties)]
-    xiangqi_caps = [
-        (1, text_fixed_properties, text_allowed_properties),
-        (1, xiangqi_fixed_properties, xiangqi_allowed_properties)]
-    daap_xiangqi_caps = [
-        (1, text_fixed_properties, text_allowed_properties),
-        (1, daap_fixed_properties, daap_allowed_properties),
-        (1, xiangqi_fixed_properties, xiangqi_allowed_properties)]
-    all_tubes_caps = [
-        (1, text_fixed_properties, text_allowed_properties),
-        (1, daap_fixed_properties, daap_allowed_properties),
-        (1, http_fixed_properties, http_allowed_properties),
-        (1, xiangqi_fixed_properties, xiangqi_allowed_properties),
-        (1, go_fixed_properties, go_allowed_properties)]
+    basic_caps = dbus.Dictionary({1:
+        [(text_fixed_properties, text_allowed_properties)]})
+    daap_caps = dbus.Dictionary({1:
+        [(text_fixed_properties, text_allowed_properties),
+        (daap_fixed_properties, daap_allowed_properties)]})
+    xiangqi_caps = dbus.Dictionary({1:
+        [(text_fixed_properties, text_allowed_properties),
+        (xiangqi_fixed_properties, xiangqi_allowed_properties)]})
+    daap_xiangqi_caps = dbus.Dictionary({1:
+        [(text_fixed_properties, text_allowed_properties),
+        (daap_fixed_properties, daap_allowed_properties),
+        (xiangqi_fixed_properties, xiangqi_allowed_properties)]})
+    all_tubes_caps = dbus.Dictionary({1:
+        [(text_fixed_properties, text_allowed_properties),
+        (daap_fixed_properties, daap_allowed_properties),
+        (http_fixed_properties, http_allowed_properties),
+        (xiangqi_fixed_properties, xiangqi_allowed_properties),
+        (go_fixed_properties, go_allowed_properties)]})
 
     # send presence with no cap info
     txt_record = { "txtvers": "1", "status": "avail"}
@@ -529,20 +541,19 @@ def test_tube_caps_to_contact(q, bus, conn, service):
     caps_via_contacts_iface = conn_contacts_iface.GetContactAttributes(
             [1], [caps_iface], False) \
             [1][caps_iface + '/caps']
-    assert caps_via_contacts_iface == caps, caps_via_contacts_iface
+    assert caps_via_contacts_iface == caps[1], caps_via_contacts_iface
 
     # Advertise nothing
     conn_caps_iface.SetSelfCapabilities([])
 
     # Check our own caps
     caps = conn_caps_iface.GetContactCapabilities([1])
-    assert len(caps) == 1
     assert caps == basic_caps, caps
     # check the Contacts interface give the same caps
     caps_via_contacts_iface = conn_contacts_iface.GetContactAttributes(
             [1], [caps_iface], False) \
             [1][caps_iface + '/caps']
-    assert caps_via_contacts_iface == caps, caps_via_contacts_iface
+    assert caps_via_contacts_iface == caps[1], caps_via_contacts_iface
 
     sync_stream(q, outbound)
 
@@ -561,19 +572,18 @@ def test_tube_caps_to_contact(q, bus, conn, service):
     assert caps_contain(event, ns_tubes + '/dbus/com.example.Xiangqi') \
             == False, caps_str
     assert len(signaled_caps) == 2, signaled_caps # basic caps + daap
-    assert signaled_caps[1][1] \
+    assert signaled_caps[1][0] \
         ['org.freedesktop.Telepathy.Channel.Type.StreamTube.DRAFT.Service'] \
         == 'daap'
 
     # Check our own caps
     caps = conn_caps_iface.GetContactCapabilities([1])
-    assert len(caps) == 2
     assert caps == daap_caps, caps
     # check the Contacts interface give the same caps
     caps_via_contacts_iface = conn_contacts_iface.GetContactAttributes(
             [1], [caps_iface], False) \
             [1][caps_iface + '/caps']
-    assert caps_via_contacts_iface == caps, caps_via_contacts_iface
+    assert caps_via_contacts_iface == caps[1], caps_via_contacts_iface
 
     # Advertise xiangqi
     ret_caps = conn_caps_iface.SetSelfCapabilities(
@@ -590,19 +600,18 @@ def test_tube_caps_to_contact(q, bus, conn, service):
     assert caps_contain(event, ns_tubes + '/dbus/com.example.Xiangqi') \
             == True, caps_str
     assert len(signaled_caps) == 2, signaled_caps # basic caps + daap
-    assert signaled_caps[1][1] \
+    assert signaled_caps[1][0] \
         ['org.freedesktop.Telepathy.Channel.Type.DBusTube.DRAFT.ServiceName'] \
         == 'com.example.Xiangqi'
 
     # Check our own caps
     caps = conn_caps_iface.GetContactCapabilities([1])
-    assert len(caps) == 2
     assert caps == xiangqi_caps, caps
     # check the Contacts interface give the same caps
     caps_via_contacts_iface = conn_contacts_iface.GetContactAttributes(
             [1], [caps_iface], False) \
             [1][caps_iface + '/caps']
-    assert caps_via_contacts_iface == caps, caps_via_contacts_iface
+    assert caps_via_contacts_iface == caps[1], caps_via_contacts_iface
 
     # Advertise daap + xiangqi
     ret_caps = conn_caps_iface.SetSelfCapabilities(
@@ -619,22 +628,21 @@ def test_tube_caps_to_contact(q, bus, conn, service):
     assert caps_contain(event, ns_tubes + '/dbus/com.example.Xiangqi') \
             == True, caps_str
     assert len(signaled_caps) == 3, signaled_caps # basic caps + daap+xiangqi
-    assert signaled_caps[1][1] \
+    assert signaled_caps[1][0] \
         ['org.freedesktop.Telepathy.Channel.Type.StreamTube.DRAFT.Service'] \
         == 'daap'
-    assert signaled_caps[2][1] \
+    assert signaled_caps[2][0] \
         ['org.freedesktop.Telepathy.Channel.Type.DBusTube.DRAFT.ServiceName'] \
         == 'com.example.Xiangqi'
 
     # Check our own caps
     caps = conn_caps_iface.GetContactCapabilities([1])
-    assert len(caps) == 3
     assert caps == daap_xiangqi_caps, caps
     # check the Contacts interface give the same caps
     caps_via_contacts_iface = conn_contacts_iface.GetContactAttributes(
             [1], [caps_iface], False) \
             [1][caps_iface + '/caps']
-    assert caps_via_contacts_iface == caps, caps_via_contacts_iface
+    assert caps_via_contacts_iface == caps[1], caps_via_contacts_iface
 
     # Advertise 4 tubes
     ret_caps = conn_caps_iface.SetSelfCapabilities(
@@ -652,28 +660,27 @@ def test_tube_caps_to_contact(q, bus, conn, service):
     assert caps_contain(event, ns_tubes + '/dbus/com.example.Xiangqi') \
             == True, caps_str
     assert len(signaled_caps) == 5, signaled_caps # basic caps + 4 tubes
-    assert signaled_caps[1][1] \
+    assert signaled_caps[1][0] \
         ['org.freedesktop.Telepathy.Channel.Type.StreamTube.DRAFT.Service'] \
         == 'daap'
-    assert signaled_caps[2][1] \
+    assert signaled_caps[2][0] \
         ['org.freedesktop.Telepathy.Channel.Type.StreamTube.DRAFT.Service'] \
         == 'http'
-    assert signaled_caps[3][1] \
+    assert signaled_caps[3][0] \
         ['org.freedesktop.Telepathy.Channel.Type.DBusTube.DRAFT.ServiceName'] \
         == 'com.example.Xiangqi'
-    assert signaled_caps[4][1] \
+    assert signaled_caps[4][0] \
         ['org.freedesktop.Telepathy.Channel.Type.DBusTube.DRAFT.ServiceName'] \
         == 'com.example.Go'
 
     # Check our own caps
     caps = conn_caps_iface.GetContactCapabilities([1])
-    assert len(caps) == 5
     assert caps == all_tubes_caps, caps
     # check the Contacts interface give the same caps
     caps_via_contacts_iface = conn_contacts_iface.GetContactAttributes(
             [1], [caps_iface], False) \
             [1][caps_iface + '/caps']
-    assert caps_via_contacts_iface == caps, caps_via_contacts_iface
+    assert caps_via_contacts_iface == caps[1], caps_via_contacts_iface
 
     # Advertise daap + xiangqi
     ret_caps = conn_caps_iface.SetSelfCapabilities(
@@ -690,22 +697,21 @@ service)
     assert caps_contain(event, ns_tubes + '/dbus/com.example.Xiangqi') \
             == True, caps_str
     assert len(signaled_caps) == 3, signaled_caps # basic caps + daap+xiangqi
-    assert signaled_caps[1][1] \
+    assert signaled_caps[1][0] \
         ['org.freedesktop.Telepathy.Channel.Type.StreamTube.DRAFT.Service'] \
         == 'daap'
-    assert signaled_caps[2][1] \
+    assert signaled_caps[2][0] \
         ['org.freedesktop.Telepathy.Channel.Type.DBusTube.DRAFT.ServiceName'] \
         == 'com.example.Xiangqi'
 
     # Check our own caps
     caps = conn_caps_iface.GetContactCapabilities([1])
-    assert len(caps) == 3
     assert caps == daap_xiangqi_caps, caps
     # check the Contacts interface give the same caps
     caps_via_contacts_iface = conn_contacts_iface.GetContactAttributes(
             [1], [caps_iface], False) \
             [1][caps_iface + '/caps']
-    assert caps_via_contacts_iface == caps, caps_via_contacts_iface
+    assert caps_via_contacts_iface == caps[1], caps_via_contacts_iface
 
 
 def test(q, bus, conn):
-- 
1.5.6.5




More information about the telepathy-commits mailing list