71 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/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()))
 | 
