summaryrefslogtreecommitdiff
path: root/test/testall.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/testall.py')
-rwxr-xr-xtest/testall.py56
1 files changed, 50 insertions, 6 deletions
diff --git a/test/testall.py b/test/testall.py
index 2a82bb6..cb45b28 100755
--- a/test/testall.py
+++ b/test/testall.py
@@ -4,12 +4,38 @@
import unittest
import sys, os, glob
-os.chdir(os.path.dirname(os.path.abspath(__file__)))
-sys.path.insert(0, '../')
-sys.path.insert(0, './')
+test_root = os.path.dirname(os.path.abspath(__file__))
+test_files = glob.glob(os.path.join(test_root, 'test_*.py'))
-unittests = [name[2:-3] for name in glob.glob('./test_*.py')]
-suite = unittest.defaultTestLoader.loadTestsFromNames(unittests)
+os.chdir(test_root)
+sys.path.insert(0, os.path.dirname(test_root))
+sys.path.insert(0, test_root)
+test_names = [os.path.basename(name)[:-3] for name in test_files]
+
+if 'help' in sys.argv or '-h' in sys.argv:
+ print
+ print "Command line arguments:"
+ print
+ print "fast: Skip server adapter tests."
+ print "verbose: Print tests even if they pass."
+ print "coverage: Measure code coverage."
+ print "html: Create a html coverage report. Requires 'coverage'"
+ print "clean: Delete coverage or temporary files"
+ print
+ sys.exit(0)
+
+
+if 'fast' in sys.argv:
+ print "Warning: The 'fast' keyword skipps server tests."
+ test_names.remove('test_server')
+
+cov = None
+if 'coverage' in sys.argv:
+ import coverage
+ cov = coverage.coverage(data_suffix=True, branch=True)
+ cov.start()
+
+suite = unittest.defaultTestLoader.loadTestsFromNames(test_names)
#import doctest
#doctests = glob.glob('./doctest_*.txt')
@@ -18,7 +44,25 @@ suite = unittest.defaultTestLoader.loadTestsFromNames(unittests)
def run():
import bottle
bottle.debug(True)
- result = unittest.TextTestRunner(verbosity=0).run(suite)
+ vlevel = 2 if 'verbose' in sys.argv else 0
+ result = unittest.TextTestRunner(verbosity=vlevel).run(suite)
+ print
+
+ if cov:
+ cov.stop()
+ cov.save()
+ # Recreate coverage object so new files created in other processes are
+ # recognized
+ cnew = coverage.coverage(data_suffix=True, branch=True)
+ cnew.combine()
+ print "Coverage:"
+ cnew.report(morfs=['bottle.py']+test_files, show_missing=False)
+ if 'html' in sys.argv:
+ print
+ cnew.html_report(morfs=['bottle.py']+test_files, directory='coverage')
+ print "Coverage report is in %s" % \
+ os.path.abspath('coverage/index.html')
+
sys.exit((result.errors or result.failures) and 1 or 0)
if __name__ == '__main__':