2963
|
1 |
#!/usr/bin/env python
|
2966
|
2 |
#Copyright ReportLab Europe Ltd. 2000-2008
|
2963
|
3 |
#see license.txt for license details
|
|
4 |
"""Runs all test files in all subfolders.
|
|
5 |
"""
|
2966
|
6 |
__version__=''' $Id$ '''
|
|
7 |
import os, glob, sys, string, traceback, unittest
|
|
8 |
from tests.utils import GlobDirectoryWalker, outputfile, printLocation
|
2963
|
9 |
|
|
10 |
def makeSuite(folder, exclude=[],nonImportable=[],pattern='test_*.py'):
|
|
11 |
"Build a test suite of all available test files."
|
|
12 |
allTests = unittest.TestSuite()
|
|
13 |
|
|
14 |
if os.path.isdir(folder): sys.path.insert(0, folder)
|
|
15 |
for filename in GlobDirectoryWalker(folder, pattern):
|
|
16 |
modname = os.path.splitext(os.path.basename(filename))[0]
|
|
17 |
if modname not in exclude:
|
|
18 |
try:
|
|
19 |
exec 'import %s as module' % modname
|
|
20 |
allTests.addTest(module.makeSuite())
|
|
21 |
except:
|
|
22 |
tt, tv, tb = sys.exc_info()[:]
|
|
23 |
nonImportable.append((filename,traceback.format_exception(tt,tv,tb)))
|
|
24 |
del tt,tv,tb
|
|
25 |
del sys.path[0]
|
|
26 |
|
|
27 |
return allTests
|
|
28 |
|
|
29 |
|
|
30 |
def main(pattern='test_*.py'):
|
|
31 |
try:
|
|
32 |
folder = os.path.dirname(__file__)
|
|
33 |
assert folder
|
|
34 |
except:
|
|
35 |
folder = os.path.dirname(sys.argv[0]) or os.getcwd()
|
|
36 |
#allow for Benn's "screwball cygwin distro":
|
2966
|
37 |
if not folder:
|
2963
|
38 |
folder = '.'
|
|
39 |
from reportlab.lib.utils import isSourceDistro
|
|
40 |
haveSRC = isSourceDistro()
|
|
41 |
|
|
42 |
def cleanup(folder,patterns=('*.pdf', '*.log','*.svg','runAll.txt', 'test_*.txt','_i_am_actually_a_*.*')):
|
|
43 |
if not folder: return
|
|
44 |
for pat in patterns:
|
|
45 |
for filename in GlobDirectoryWalker(folder, pattern=pat):
|
|
46 |
try:
|
|
47 |
os.remove(filename)
|
|
48 |
except:
|
|
49 |
pass
|
|
50 |
|
|
51 |
# special case for reportlab/test directory - clean up
|
|
52 |
# all PDF & log files before starting run. You don't
|
|
53 |
# want this if reusing runAll anywhere else.
|
|
54 |
if string.find(folder, 'reportlab' + os.sep + 'test') > -1: cleanup(folder)
|
|
55 |
cleanup(outputfile(''))
|
|
56 |
NI = []
|
|
57 |
cleanOnly = '--clean' in sys.argv
|
|
58 |
if not cleanOnly:
|
|
59 |
testSuite = makeSuite(folder,nonImportable=NI,pattern=pattern+(not haveSRC and 'c' or ''))
|
|
60 |
unittest.TextTestRunner().run(testSuite)
|
|
61 |
if haveSRC: cleanup(folder,patterns=('*.pyc','*.pyo'))
|
|
62 |
if not cleanOnly:
|
|
63 |
if NI:
|
|
64 |
sys.stderr.write('\n###################### the following tests could not be imported\n')
|
|
65 |
for f,tb in NI:
|
|
66 |
print 'file: "%s"\n%s\n' % (f,string.join(tb,''))
|
|
67 |
printLocation()
|
|
68 |
|
|
69 |
def mainEx():
|
|
70 |
'''for use in subprocesses'''
|
|
71 |
try:
|
|
72 |
main()
|
|
73 |
finally:
|
|
74 |
sys.stdout.flush()
|
|
75 |
sys.stderr.flush()
|
|
76 |
sys.stdout.close()
|
|
77 |
os.close(sys.stderr.fileno())
|
|
78 |
|
|
79 |
def runExternally():
|
2966
|
80 |
cmd = sys.executable+' -c"from tests import runAll;runAll.mainEx()"'
|
2963
|
81 |
i,o,e=os.popen3(cmd)
|
|
82 |
i.close()
|
|
83 |
out = o.read()
|
|
84 |
err=e.read()
|
|
85 |
return '\n'.join((out,err))
|
|
86 |
|
|
87 |
def checkForFailure(outerr):
|
|
88 |
return '\nFAILED' in outerr
|
|
89 |
|
|
90 |
if __name__ == '__main__': #noruntests
|
|
91 |
main()
|