"""Regression testing framework This module will search for scripts in the same directory named test_*.py. Each such script should be a test suite that tests a module through PyUnit. This script will aggregate all found test suites into one big test suite and run them all at once. """ # Author: Mark Pilgrim # Modified by Ole Nielsen import unittest import os #List files that should be excluded from the testing process. #E.g. if they are known to fail and under development exclude_files = ['test_metis.py', 'test_version.py', 'test_interpolate.py',# this is under development ] #'test_calculate_region.py', 'test_calculate_point.py'] #'test_init.py'] exclude_dirs = ['pypar_dist', #Special requirements 'props', 'wcprops', 'prop-base', 'text-base', '.svn', #Svn 'tmp'] #'pmesh'] #Name conflict on my home machine (Ole) def get_test_files(path): import sys try: files = os.listdir(path) except: return [] #Check sub directories test_files = [] for file in files: #Exclude svn admin dirs if file in exclude_dirs: continue absolute_filename = path + os.sep + file if os.path.isdir(absolute_filename): sys.path.append(file) #FIXME: May cause name conflicts between pyvolution\mesh.py and pmesh\mesh.py on some systems print 'Recursing into', file test_files += get_test_files(absolute_filename) elif file.startswith('test_') and file.endswith('.py'): test_files.append(file) else: pass return test_files def regressionTest(): import os, unittest path = os.getcwd() files = [x for x in get_test_files(path) if not x == 'test_all.py'] print 'Testing path %s:' %('...'+path[-50:]) for file in files: print ' ' + file if globals().has_key('exclude_files'): for file in exclude_files: files.remove(file) print 'WARNING: File '+ file + ' excluded from testing' filenameToModuleName = lambda f: os.path.splitext(f)[0] moduleNames = map(filenameToModuleName, files) modules = map(__import__, moduleNames) load = unittest.defaultTestLoader.loadTestsFromModule return unittest.TestSuite(map(load, modules)) if __name__ == '__main__': unittest.main(defaultTest='regressionTest')