diff --git a/sleekxmpp/xmlstream/jid.py b/sleekxmpp/xmlstream/jid.py index 149611b..33d845a 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 38dc6ed..6ec6e02 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'), '',