diff options
author | Robert Collins <robertc@robertcollins.net> | 2009-12-19 12:05:27 +1100 |
---|---|---|
committer | Robert Collins <robertc@robertcollins.net> | 2009-12-19 12:05:27 +1100 |
commit | 290ae5cbc481fec6a68e8851c87bd31cafbcc31f (patch) | |
tree | 1d573143d2826b27289fbf01ca4b316327ac2efb | |
parent | 2934942897b593aa74451e4642b4e540d7594b30 (diff) | |
download | testscenarios-git-290ae5cbc481fec6a68e8851c87bd31cafbcc31f.tar.gz |
Start running tests using testtools.
-rw-r--r-- | Makefile | 3 | ||||
-rw-r--r-- | lib/testscenarios/tests/__init__.py | 3 | ||||
-rwxr-xr-x | test_all.py | 109 |
3 files changed, 5 insertions, 110 deletions
@@ -4,7 +4,8 @@ PYTHON ?= python all: check: - PYTHONPATH=$(PYTHONPATH) $(PYTHON) ./test_all.py $(TESTRULE) + PYTHONPATH=$(PYTHONPATH) $(PYTHON) -m testtools.run \ + testscenarios.test_suite clean: find . -name '*.pyc' -print0 | xargs -0 rm -f diff --git a/lib/testscenarios/tests/__init__.py b/lib/testscenarios/tests/__init__.py index 9bce8a3..226f852 100644 --- a/lib/testscenarios/tests/__init__.py +++ b/lib/testscenarios/tests/__init__.py @@ -17,6 +17,7 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # +import doctest import sys import unittest @@ -39,4 +40,6 @@ def load_tests(standard_tests, module, loader): prefix = "testscenarios.tests.test_" test_mod_names = [prefix + test_module for test_module in test_modules] standard_tests.addTests(loader.loadTestsFromNames(test_mod_names)) + doctest.set_unittest_reportflags(doctest.REPORT_ONLY_FIRST_FAILURE) + standard_tests.addTest(doctest.DocFileSuite("../../../README")) return standard_tests diff --git a/test_all.py b/test_all.py deleted file mode 100755 index f5330ea..0000000 --- a/test_all.py +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env python -# -*- Mode: python -*- -# -# Copyright (C) 2004 Canonical.com -# Author: Robert Collins <robert.collins@canonical.com> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# - -import doctest -import unittest -import sys -import os -import shutil - -from testtools.utils import iterate_tests - -class ParameterisableTextTestRunner(unittest.TextTestRunner): - """I am a TextTestRunner whose result class is - parameterisable without further subclassing""" - def __init__(self, **args): - unittest.TextTestRunner.__init__(self, **args) - self._resultFactory=None - def resultFactory(self, *args): - """set or retrieve the result factory""" - if args: - self._resultFactory=args[0] - return self - if self._resultFactory is None: - self._resultFactory=unittest._TextTestResult - return self._resultFactory - - def _makeResult(self): - return self.resultFactory()(self.stream, self.descriptions, self.verbosity) - - -class EarlyStoppingTextTestResult(unittest._TextTestResult): - """I am a TextTestResult that can optionally stop at the first failure - or error""" - - def addError(self, test, err): - unittest._TextTestResult.addError(self, test, err) - if self.stopOnError(): - self.stop() - - def addFailure(self, test, err): - unittest._TextTestResult.addError(self, test, err) - if self.stopOnFailure(): - self.stop() - - def stopOnError(self, *args): - """should this result indicate an abort when an error occurs? - TODO parameterise this""" - return True - - def stopOnFailure(self, *args): - """should this result indicate an abort when a failure error occurs? - TODO parameterise this""" - return True - - -def earlyStopFactory(*args, **kwargs): - """return a an early stopping text test result""" - result=EarlyStoppingTextTestResult(*args, **kwargs) - return result - -def test_suite(): - import testscenarios - result = testscenarios.test_suite() - doctest.set_unittest_reportflags(doctest.REPORT_ONLY_FIRST_FAILURE) - result.addTest(doctest.DocFileSuite("README")) - return result - - -def main(argv): - """To parameterise what tests are run, run this script like so: - python test_all.py REGEX - i.e. - python test_all.py .*Protocol.* - to run all tests with Protocol in their id.""" - if len(argv) > 1: - pattern = argv[1] - suite = unittest.TestSuite() - filter = re.compile(pattern) - for test in iterate_tests(test_suite()): - if filter.search(test.id()): - suite.addTest(test) - else: - suite = test_suite() - runner = ParameterisableTextTestRunner(verbosity=2) - runner.resultFactory(earlyStopFactory) - if not runner.run(suite).wasSuccessful(): - return 1 - return 0 - -if __name__ == '__main__': - sys.exit(main(sys.argv)) |