summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sleekxmpp/xmlstream/jid.py12
-rw-r--r--tests/test_jid.py80
2 files changed, 80 insertions, 12 deletions
diff --git a/sleekxmpp/xmlstream/jid.py b/sleekxmpp/xmlstream/jid.py
index 149611b7..33d845a0 100644
--- a/sleekxmpp/xmlstream/jid.py
+++ b/sleekxmpp/xmlstream/jid.py
@@ -94,21 +94,15 @@ class JID(object):
elif name in ('server', 'domain', 'host'):
self.domain = value
elif name in ('full', 'jid'):
- if '@' not in value:
- if '/' in value:
- d, r = value.split('/', 1)
- object.__setattr__(self, "_resource", r)
- else:
- d = value
- object.__setattr__(self, "_domain", d)
- else:
- self.reset(value)
+ self.reset(value)
+ self.regenerate()
elif name == 'bare':
if '@' in value:
u, d = value.split('@', 1)
object.__setattr__(self, "_user", u)
object.__setattr__(self, "_domain", d)
else:
+ object.__setattr__(self, "_user", '')
object.__setattr__(self, "_domain", value)
self.regenerate()
else:
diff --git a/tests/test_jid.py b/tests/test_jid.py
index 38dc6ed5..6ec6e02b 100644
--- a/tests/test_jid.py
+++ b/tests/test_jid.py
@@ -6,7 +6,7 @@ class TestJIDClass(SleekTest):
"""Verify that the JID class can parse and manipulate JIDs."""
- def testJIDfromfull(self):
+ def testJIDFromFull(self):
"""Test using JID of the form 'user@server/resource/with/slashes'."""
self.check_JID(JID('user@someserver/some/resource'),
'user',
@@ -30,7 +30,81 @@ class TestJIDClass(SleekTest):
'user@someserver/some/resource',
'user@someserver/some/resource')
- def testJIDnoresource(self):
+ def testJIDaliases(self):
+ """Test changing JID using aliases for domain."""
+ j = JID('user@someserver/resource')
+ j.server = 'anotherserver'
+ self.check_JID(j, domain='anotherserver')
+ j.host = 'yetanother'
+ self.check_JID(j, domain='yetanother')
+
+ def testJIDSetFullWithUser(self):
+ """Test setting the full JID with a user portion."""
+ j = JID('user@domain/resource')
+ j.full = 'otheruser@otherdomain/otherresource'
+ self.check_JID(j,
+ 'otheruser',
+ 'otherdomain',
+ 'otherresource',
+ 'otheruser@otherdomain',
+ 'otheruser@otherdomain/otherresource',
+ 'otheruser@otherdomain/otherresource')
+
+ def testJIDFullNoUserWithResource(self):
+ """
+ Test setting the full JID without a user
+ portion and with a resource.
+ """
+ j = JID('user@domain/resource')
+ j.full = 'otherdomain/otherresource'
+ self.check_JID(j,
+ '',
+ 'otherdomain',
+ 'otherresource',
+ 'otherdomain',
+ 'otherdomain/otherresource',
+ 'otherdomain/otherresource')
+
+ def testJIDFullNoUserNoResource(self):
+ """
+ Test setting the full JID without a user
+ portion and without a resource.
+ """
+ j = JID('user@domain/resource')
+ j.full = 'otherdomain'
+ self.check_JID(j,
+ '',
+ 'otherdomain',
+ '',
+ 'otherdomain',
+ 'otherdomain',
+ 'otherdomain')
+
+ def testJIDBareUser(self):
+ """Test setting the bare JID with a user."""
+ j = JID('user@domain/resource')
+ j.bare = 'otheruser@otherdomain'
+ self.check_JID(j,
+ 'otheruser',
+ 'otherdomain',
+ 'resource',
+ 'otheruser@otherdomain',
+ 'otheruser@otherdomain/resource',
+ 'otheruser@otherdomain/resource')
+
+ def testJIDBareNoUser(self):
+ """Test setting the bare JID without a user."""
+ j = JID('user@domain/resource')
+ j.bare = 'otherdomain'
+ self.check_JID(j,
+ '',
+ 'otherdomain',
+ 'resource',
+ 'otherdomain',
+ 'otherdomain/resource',
+ 'otherdomain/resource')
+
+ def testJIDNoResource(self):
"""Test using JID of the form 'user@domain'."""
self.check_JID(JID('user@someserver'),
'user',
@@ -40,7 +114,7 @@ class TestJIDClass(SleekTest):
'user@someserver',
'user@someserver')
- def testJIDnouser(self):
+ def testJIDNoUser(self):
"""Test JID of the form 'component.domain.tld'."""
self.check_JID(JID('component.someserver'),
'',