# HG changeset patch # User Gregory Szorc # Date 1397977946 25200 # Node ID ff4ce72cc8d6407ca0298aa1091bd4bc98b0dbba # Parent 0fdf92500012f63f2e9ab23219395efaf6261353 run-tests: move scheduletests() into TestRunner diff -r 0fdf92500012 -r ff4ce72cc8d6 tests/run-tests.py --- a/tests/run-tests.py Sun Apr 20 00:10:06 2014 -0700 +++ b/tests/run-tests.py Sun Apr 20 00:12:26 2014 -0700 @@ -995,45 +995,6 @@ iolock = threading.Lock() -def scheduletests(runner, tests): - jobs = runner.options.jobs - done = queue.Queue() - running = 0 - count = 0 - - def job(test, count): - try: - t = runner.gettest(test, count) - done.put(t.run()) - t.cleanup() - except KeyboardInterrupt: - pass - except: # re-raises - done.put(('!', test, 'run-test raised an error, see traceback')) - raise - - try: - while tests or running: - if not done.empty() or running == jobs or not tests: - try: - code, test, msg = done.get(True, 1) - runner.results[code].append((test, msg)) - if runner.options.first and code not in '.si': - break - except queue.Empty: - continue - running -= 1 - if tests and not running == jobs: - test = tests.pop(0) - if runner.options.loop: - tests.append(test) - t = threading.Thread(target=job, name=test, args=(test, count)) - t.start() - running += 1 - count += 1 - except KeyboardInterrupt: - runner.abort[0] = True - class TestRunner(object): """Holds context for executing tests. @@ -1083,7 +1044,7 @@ print "running all tests" tests = orig - scheduletests(self, tests) + self._executetests(tests) failed = len(self.results['!']) warned = len(self.results['~']) @@ -1311,6 +1272,46 @@ os.mkdir(adir) covrun('-i', '-a', '"--directory=%s"' % adir, '"--omit=%s"' % omit) + def _executetests(self, tests): + jobs = self.options.jobs + done = queue.Queue() + running = 0 + count = 0 + + def job(test, count): + try: + t = self.gettest(test, count) + done.put(t.run()) + t.cleanup() + except KeyboardInterrupt: + pass + except: # re-raises + done.put(('!', test, 'run-test raised an error, see traceback')) + raise + + try: + while tests or running: + if not done.empty() or running == jobs or not tests: + try: + code, test, msg = done.get(True, 1) + self.results[code].append((test, msg)) + if self.options.first and code not in '.si': + break + except queue.Empty: + continue + running -= 1 + if tests and not running == jobs: + test = tests.pop(0) + if self.options.loop: + tests.append(test) + t = threading.Thread(target=job, name=test, + args=(test, count)) + t.start() + running += 1 + count += 1 + except KeyboardInterrupt: + self.abort[0] = True + def main(args, parser=None): runner = TestRunner()