summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLance Stout <lancestout@gmail.com>2010-08-27 12:22:35 -0400
committerLance Stout <lancestout@gmail.com>2010-08-27 12:22:35 -0400
commitbb6f4af8e24f940a837c227b0f2fab2b64e4dc7e (patch)
tree641a340576a644139f9b0a07def8b9b9db753eb2
parent6677df39f2ed3a949fa31df847bb08122190a26d (diff)
downloadslixmpp-bb6f4af8e24f940a837c227b0f2fab2b64e4dc7e.tar.gz
slixmpp-bb6f4af8e24f940a837c227b0f2fab2b64e4dc7e.tar.bz2
slixmpp-bb6f4af8e24f940a837c227b0f2fab2b64e4dc7e.tar.xz
slixmpp-bb6f4af8e24f940a837c227b0f2fab2b64e4dc7e.zip
Added unit tests for StanzaBase.
-rw-r--r--sleekxmpp/xmlstream/stanzabase.py8
-rw-r--r--tests/test_stanzabase.py79
2 files changed, 85 insertions, 2 deletions
diff --git a/sleekxmpp/xmlstream/stanzabase.py b/sleekxmpp/xmlstream/stanzabase.py
index 51966a4e..d7c7c7b4 100644
--- a/sleekxmpp/xmlstream/stanzabase.py
+++ b/sleekxmpp/xmlstream/stanzabase.py
@@ -1014,9 +1014,13 @@ class StanzaBase(ElementBase):
Add XML content to the stanza.
Arguments:
- value -- An XML object, or a stanza object.
+ value -- Either an XML or a stanza object, or a list
+ of XML or stanza objects.
"""
- self.xml.append(value)
+ if not isinstance(value, list):
+ value = [value]
+ for val in value:
+ self.append(val)
return self
def delPayload(self):
diff --git a/tests/test_stanzabase.py b/tests/test_stanzabase.py
new file mode 100644
index 00000000..682068d9
--- /dev/null
+++ b/tests/test_stanzabase.py
@@ -0,0 +1,79 @@
+from . sleektest import *
+import sleekxmpp
+from sleekxmpp.xmlstream.stanzabase import ET, StanzaBase
+
+class TestStanzaBase(SleekTest):
+
+ def testTo(self):
+ """Test the 'to' interface of StanzaBase."""
+ stanza = StanzaBase()
+ stanza['to'] = 'user@example.com'
+ self.failUnless(str(stanza['to']) == 'user@example.com',
+ "Setting and retrieving stanza 'to' attribute did not work.")
+
+ def testFrom(self):
+ """Test the 'from' interface of StanzaBase."""
+ stanza = StanzaBase()
+ stanza['from'] = 'user@example.com'
+ self.failUnless(str(stanza['from']) == 'user@example.com',
+ "Setting and retrieving stanza 'from' attribute did not work.")
+
+ def testPayload(self):
+ """Test the 'payload' interface of StanzaBase."""
+ stanza = StanzaBase()
+ self.failUnless(stanza['payload'] == [],
+ "Empty stanza does not have an empty payload.")
+
+ stanza['payload'] = ET.Element("{foo}foo")
+ self.failUnless(len(stanza['payload']) == 1,
+ "Stanza contents and payload do not match.")
+
+ stanza['payload'] = ET.Element('{bar}bar')
+ self.failUnless(len(stanza['payload']) == 2,
+ "Stanza payload was not appended.")
+
+ del stanza['payload']
+ self.failUnless(stanza['payload'] == [],
+ "Stanza payload not cleared after deletion.")
+
+ stanza['payload'] = [ET.Element('{foo}foo'),
+ ET.Element('{bar}bar')]
+ self.failUnless(len(stanza['payload']) == 2,
+ "Adding multiple elements to stanza's payload did not work.")
+
+ def testClear(self):
+ """Test clearing a stanza."""
+ stanza = StanzaBase()
+ stanza['to'] = 'user@example.com'
+ stanza['payload'] = ET.Element("{foo}foo")
+ stanza.clear()
+
+ self.failUnless(stanza['payload'] == [],
+ "Stanza payload was not cleared after calling .clear()")
+ self.failUnless(str(stanza['to']) == "user@example.com",
+ "Stanza attributes were not preserved after calling .clear()")
+
+ def testReply(self):
+ """Test creating a reply stanza."""
+ stanza = StanzaBase()
+ stanza['to'] = "recipient@example.com"
+ stanza['from'] = "sender@example.com"
+ stanza['payload'] = ET.Element("{foo}foo")
+
+ stanza.reply()
+
+ self.failUnless(str(stanza['to'] == "sender@example.com"),
+ "Stanza reply did not change 'to' attribute.")
+ self.failUnless(stanza['payload'] == [],
+ "Stanza reply did not empty stanza payload.")
+
+ def testError(self):
+ """Test marking a stanza as an error."""
+ stanza = StanzaBase()
+ stanza['type'] = 'get'
+ stanza.error()
+ self.failUnless(stanza['type'] == 'error',
+ "Stanza type is not 'error' after calling error()")
+
+
+suite = unittest.TestLoader().loadTestsFromTestCase(TestStanzaBase)