diff options
Diffstat (limited to 'lib/testtools/testtools/testsuite.py')
-rw-r--r-- | lib/testtools/testtools/testsuite.py | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/lib/testtools/testtools/testsuite.py b/lib/testtools/testtools/testsuite.py index 26b193799b..fd802621e3 100644 --- a/lib/testtools/testtools/testsuite.py +++ b/lib/testtools/testtools/testsuite.py @@ -5,18 +5,31 @@ __metaclass__ = type __all__ = [ 'ConcurrentTestSuite', + 'iterate_tests', ] try: - import Queue + from Queue import Queue except ImportError: - import queue as Queue + from queue import Queue import threading import unittest import testtools +def iterate_tests(test_suite_or_case): + """Iterate through all of the test cases in 'test_suite_or_case'.""" + try: + suite = iter(test_suite_or_case) + except TypeError: + yield test_suite_or_case + else: + for test in suite: + for subtest in iterate_tests(test): + yield subtest + + class ConcurrentTestSuite(unittest.TestSuite): """A TestSuite whose run() calls out to a concurrency strategy.""" @@ -49,7 +62,7 @@ class ConcurrentTestSuite(unittest.TestSuite): tests = self.make_tests(self) try: threads = {} - queue = Queue.Queue() + queue = Queue() result_semaphore = threading.Semaphore(1) for test in tests: process_result = testtools.ThreadsafeForwardingResult(result, |