Fixed resource bug in JIDs.
JIDs without resources will return '' instead of the bare JID. Cleaned up JID tests, and added check_JID to SleekTest.
This commit is contained in:
parent
2f3ff37a24
commit
9e3d506651
3 changed files with 75 additions and 14 deletions
|
@ -103,6 +103,41 @@ class SleekTest(unittest.TestCase):
|
||||||
"""
|
"""
|
||||||
return Presence(None, *args, **kwargs)
|
return Presence(None, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def check_JID(self, jid, user=None, domain=None, resource=None,
|
||||||
|
bare=None, full=None, string=None):
|
||||||
|
"""
|
||||||
|
Verify the components of a JID.
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
jid -- The JID object to test.
|
||||||
|
user -- Optional. The user name portion of the JID.
|
||||||
|
domain -- Optional. The domain name portion of the JID.
|
||||||
|
resource -- Optional. The resource portion of the JID.
|
||||||
|
bare -- Optional. The bare JID.
|
||||||
|
full -- Optional. The full JID.
|
||||||
|
string -- Optional. The string version of the JID.
|
||||||
|
"""
|
||||||
|
if user is not None:
|
||||||
|
self.assertEqual(jid.user, user,
|
||||||
|
"User does not match: %s" % jid.user)
|
||||||
|
if domain is not None:
|
||||||
|
self.assertEqual(jid.domain, domain,
|
||||||
|
"Domain does not match: %s" % jid.domain)
|
||||||
|
if resource is not None:
|
||||||
|
self.assertEqual(jid.resource, resource,
|
||||||
|
"Resource does not match: %s" % jid.resource)
|
||||||
|
if bare is not None:
|
||||||
|
self.assertEqual(jid.bare, bare,
|
||||||
|
"Bare JID does not match: %s" % jid.bare)
|
||||||
|
if full is not None:
|
||||||
|
self.assertEqual(jid.full, full,
|
||||||
|
"Full JID does not match: %s" % jid.full)
|
||||||
|
if string is not None:
|
||||||
|
self.assertEqual(str(jid), string,
|
||||||
|
"String does not match: %s" % str(jid))
|
||||||
|
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
# Methods for comparing stanza objects to XML strings
|
# Methods for comparing stanza objects to XML strings
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,7 @@ class JID(object):
|
||||||
full, or bare.
|
full, or bare.
|
||||||
"""
|
"""
|
||||||
if name == 'resource':
|
if name == 'resource':
|
||||||
if self._resource is None:
|
if self._resource is None and '/' in self._jid:
|
||||||
self._resource = self._jid.split('/', 1)[-1]
|
self._resource = self._jid.split('/', 1)[-1]
|
||||||
return self._resource or ""
|
return self._resource or ""
|
||||||
elif name == 'user':
|
elif name == 'user':
|
||||||
|
|
|
@ -3,26 +3,52 @@ from sleekxmpp.xmlstream.jid import JID
|
||||||
|
|
||||||
|
|
||||||
class TestJIDClass(SleekTest):
|
class TestJIDClass(SleekTest):
|
||||||
|
|
||||||
|
"""Verify that the JID class can parse and manipulate JIDs."""
|
||||||
|
|
||||||
def testJIDfromfull(self):
|
def testJIDfromfull(self):
|
||||||
j = JID('user@someserver/some/resource')
|
"""Test using JID of the form 'user@server/resource/with/slashes'."""
|
||||||
self.assertEqual(j.user, 'user', "User does not match")
|
self.check_JID(JID('user@someserver/some/resource'),
|
||||||
self.assertEqual(j.domain, 'someserver', "Domain does not match")
|
'user',
|
||||||
self.assertEqual(j.resource, 'some/resource', "Resource does not match")
|
'someserver',
|
||||||
self.assertEqual(j.bare, 'user@someserver', "Bare does not match")
|
'some/resource',
|
||||||
self.assertEqual(j.full, 'user@someserver/some/resource', "Full does not match")
|
'user@someserver',
|
||||||
self.assertEqual(str(j), 'user@someserver/some/resource', "String does not match")
|
'user@someserver/some/resource',
|
||||||
|
'user@someserver/some/resource')
|
||||||
|
|
||||||
def testJIDchange(self):
|
def testJIDchange(self):
|
||||||
|
"""Test changing JID of the form 'user@server/resource/with/slashes'"""
|
||||||
j = JID('user1@someserver1/some1/resource1')
|
j = JID('user1@someserver1/some1/resource1')
|
||||||
j.user = 'user'
|
j.user = 'user'
|
||||||
j.domain = 'someserver'
|
j.domain = 'someserver'
|
||||||
j.resource = 'some/resource'
|
j.resource = 'some/resource'
|
||||||
self.assertEqual(j.user, 'user', "User does not match")
|
self.check_JID(j,
|
||||||
self.assertEqual(j.domain, 'someserver', "Domain does not match")
|
'user',
|
||||||
self.assertEqual(j.resource, 'some/resource', "Resource does not match")
|
'someserver',
|
||||||
self.assertEqual(j.bare, 'user@someserver', "Bare does not match")
|
'some/resource',
|
||||||
self.assertEqual(j.full, 'user@someserver/some/resource', "Full does not match")
|
'user@someserver',
|
||||||
self.assertEqual(str(j), 'user@someserver/some/resource', "String does not match")
|
'user@someserver/some/resource',
|
||||||
|
'user@someserver/some/resource')
|
||||||
|
|
||||||
|
def testJIDnoresource(self):
|
||||||
|
"""Test using JID of the form 'user@domain'."""
|
||||||
|
self.check_JID(JID('user@someserver'),
|
||||||
|
'user',
|
||||||
|
'someserver',
|
||||||
|
'',
|
||||||
|
'user@someserver',
|
||||||
|
'user@someserver',
|
||||||
|
'user@someserver')
|
||||||
|
|
||||||
|
def testJIDnouser(self):
|
||||||
|
"""Test JID of the form 'component.domain.tld'."""
|
||||||
|
self.check_JID(JID('component.someserver'),
|
||||||
|
'',
|
||||||
|
'component.someserver',
|
||||||
|
'',
|
||||||
|
'component.someserver',
|
||||||
|
'component.someserver',
|
||||||
|
'component.someserver')
|
||||||
|
|
||||||
|
|
||||||
suite = unittest.TestLoader().loadTestsFromTestCase(TestJIDClass)
|
suite = unittest.TestLoader().loadTestsFromTestCase(TestJIDClass)
|
||||||
|
|
Loading…
Reference in a new issue