#!/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 if sys.version_info < (3,0): self.failUnless(compileall.compile_dir('.' + os.sep + 'sleekxmpp', rx=re.compile('/[.]svn'), quiet=True)) else: self.failUnless(compileall.compile_dir('.' + os.sep + 'sleekxmpp', rx=re.compile('/[.]svn|.*26\Z'), quiet=True)) def testTabNanny(self): """Invoking the tabnanny""" import tabnanny self.failIf(tabnanny.check("." + os.sep + 'sleekxmpp')) #raise "Help!" 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) result = unittest.TextTestRunner(verbosity=2).run(alltests_suite) print("""<tests xmlns='http://andyet.net/protocol/tests' ran='%s' errors='%s' fails='%s' success='%s' />""" % (result.testsRun, len(result.errors), len(result.failures), result.wasSuccessful()))