source: branches/numpy/anuga/damage_modelling/test_all.py @ 6553

Last change on this file since 6553 was 3692, checked in by steve, 18 years ago
File size: 2.0 KB
Line 
1"""Regression testing framework
2This module will search for scripts in the same directory named
3test_*.py.  Each such script should be a test suite that tests a
4module through PyUnit. This script will aggregate all
5found test suites into one big test suite and run them all at once.
6"""
7
8# Author: Mark Pilgrim
9# Modified by Ole Nielsen
10
11import unittest
12import os
13
14
15#List files that should be excluded from the testing process.
16#E.g. if they are known to fail and under development
17exclude = [] 
18
19
20def get_test_files(path):
21
22    import sys
23
24    files = os.listdir(path)
25
26    #Check sub directories
27    test_files = []
28    for file in files:
29        if os.path.isdir(file):
30            sys.path.append(file)
31            #print 'Recursing into', file
32            test_files += get_test_files(path + os.sep + file)
33        elif file[:5] == 'test_' and file[-2:] == 'py':
34            #print 'Appending', file
35            test_files.append(file)
36        else:
37            pass
38    return test_files
39
40
41
42def regressionTest():
43    import sys, os, re, unittest
44    path = os.path.split(sys.argv[0])[0] or os.getcwd()
45
46
47    files = get_test_files(path)
48
49
50
51    #test = re.compile('^test_[\w]*.py$', re.IGNORECASE)
52    #files = filter(test.search, files)
53
54
55    try:
56        files.remove(__file__)  #Remove self from list (Ver 2.3. or later)
57    except:
58        files.remove('test_all.py')
59
60    print 'Testing:'
61    for file in files:
62        print '  ' + file
63
64    if globals().has_key('exclude'):
65        for file in exclude:
66            files.remove(file)
67            print 'WARNING: File '+ file + ' excluded from testing'
68
69
70    filenameToModuleName = lambda f: os.path.splitext(f)[0]
71    #print "files",files
72    moduleNames = map(filenameToModuleName, files)
73    #print "moduleNames",moduleNames
74    modules = map(__import__, moduleNames)
75    load = unittest.defaultTestLoader.loadTestsFromModule
76    return unittest.TestSuite(map(load, modules))
77
78if __name__ == '__main__':   
79    suite = regressionTest()
80    runner = unittest.TextTestRunner() #(verbosity=2)
81    runner.run(suite)
Note: See TracBrowser for help on using the repository browser.