Show More
@@ -1291,6 +1291,7 b' class TestSuite(unittest.TestSuite):' | |||||
1291 |
|
1291 | |||
1292 | def __init__(self, testdir, jobs=1, whitelist=None, blacklist=None, |
|
1292 | def __init__(self, testdir, jobs=1, whitelist=None, blacklist=None, | |
1293 | retest=False, keywords=None, loop=False, runs_per_test=1, |
|
1293 | retest=False, keywords=None, loop=False, runs_per_test=1, | |
|
1294 | loadtest=None, | |||
1294 | *args, **kwargs): |
|
1295 | *args, **kwargs): | |
1295 | """Create a new instance that can run tests with a configuration. |
|
1296 | """Create a new instance that can run tests with a configuration. | |
1296 |
|
1297 | |||
@@ -1326,13 +1327,20 b' class TestSuite(unittest.TestSuite):' | |||||
1326 | self._keywords = keywords |
|
1327 | self._keywords = keywords | |
1327 | self._loop = loop |
|
1328 | self._loop = loop | |
1328 | self._runs_per_test = runs_per_test |
|
1329 | self._runs_per_test = runs_per_test | |
|
1330 | self._loadtest = loadtest | |||
1329 |
|
1331 | |||
1330 | def run(self, result): |
|
1332 | def run(self, result): | |
1331 | # We have a number of filters that need to be applied. We do this |
|
1333 | # We have a number of filters that need to be applied. We do this | |
1332 | # here instead of inside Test because it makes the running logic for |
|
1334 | # here instead of inside Test because it makes the running logic for | |
1333 | # Test simpler. |
|
1335 | # Test simpler. | |
1334 | tests = [] |
|
1336 | tests = [] | |
|
1337 | num_tests = [0] | |||
1335 | for test in self._tests: |
|
1338 | for test in self._tests: | |
|
1339 | def get(): | |||
|
1340 | num_tests[0] += 1 | |||
|
1341 | if getattr(test, 'should_reload', False): | |||
|
1342 | return self._loadtest(test.name, num_tests[0]) | |||
|
1343 | return test | |||
1336 | if not os.path.exists(test.path): |
|
1344 | if not os.path.exists(test.path): | |
1337 | result.addSkip(test, "Doesn't exist") |
|
1345 | result.addSkip(test, "Doesn't exist") | |
1338 | continue |
|
1346 | continue | |
@@ -1360,7 +1368,7 b' class TestSuite(unittest.TestSuite):' | |||||
1360 | if ignored: |
|
1368 | if ignored: | |
1361 | continue |
|
1369 | continue | |
1362 | for _ in xrange(self._runs_per_test): |
|
1370 | for _ in xrange(self._runs_per_test): | |
1363 |
tests.append( |
|
1371 | tests.append(get()) | |
1364 |
|
1372 | |||
1365 | runtests = list(tests) |
|
1373 | runtests = list(tests) | |
1366 | done = queue.Queue() |
|
1374 | done = queue.Queue() | |
@@ -1389,7 +1397,12 b' class TestSuite(unittest.TestSuite):' | |||||
1389 | if tests and not running == self._jobs: |
|
1397 | if tests and not running == self._jobs: | |
1390 | test = tests.pop(0) |
|
1398 | test = tests.pop(0) | |
1391 | if self._loop: |
|
1399 | if self._loop: | |
1392 | tests.append(test) |
|
1400 | if getattr(test, 'should_reload', False): | |
|
1401 | num_tests[0] += 1 | |||
|
1402 | tests.append( | |||
|
1403 | self._loadtest(test.name, num_tests[0])) | |||
|
1404 | else: | |||
|
1405 | tests.append(test) | |||
1393 | t = threading.Thread(target=job, name=test.name, |
|
1406 | t = threading.Thread(target=job, name=test.name, | |
1394 | args=(test, result)) |
|
1407 | args=(test, result)) | |
1395 | t.start() |
|
1408 | t.start() | |
@@ -1733,7 +1746,7 b' class TestRunner(object):' | |||||
1733 | keywords=self.options.keywords, |
|
1746 | keywords=self.options.keywords, | |
1734 | loop=self.options.loop, |
|
1747 | loop=self.options.loop, | |
1735 | runs_per_test=self.options.runs_per_test, |
|
1748 | runs_per_test=self.options.runs_per_test, | |
1736 | tests=tests) |
|
1749 | tests=tests, loadtest=self._gettest) | |
1737 | verbosity = 1 |
|
1750 | verbosity = 1 | |
1738 | if self.options.verbose: |
|
1751 | if self.options.verbose: | |
1739 | verbosity = 2 |
|
1752 | verbosity = 2 | |
@@ -1773,14 +1786,16 b' class TestRunner(object):' | |||||
1773 | refpath = os.path.join(self._testdir, test) |
|
1786 | refpath = os.path.join(self._testdir, test) | |
1774 | tmpdir = os.path.join(self._hgtmp, 'child%d' % count) |
|
1787 | tmpdir = os.path.join(self._hgtmp, 'child%d' % count) | |
1775 |
|
1788 | |||
1776 |
|
|
1789 | t = testcls(refpath, tmpdir, | |
1777 |
|
|
1790 | keeptmpdir=self.options.keep_tmpdir, | |
1778 |
|
|
1791 | debug=self.options.debug, | |
1779 |
|
|
1792 | timeout=self.options.timeout, | |
1780 |
|
|
1793 | startport=self.options.port + count * 3, | |
1781 |
|
|
1794 | extraconfigopts=self.options.extra_config_opt, | |
1782 |
|
|
1795 | py3kwarnings=self.options.py3k_warnings, | |
1783 |
|
|
1796 | shell=self.options.shell) | |
|
1797 | t.should_reload = True | |||
|
1798 | return t | |||
1784 |
|
1799 | |||
1785 | def _cleanup(self): |
|
1800 | def _cleanup(self): | |
1786 | """Clean up state from this test invocation.""" |
|
1801 | """Clean up state from this test invocation.""" |
General Comments 0
You need to be logged in to leave comments.
Login now