summaryrefslogtreecommitdiff
path: root/test/alltests.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/alltests.py')
-rwxr-xr-xtest/alltests.py98
1 files changed, 98 insertions, 0 deletions
diff --git a/test/alltests.py b/test/alltests.py
new file mode 100755
index 000000000..b28541af1
--- /dev/null
+++ b/test/alltests.py
@@ -0,0 +1,98 @@
+#!/bin/sh
+''''exec python -u "$0" "$@" #'''
+
+# Author: David Goodger
+# Contact: goodger@users.sourceforge.net
+# Revision: $Revision$
+# Date: $Date$
+# Copyright: This module has been placed in the public domain.
+
+__doc__ = \
+"""
+All modules named 'test_*.py' in the current directory, and recursively in
+subdirectories (packages) called 'test_*', are loaded and test suites within
+are run.
+"""
+
+import time
+# Start point for actual elapsed time, including imports
+# and setup outside of unittest.
+start = time.time()
+
+import sys
+import os
+from types import UnicodeType
+import DocutilsTestSupport # must be imported before docutils
+import docutils
+
+
+def new_exception_str(self):
+ for i in self.args:
+ if isinstance(i, UnicodeType):
+ raise RuntimeError('Error (unicode): %r' % (self.args,))
+ return old_exception_str(self)
+
+old_exception_str = Exception.__str__
+Exception.__str__ = new_exception_str
+
+
+class Tee:
+
+ """Write to a file and a stream (default: stdout) simultaneously."""
+
+ def __init__(self, filename, stream=sys.__stdout__):
+ self.file = open(filename, 'w')
+ self.stream = stream
+
+ def write(self, string):
+ self.stream.write(string)
+ self.file.write(string)
+
+ def flush(self):
+ self.stream.flush()
+ self.file.flush()
+
+
+def pformat(suite):
+ step = 4
+ suitestr = repr(suite).replace('=[<', '=[\n<').replace(', ', ',\n')
+ indent = 0
+ output = []
+ for line in suitestr.splitlines():
+ output.append(' ' * indent + line)
+ if line[-1:] == '[':
+ indent += step
+ else:
+ if line [-5:] == ']>]>,':
+ indent -= step * 2
+ elif line[-3:] == ']>,':
+ indent -= step
+ return '\n'.join(output)
+
+def suite():
+ path, script = os.path.split(sys.argv[0])
+ suite = package_unittest.loadTestModules(DocutilsTestSupport.testroot,
+ 'test_', packages=1)
+ sys.stdout.flush()
+ return suite
+
+# must redirect stderr *before* first import of unittest
+sys.stdout = sys.stderr = Tee('alltests.out')
+
+import package_unittest
+
+
+if __name__ == '__main__':
+ suite = suite()
+ print ('Testing Docutils %s [%s] with Python %s on %s at %s'
+ % (docutils.__version__, docutils.__version_details__,
+ sys.version.split()[0],
+ time.strftime('%Y-%m-%d'), time.strftime('%H:%M:%S')))
+ print 'Working directory: %s' % os.getcwd()
+ print 'Docutils package: %s' % os.path.dirname(docutils.__file__)
+ sys.stdout.flush()
+ package_unittest.main(suite)
+ #if package_unittest.verbosity > 1:
+ # print >>sys.stderr, pformat(suite) # check the test suite
+ finish = time.time()
+ print 'Elapsed time: %.3f seconds' % (finish - start)