[telepathy-gabble/telepathy-gabble-0.8] Reduce duplicated code in caps-cache.py

Will Thompson will.thompson at collabora.co.uk
Thu Sep 10 07:18:16 PDT 2009


_test_with_hash and _test_without_hash were pretty much exactly the same
function, with minor tweaks. Plus, lots of arguments were passed around
for no particularly good reason, since they were essentially constants.
---
 tests/twisted/caps/caps-cache.py |  142 +++++++++++++-------------------------
 1 files changed, 47 insertions(+), 95 deletions(-)

diff --git a/tests/twisted/caps/caps-cache.py b/tests/twisted/caps/caps-cache.py
index b7393af..edbb4de 100644
--- a/tests/twisted/caps/caps-cache.py
+++ b/tests/twisted/caps/caps-cache.py
@@ -6,137 +6,89 @@ confirmation without hash.
 
 from twisted.words.xish import xpath
 
-from servicetest import EventPattern
-from gabbletest import exec_test, make_result_iq, make_presence
+from servicetest import EventPattern, assertEquals, assertContains
+from gabbletest import exec_test, make_presence
 import constants as cs
+import ns
 from caps_helper import (
     compute_caps_hash, make_caps_disco_reply, fake_client_dataforms,
     )
 
-def _test_without_hash(q, bus, conn, stream, contact, client, disco):
-    contact_handle = conn.RequestHandles(cs.HT_CONTACT, [contact])[0]
-    presence = make_presence(contact, status='hello')
-    stream.send(presence)
+client = 'http://telepathy.freedesktop.org/fake-client'
+features = [
+    'http://jabber.org/protocol/jingle',
+    'http://jabber.org/protocol/jingle/description/audio',
+    'http://www.google.com/transport/p2p',
+    ]
 
-    q.expect_many(
-        EventPattern('dbus-signal', signal='PresenceUpdate',
-            args=[{contact_handle:
-               (0L, {u'available': {'message': 'hello'}})}]),
-        EventPattern('dbus-signal', signal='PresencesChanged',
-            args=[{contact_handle:
-               (2, u'available', 'hello')}]))
+def presence_and_disco(q, conn, stream, contact, disco,
+                       caps, dataforms={}):
+    h = conn.RequestHandles(cs.HT_CONTACT, [contact])[0]
 
