1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
#!/usr/bin/env python
#Copyright ReportLab Europe Ltd. 2000-2004
#see license.txt for license details
#history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/test/runAll.py
"""Runs all test files in all subfolders.
"""
import os, glob, sys, string, traceback
from reportlab.test import unittest
from reportlab.test.utils import GlobDirectoryWalker, outputfile
def makeSuite(folder, exclude=[],nonImportable=[],pattern='test_*.py'):
"Build a test suite of all available test files."
allTests = unittest.TestSuite()
if os.path.isdir(folder): sys.path.insert(0, folder)
for filename in GlobDirectoryWalker(folder, pattern):
modname = os.path.splitext(os.path.basename(filename))[0]
if modname not in exclude:
try:
exec 'import %s as module' % modname
allTests.addTest(module.makeSuite())
except:
tt, tv, tb = sys.exc_info()[:]
nonImportable.append((filename,traceback.format_exception(tt,tv,tb)))
del tt,tv,tb
del sys.path[0]
return allTests
def main(pattern='test_*.py'):
try:
folder = os.path.dirname(__file__)
except:
folder = os.path.dirname(sys.argv[0]) or os.getcwd()
from reportlab.lib.utils import isSourceDistro
haveSRC = isSourceDistro()
def cleanup(folder,patterns=('*.pdf', '*.log','*.svg','runAll.txt', 'test_*.txt')):
for pat in patterns:
for filename in GlobDirectoryWalker(folder, pattern=pat):
try:
os.remove(filename)
except:
pass
# special case for reportlab/test directory - clean up
# all PDF & log files before starting run. You don't
# want this if reusing runAll anywhere else.
if string.find(folder, 'reportlab' + os.sep + 'test') > -1: cleanup(folder)
cleanup(outputfile(''))
NI = []
testSuite = makeSuite(folder,nonImportable=NI,pattern=pattern+(not haveSRC and 'c' or ''))
unittest.TextTestRunner().run(testSuite)
if haveSRC: cleanup(folder,patterns=('*.pyc','*.pyo'))
if NI:
sys.stderr.write('\n###################### the following tests could not be imported\n')
for f,tb in NI:
print 'file: "%s"\n%s\n' % (f,string.join(tb,''))
print 'Logs and output files written to folder "%s"' % outputfile('')
if __name__ == '__main__': #noruntests
main()
|