summaryrefslogtreecommitdiffstats
path: root/Lib/unittest/suite.py
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2009-07-19 21:01:52 (GMT)
committerBenjamin Peterson <benjamin@python.org>2009-07-19 21:01:52 (GMT)
commitbed7d04fedd800a8d3bd8a7c9c3ff823e365c236 (patch)
treef7e20f085f4c4a6a4cc0227ab16aa73d1dd7dc8e /Lib/unittest/suite.py
parentc4296d1edc1f05f96cc7b6b3e1c3df9dd596d5f4 (diff)
downloadcpython-bed7d04fedd800a8d3bd8a7c9c3ff823e365c236.zip
cpython-bed7d04fedd800a8d3bd8a7c9c3ff823e365c236.tar.gz
cpython-bed7d04fedd800a8d3bd8a7c9c3ff823e365c236.tar.bz2
Merged revisions 74095 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r74095 | benjamin.peterson | 2009-07-19 15:18:21 -0500 (Sun, 19 Jul 2009) | 1 line split unittest.py into a package ........
Diffstat (limited to 'Lib/unittest/suite.py')
-rw-r--r--Lib/unittest/suite.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/Lib/unittest/suite.py b/Lib/unittest/suite.py
new file mode 100644
index 0000000..baf8414
--- /dev/null
+++ b/Lib/unittest/suite.py
@@ -0,0 +1,68 @@
+"""TestSuite"""
+
+from . import case
+
+
+class TestSuite(object):
+ """A test suite is a composite test consisting of a number of TestCases.
+
+ For use, create an instance of TestSuite, then add test case instances.
+ When all tests have been added, the suite can be passed to a test
+ runner, such as TextTestRunner. It will run the individual test cases
+ in the order in which they were added, aggregating the results. When
+ subclassing, do not forget to call the base class constructor.
+ """
+ def __init__(self, tests=()):
+ self._tests = []
+ self.addTests(tests)
+
+ def __repr__(self):
+ return "<%s tests=%s>" % (_strclass(self.__class__), list(self))
+
+ def __eq__(self, other):
+ if not isinstance(other, self.__class__):
+ return NotImplemented
+ return list(self) == list(other)
+
+ def __ne__(self, other):
+ return not self == other
+
+ def __iter__(self):
+ return iter(self._tests)
+
+ def countTestCases(self):
+ cases = 0
+ for test in self:
+ cases += test.countTestCases()
+ return cases
+
+ def addTest(self, test):
+ # sanity checks
+ if not hasattr(test, '__call__'):
+ raise TypeError("the test to add must be callable")
+ if isinstance(test, type) and issubclass(test,
+ (case.TestCase, TestSuite)):
+ raise TypeError("TestCases and TestSuites must be instantiated "
+ "before passing them to addTest()")
+ self._tests.append(test)
+
+ def addTests(self, tests):
+ if isinstance(tests, str):
+ raise TypeError("tests must be an iterable of tests, not a string")
+ for test in tests:
+ self.addTest(test)
+
+ def run(self, result):
+ for test in self:
+ if result.shouldStop:
+ break
+ test(result)
+ return result
+
+ def __call__(self, *args, **kwds):
+ return self.run(*args, **kwds)
+
+ def debug(self):
+ """Run the tests without collecting errors in a TestResult"""
+ for test in self:
+ test.debug()