-
-    # no special capabilities
-    basic_caps = [(contact_handle, cs.CHANNEL_TYPE_TEXT, 3, 0)]
-    assert conn.Capabilities.GetCapabilities([contact_handle]) == basic_caps
-
-    # send updated presence with Jingle caps info
-    presence = make_presence(contact, status='hello',
-        caps={ 'node': client,
-               'ver':  '0.1',
-             })
-    stream.send(presence)
-
-    if disco:
-        # Gabble looks up our capabilities
-        event = q.expect('stream-iq', to=contact,
-            query_ns='http://jabber.org/protocol/disco#info')
-        query_node = xpath.queryForNodes('/iq/query', event.stanza)[0]
-        assert query_node.attributes['node'] == \
-            client + '#' + '0.1'
-
-        # send good reply
-        result = make_caps_disco_reply(stream, event.stanza,
-            ['http://jabber.org/protocol/jingle',
-             'http://jabber.org/protocol/jingle/description/audio',
-             'http://www.google.com/transport/p2p',
-            ])
-        stream.send(result)
-
-    # we can now do audio calls
-    event = q.expect('dbus-signal', signal='CapabilitiesChanged')
-
-def _test_with_hash(q, bus, conn, stream, contact, client, disco):
-    contact_handle = conn.RequestHandles(cs.HT_CONTACT, [contact])[0]
-    presence = make_presence(contact, status='hello')
-    stream.send(presence)
+    stream.send(make_presence(contact, status='hello'))
 
     q.expect_many(
         EventPattern('dbus-signal', signal='PresenceUpdate',
-            args=[{contact_handle:
+            args=[{h:
                (0L, {u'available': {'message': 'hello'}})}]),
         EventPattern('dbus-signal', signal='PresencesChanged',
-            args=[{contact_handle:
+            args=[{h:
                (2, u'available', 'hello')}]))
 
     # no special capabilities
-    basic_caps = [(contact_handle, cs.CHANNEL_TYPE_TEXT, 3, 0)]
-    assert conn.Capabilities.GetCapabilities([contact_handle]) == basic_caps
-
-    features = [
-        'http://jabber.org/protocol/jingle',
-        'http://jabber.org/protocol/jingle/description/audio',
-        'http://www.google.com/transport/p2p',
-        ]
+    assertEquals([(h, cs.CHANNEL_TYPE_TEXT, 3, 0)],
+        conn.Capabilities.GetCapabilities([h]))
 
     # send updated presence with Jingle caps info
-    ver = compute_caps_hash([], features, fake_client_dataforms)
-    caps = {
-        'node': client,
-        'ver':  ver,
-        'hash': 'sha-1',
-        }
-    presence = make_presence(contact, status='hello', caps=caps)
-    stream.send(presence)
+    stream.send(make_presence(contact, status='hello', caps=caps))
 
     if disco:
         # Gabble looks up our capabilities
-        event = q.expect('stream-iq', to=contact,
-            query_ns='http://jabber.org/protocol/disco#info')
-        query_node = xpath.queryForNodes('/iq/query', event.stanza)[0]
-        assert query_node.attributes['node'] == \
-            client + '#' + ver
+        event = q.expect('stream-iq', to=contact, query_ns=ns.DISCO_INFO)
+        assertEquals(client + '#' + caps['ver'], event.query['node'])
 
         # send good reply
         result = make_caps_disco_reply(stream, event.stanza, features,
-            fake_client_dataforms)
+            dataforms)
         stream.send(result)
 
     # we can now do audio calls
     event = q.expect('dbus-signal', signal='CapabilitiesChanged')
-    assert conn.Capabilities.GetCapabilities([contact_handle]) != basic_caps
+    assertContains((h, cs.CHANNEL_TYPE_STREAMED_MEDIA, 3, cs.MEDIA_CAP_AUDIO),
+        conn.Capabilities.GetCapabilities([h]))
 
 def test(q, bus, conn, stream):
     conn.Connect()
     q.expect('dbus-signal', signal='StatusChanged',
             args=[cs.CONN_STATUS_CONNECTED, cs.CSR_REQUESTED])
 
-    client = 'http://telepathy.freedesktop.org/fake-client'
-
-    _test_without_hash(q, bus, conn, stream, 'bob1 at foo.com/Foo', client,
-        True)
-    _test_without_hash(q, bus, conn, stream, 'bob2 at foo.com/Foo', client,
-        True)
-    _test_without_hash(q, bus, conn, stream, 'bob3 at foo.com/Foo', client,
-        True)
-    _test_without_hash(q, bus, conn, stream, 'bob4 at foo.com/Foo', client,
-        True)
-    _test_without_hash(q, bus, conn, stream, 'bob5 at foo.com/Foo', client,
-        True)
+    caps = {
+        'node': client,
+        'ver':  '0.1',
+        }
+
+    presence_and_disco(q, conn, stream, 'bob1 at foo.com/Foo', True, caps)
+    presence_and_disco(q, conn, stream, 'bob2 at foo.com/Foo', True, caps)
+    presence_and_disco(q, conn, stream, 'bob3 at foo.com/Foo', True, caps)
+    presence_and_disco(q, conn, stream, 'bob4 at foo.com/Foo', True, caps)
+    presence_and_disco(q, conn, stream, 'bob5 at foo.com/Foo', True, caps)
     # we have 5 different contacts that confirm
-    _test_without_hash(q, bus, conn, stream, 'bob6 at foo.com/Foo', client,
-        False)
-    _test_without_hash(q, bus, conn, stream, 'bob7 at foo.com/Foo', client,
-        False)
+    presence_and_disco(q, conn, stream, 'bob6 at foo.com/Foo', False, caps)
+    presence_and_disco(q, conn, stream, 'bob7 at foo.com/Foo', False, caps)
+
+    caps = {
+        'node': client,
+        'ver':  compute_caps_hash([], features, fake_client_dataforms),
+        'hash': 'sha-1',
+        }
 
-    _test_with_hash(q, bus, conn, stream, 'bilbo1 at foo.com/Foo', client,
-        True)
+    presence_and_disco(q, conn, stream, 'bilbo1 at foo.com/Foo', True, caps,
+        fake_client_dataforms)
     # 1 contact is enough with hash
-    _test_with_hash(q, bus, conn, stream, 'bilbo2 at foo.com/Foo', client,
-        False)
-    _test_with_hash(q, bus, conn, stream, 'bilbo3 at foo.com/Foo', client,
-        False)
+    presence_and_disco(q, conn, stream, 'bilbo2 at foo.com/Foo', False, caps,
+        fake_client_dataforms)
+    presence_and_disco(q, conn, stream, 'bilbo3 at foo.com/Foo', False, caps,
+        fake_client_dataforms)
 
 if __name__ == '__main__':
     exec_test(test)
-- 
1.5.6.5




More information about the telepathy-commits mailing list