diff --git a/sleekxmpp/stanza/message.py b/sleekxmpp/stanza/message.py index c8d54f1..a3f2901 100644 --- a/sleekxmpp/stanza/message.py +++ b/sleekxmpp/stanza/message.py @@ -4,7 +4,7 @@ from . error import Error from . rootstanza import RootStanza class Message(RootStanza): - interfaces = set(('type', 'to', 'from', 'id', 'body', 'subject')) + interfaces = set(('type', 'to', 'from', 'id', 'body', 'subject', 'groupchat')) types = set((None, 'normal', 'chat', 'headline', 'error', 'groupchat')) sub_interfaces = set(('body', 'subject')) name = 'message' @@ -23,6 +23,8 @@ class Message(RootStanza): def reply(self, body=None): StanzaBase.reply(self) + if self['type'] == 'groupchat': + self['to'] = self['to'].bare del self['id'] if body is not None: self['body'] = body diff --git a/testall.py b/testall.py new file mode 100644 index 0000000..982ad64 --- /dev/null +++ b/testall.py @@ -0,0 +1,65 @@ +#!/usr/bin/python2.6 +import unittest +import logging +import sys +import os + +class testoverall(unittest.TestCase): + + def testModules(self): + """Testing all modules by compiling them""" + import compileall + import re + self.failUnless(compileall.compile_dir('.' + os.sep + 'sleekxmpp', rx=re.compile('/[.]svn'), quiet=True)) + + def testTabNanny(self): + """Invoking the tabnanny""" + import tabnanny + self.failIf(tabnanny.check("." + os.sep + 'sleekxmpp')) + + def testMethodLength(self): + """Testing for excessive method lengths""" + import re + dirs = os.walk(sys.path[0] + os.sep + 'sleekxmpp') + offenders = [] + for d in dirs: + if not '.svn' in d[0]: + for filename in d[2]: + if filename.endswith('.py') and d[0].find("template%stemplates" % os.sep) == -1: + with open("%s%s%s" % (d[0],os.sep,filename), "r") as fp: + cur = None + methodline = lineno = methodlen = methodindent = 0 + for line in fp: + indentlevel = re.compile("^[\t ]*").search(line).end() + line = line.expandtabs() + lineno += 1 + if line.strip().startswith("def ") or line.strip().startswith("except") or (line.strip() and methodindent > indentlevel) or (line.strip() and methodindent == indentlevel): #new method found or old one ended + if cur: #existing method needs final evaluation + if methodlen > 50 and not cur.strip().startswith("def setupUi"): + offenders.append("Method '%s' on line %s of %s/%s is longer than 50 lines (%s)" % (cur.strip(),methodline,d[0][len(rootp):],filename,methodlen)) + methodlen = 0 + cur = line + methodindent = indentlevel + methodline = lineno + if line and cur and not line.strip().startswith("#") and not (cur.strip().startswith("try:") and methodindent == 0): #if we weren't all whitespace and weren't a comment + methodlen += 1 + self.failIf(offenders,"\n".join(offenders)) + + +if __name__ == '__main__': + logging.basicConfig(level=100) + logging.disable(100) + #this doesn't need to be very clean + alltests = [unittest.TestLoader().loadTestsFromTestCase(testoverall)] + rootp = sys.path[0] + os.sep + 'tests' + dirs = os.walk(rootp) + for d in dirs: + if not '.svn' in d[0]: + for filename in d[2]: + if filename.startswith('test_') and filename.endswith('.py'): + modname = ('tests' + "." + filename)[:-3].replace(os.sep,'.') + __import__(modname) + #sys.modules[modname].config = moduleconfig + alltests.append(sys.modules[modname].suite) + alltests_suite = unittest.TestSuite(alltests) + unittest.TextTestRunner(verbosity=2).run(alltests_suite) diff --git a/tests/pubsub_stanzas.py b/tests/pubsub_stanzas.py deleted file mode 100644 index d768a3d..0000000 --- a/tests/pubsub_stanzas.py +++ /dev/null @@ -1,26 +0,0 @@ -from sleekxmpp.plugins.stanza_pubsub import * - -def testAffiliations(): - iq = Iq() - aff1 = Affiliation() - aff1['node'] = 'testnode' - aff1['affiliation'] = 'owner' - aff2 = Affiliation() - aff2['node'] = 'testnode2' - aff2['affiliation'] = 'publisher' - iq['pubsub']['affiliations'].append(aff1) - iq['pubsub']['affiliations'].append(aff2) - print(iq) - iq2 = Iq(None, ET.fromstring("""""")) - iq3 = Iq() - values = iq2.getValues() - print(values) - iq3.setValues(values) - print("-"*8) - print(iq3.keys()) - - print(iq3) - print(str(iq) == str(iq2) == str(iq3)) - - -testAffiliations() diff --git a/tests/test_messagestanzas.py b/tests/test_messagestanzas.py new file mode 100644 index 0000000..ec44803 --- /dev/null +++ b/tests/test_messagestanzas.py @@ -0,0 +1,19 @@ +import unittest + +class testmessagestanzas(unittest.TestCase): + + def setUp(self): + import sleekxmpp.stanza.message as m + self.m = m + + def testGroupchatReplyRegression(self): + "Regression groupchat reply should be to barejid" + msg = self.m.Message() + msg['to'] = 'me@myserver.tld' + msg['from'] = 'room@someservice.someserver.tld/somenick' + msg['type'] = 'groupchat' + msg['body'] = "this is a message" + msg.reply() + self.failUnless(str(msg['to']) == 'room@someservice.someserver.tld') + +suite = unittest.TestLoader().loadTestsFromTestCase(testmessagestanzas) diff --git a/tests/test_pubsubstanzas.py b/tests/test_pubsubstanzas.py new file mode 100644 index 0000000..37deeca --- /dev/null +++ b/tests/test_pubsubstanzas.py @@ -0,0 +1,28 @@ +import unittest + +class testpubsubstanzas(unittest.TestCase): + + def setUp(self): + import sleekxmpp.plugins.stanza_pubsub as ps + self.ps = ps + + def testAffiliations(self): + "Testing iq/pubsub/affiliations/affiliation stanzas" + iq = self.ps.Iq() + aff1 = self.ps.Affiliation() + aff1['node'] = 'testnode' + aff1['affiliation'] = 'owner' + aff2 = self.ps.Affiliation() + aff2['node'] = 'testnode2' + aff2['affiliation'] = 'publisher' + iq['pubsub']['affiliations'].append(aff1) + iq['pubsub']['affiliations'].append(aff2) + xmlstring = """""" + iq2 = self.ps.Iq(None, self.ps.ET.fromstring(xmlstring)) + iq3 = self.ps.Iq() + values = iq2.getValues() + iq3.setValues(values) + self.failUnless(xmlstring == str(iq) == str(iq2) == str(iq3)) + + +suite = unittest.TestLoader().loadTestsFromTestCase(testpubsubstanzas)