summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLance Stout <lancestout@gmail.com>2011-05-20 21:41:44 -0400
committerLance Stout <lancestout@gmail.com>2011-05-20 21:41:44 -0400
commit9851a2a057aeee54300f703a39507713e7ad199a (patch)
tree76056226ae21cef996b24da69534abfa08249d29
parenta269be485f2918b332c9fa3717541fc0c6c954c2 (diff)
parent7152d93dd05346fdb7dbe1893bff6395f83a79a9 (diff)
downloadslixmpp-9851a2a057aeee54300f703a39507713e7ad199a.tar.gz
slixmpp-9851a2a057aeee54300f703a39507713e7ad199a.tar.bz2
slixmpp-9851a2a057aeee54300f703a39507713e7ad199a.tar.xz
slixmpp-9851a2a057aeee54300f703a39507713e7ad199a.zip
Merge branch 'develop' into stream_features
-rw-r--r--sleekxmpp/test/sleektest.py7
-rw-r--r--sleekxmpp/xmlstream/jid.py11
-rw-r--r--tests/test_stream_handlers.py3
-rw-r--r--tests/test_stream_roster.py51
4 files changed, 66 insertions, 6 deletions
diff --git a/sleekxmpp/test/sleektest.py b/sleekxmpp/test/sleektest.py
index fd47a87e..24af1e7a 100644
--- a/sleekxmpp/test/sleektest.py
+++ b/sleekxmpp/test/sleektest.py
@@ -16,7 +16,8 @@ import sleekxmpp
from sleekxmpp import ClientXMPP, ComponentXMPP
from sleekxmpp.stanza import Message, Iq, Presence
from sleekxmpp.test import TestSocket, TestLiveSocket
-from sleekxmpp.xmlstream import StanzaBase, ET, register_stanza_plugin
+from sleekxmpp.xmlstream import ET, register_stanza_plugin
+from sleekxmpp.xmlstream import ElementBase, StanzaBase
from sleekxmpp.xmlstream.tostring import tostring
from sleekxmpp.xmlstream.matcher import StanzaPath, MatcherId
from sleekxmpp.xmlstream.matcher import MatchXMLMask, MatchXPath
@@ -201,7 +202,7 @@ class SleekTest(unittest.TestCase):
"Stanza:\n%s" % str(stanza))
else:
stanza_class = stanza.__class__
- if isinstance(criteria, str):
+ if not isinstance(criteria, ElementBase):
xml = self.parse_xml(criteria)
else:
xml = criteria.xml
@@ -606,7 +607,7 @@ class SleekTest(unittest.TestCase):
self.fail("Stanza data was sent: %s" % sent)
if sent is None:
self.fail("No stanza was sent.")
-
+
xml = self.parse_xml(sent)
self.fix_namespaces(xml, 'jabber:client')
sent = self.xmpp._build_stanza(xml, 'jabber:client')
diff --git a/sleekxmpp/xmlstream/jid.py b/sleekxmpp/xmlstream/jid.py
index 5019a25e..36b33056 100644
--- a/sleekxmpp/xmlstream/jid.py
+++ b/sleekxmpp/xmlstream/jid.py
@@ -6,6 +6,8 @@
See the file LICENSE for copying permission.
"""
+from __future__ import unicode_literals
+
class JID(object):
"""
@@ -42,7 +44,9 @@ class JID(object):
Arguments:
jid - The new JID value.
"""
- self._full = self._jid = str(jid)
+ if isinstance(jid, JID):
+ jid = jid.full
+ self._full = self._jid = jid
self._domain = None
self._resource = None
self._user = None
@@ -123,10 +127,11 @@ class JID(object):
return self.full
def __repr__(self):
- return str(self)
+ return self.full
def __eq__(self, other):
"""
Two JIDs are considered equal if they have the same full JID value.
"""
- return str(other) == str(self)
+ other = JID(other)
+ return self.full == other.full
diff --git a/tests/test_stream_handlers.py b/tests/test_stream_handlers.py
index a475b36c..dae4456d 100644
--- a/tests/test_stream_handlers.py
+++ b/tests/test_stream_handlers.py
@@ -104,6 +104,9 @@ class TestHandlers(SleekTest):
iq['query'] = 'test2'
self.send(iq)
+ # Give the event queue time to process.
+ time.sleep(0.1)
+
# Check that the waiter is no longer registered
waiter_exists = self.xmpp.removeHandler('IqWait_test2')
diff --git a/tests/test_stream_roster.py b/tests/test_stream_roster.py
index 731d1145..15b8683a 100644
--- a/tests/test_stream_roster.py
+++ b/tests/test_stream_roster.py
@@ -1,3 +1,7 @@
+# -*- encoding:utf-8 -*-
+
+from __future__ import unicode_literals
+
from sleekxmpp.test import *
import time
import threading
@@ -162,6 +166,53 @@ class TestStreamRoster(SleekTest):
self.failUnless(events == ['roster_callback'],
"Roster timeout event not triggered: %s." % events)
+ def testRosterUnicode(self):
+ """Test that JIDs with Unicode values are handled properly."""
+ self.stream_start()
+ self.recv("""
+ <iq to="tester@localhost" type="set" id="1">
+ <query xmlns="jabber:iq:roster">
+ <item jid="andré@foo" subscription="both">
+ <group>Unicode</group>
+ </item>
+ </query>
+ </iq>
+ """)
+
+ # Give the event queue time to process.
+ time.sleep(.1)
+
+ roster = {'andré@foo': {
+ 'name': '',
+ 'subscription': 'both',
+ 'groups': ['Unicode'],
+ 'presence': {},
+ 'in_roster': True}}
+ self.failUnless(self.xmpp.roster == roster,
+ "Unexpected roster values: %s" % self.xmpp.roster)
+
+ self.recv("""
+ <presence to="tester@localhost" from="andré@foo/bar">
+ <show>away</show>
+ <status>Testing</status>
+ </presence>
+ """)
+
+ # Give the event queue time to process.
+ time.sleep(.1)
+
+ roster = {'andré@foo': {
+ 'name': '',
+ 'subscription': 'both',
+ 'groups': ['Unicode'],
+ 'presence': {
+ 'bar':{'priority':0,
+ 'status':'Testing',
+ 'show':'away'}},
+ 'in_roster': True}}
+ self.failUnless(self.xmpp.roster == roster,
+ "Unexpected roster values: %s" % self.xmpp.roster)
+
suite = unittest.TestLoader().loadTestsFromTestCase(TestStreamRoster)