94 lines
3.1 KiB
Python
94 lines
3.1 KiB
Python
#!/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, printLocation
|
|
|
|
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__)
|
|
assert folder
|
|
except:
|
|
folder = os.path.dirname(sys.argv[0]) or os.getcwd()
|
|
#allow for Benn's "screwball cygwin distro":
|
|
if folder == '':
|
|
folder = '.'
|
|
from reportlab.lib.utils import isSourceDistro
|
|
haveSRC = isSourceDistro()
|
|
|
|
def cleanup(folder,patterns=('*.pdf', '*.log','*.svg','runAll.txt', 'test_*.txt','_i_am_actually_a_*.*')):
|
|
if not folder: return
|
|
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 = []
|
|
cleanOnly = '--clean' in sys.argv
|
|
if not cleanOnly:
|
|
testSuite = makeSuite(folder,nonImportable=NI,pattern=pattern+(not haveSRC and 'c' or ''))
|
|
unittest.TextTestRunner().run(testSuite)
|
|
if haveSRC: cleanup(folder,patterns=('*.pyc','*.pyo'))
|
|
if not cleanOnly:
|
|
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,''))
|
|
printLocation()
|
|
|
|
def mainEx():
|
|
'''for use in subprocesses'''
|
|
try:
|
|
main()
|
|
finally:
|
|
sys.stdout.flush()
|
|
sys.stderr.flush()
|
|
sys.stdout.close()
|
|
os.close(sys.stderr.fileno())
|
|
|
|
def runExternally():
|
|
cmd = sys.executable+' -c"from reportlab.test import runAll;runAll.mainEx()"'
|
|
i,o,e=os.popen3(cmd)
|
|
i.close()
|
|
out = o.read()
|
|
err=e.read()
|
|
return '\n'.join((out,err))
|
|
|
|
def checkForFailure(outerr):
|
|
return '\nFAILED' in outerr
|
|
|
|
if __name__ == '__main__': #noruntests
|
|
main()
|