Skip to content
Snippets Groups Projects
Commit 87e29a31 authored by Sander Mathijs van Veen's avatar Sander Mathijs van Veen
Browse files

Initial commit of the testrunner python module.

parents
No related branches found
No related tags found
No related merge requests found
*.pyc
*.swp
from runner import TextTestRunner
__all__ = ['TextTestRunner']
#
# Python unit test runner
#
# Author : Sander Mathijs van Veen <smvv@kompiler.org>
# License: GPL version 3, see also the file `LICENSE'.
#
import sys
import os
import unittest
from testrunner import TextTestRunner
if len(sys.argv) < 2:
print 'Usage: %s tests/test_COMPONENT.py' % sys.argv[0]
sys.exit(1)
# TODO parse verbosity option '-v', given in argv.
verbosity = 0
suites = []
# Dynamic load the requested module containing the test cases.
for testfile in sys.argv[1:]:
module_dir, module_file = os.path.split(testfile)
module_name, module_ext = os.path.splitext(module_file)
module_obj = __import__(module_dir.replace('/', '.'),
fromlist=[module_name])
module_obj.__file__ = testfile
globals()[module_name] = module_obj
# Start the test runner and display the results to stdout.
container = module_obj.__dict__[module_name]
class_parts = module_name[5:].split('_')
class_name = 'Test' + ''.join([p.capitalize() for p in class_parts])
testcase = container.__dict__[class_name]
suites += [unittest.TestLoader().loadTestsFromTestCase(testcase)]
# Create the text runner and execute the tests.
TextTestRunner(verbosity=verbosity).run(unittest.TestSuite(suites))
import unittest
import time
class TextTestRunner(unittest.TextTestRunner):
"""This is a wrapper class used to minimize the amount of blank lines
printed to stdout. The method ``run`` is modified and it's original source
is in Python Standard Library's ``unittest`` module."""
def run(self, test):
"Run the given test case or test suite."
result = self._makeResult()
result.failfast = getattr(self, 'failfast', None)
result.buffer = getattr(self, 'buffer', None)
startTime = time.time()
startTestRun = getattr(result, 'startTestRun', None)
if startTestRun is not None:
startTestRun()
try:
test(result)
finally:
stopTestRun = getattr(result, 'stopTestRun', None)
if stopTestRun is not None:
stopTestRun()
stopTime = time.time()
timeTaken = stopTime - startTime
result.printErrors()
run = result.testsRun
self.stream.write("Ran %d test%s in %.3fs " %
(run, run != 1 and "s" or "", timeTaken))
expectedFails = unexpectedSuccesses = skipped = 0
try:
results = map(len, (result.expectedFailures,
result.unexpectedSuccesses,
result.skipped))
except AttributeError:
pass
else:
expectedFails, unexpectedSuccesses, skipped = results
infos = []
if not result.wasSuccessful():
self.stream.write("FAILED")
failed, errored = map(len, (result.failures, result.errors))
if failed:
infos.append("failures=%d" % failed)
if errored:
infos.append("errors=%d" % errored)
else:
self.stream.write("OK")
if skipped:
infos.append("skipped=%d" % skipped)
if expectedFails:
infos.append("expected failures=%d" % expectedFails)
if unexpectedSuccesses:
infos.append("unexpected successes=%d" % unexpectedSuccesses)
if infos:
self.stream.writeln(" (%s)" % (", ".join(infos),))
else:
self.stream.write("\n")
return result
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment