tests/runAll.py
changeset 2963 c414c0ab69e7
child 2966 c9df63ccabdf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/runAll.py	Wed Sep 03 16:05:15 2008 +0000
@@ -0,0 +1,93 @@
+#!/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()