Mercurial > hg
changeset 21297:dd8e94601417
run-tests: move testtmp into Test class
This patch starts the process of moving test-specific variables into the
Test class. The ultimate goal is to be able to instantiate a Test with
minimal arguments and to call run() on it without too much thinking.
This will make it much easier to run tests from other contexts. It will
also enable things like running a test multiple times.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sat, 19 Apr 2014 12:54:09 -0700 |
parents | cd8776030833 |
children | ba4750352180 |
files | tests/run-tests.py |
diffstat | 1 files changed, 19 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/tests/run-tests.py Sat Apr 19 12:26:34 2014 -0700 +++ b/tests/run-tests.py Sat Apr 19 12:54:09 2014 -0700 @@ -582,14 +582,17 @@ class Test(object): """Encapsulates a single, runnable test.""" - def __init__(self, path, options): + def __init__(self, path, options, threadtmp): self._path = path self._options = options - def run(self, testtmp, replacements, env): - return self._run(testtmp, replacements, env) + self.testtmp = os.path.join(threadtmp, os.path.basename(path)) + os.mkdir(self.testtmp) - def _run(self, testtmp, replacements, env): + def run(self, replacements, env): + return self._run(replacements, env) + + def _run(self, replacements, env): raise NotImplemented('Subclasses must implement Test.run()') def pytest(test, wd, options, replacements, env): @@ -602,8 +605,9 @@ class PythonTest(Test): """A Python-based test.""" - def _run(self, testtmp, replacements, env): - return pytest(self._path, testtmp, self._options, replacements, env) + def _run(self, replacements, env): + return pytest(self._path, self.testtmp, self._options, replacements, + env) needescape = re.compile(r'[\x00-\x08\x0b-\x1f\x7f-\xff]').search escapesub = re.compile(r'[\x00-\x08\x0b-\x1f\\\x7f-\xff]').sub @@ -864,8 +868,9 @@ class TTest(Test): """A "t test" is a test backed by a .t file.""" - def _run(self, testtmp, replacements, env): - return tsttest(self._path, testtmp, self._options, replacements, env) + def _run(self, replacements, env): + return tsttest(self._path, self.testtmp, self._options, replacements, + env) wifexited = getattr(os, "WIFEXITED", lambda x: False) def run(cmd, wd, options, replacements, env): @@ -989,13 +994,11 @@ if os.path.exists(err): os.remove(err) # Remove any previous output files - t = runner(testpath, options) - # Make a tmp subdirectory to work in threadtmp = os.path.join(HGTMP, "child%d" % count) - testtmp = os.path.join(threadtmp, os.path.basename(test)) os.mkdir(threadtmp) - os.mkdir(testtmp) + + t = runner(testpath, options, threadtmp) port = options.port + count * 3 replacements = [ @@ -1009,16 +1012,16 @@ c in '/\\' and r'[/\\]' or c.isdigit() and c or '\\' + c - for c in testtmp), '$TESTTMP')) + for c in t.testtmp), '$TESTTMP')) else: - replacements.append((re.escape(testtmp), '$TESTTMP')) + replacements.append((re.escape(t.testtmp), '$TESTTMP')) - env = createenv(options, testtmp, threadtmp, port) + env = createenv(options, t.testtmp, threadtmp, port) createhgrc(env['HGRCPATH'], options) starttime = time.time() try: - ret, out = t.run(testtmp, replacements, env) + ret, out = t.run(replacements, env) except KeyboardInterrupt: endtime = time.time() log('INTERRUPTED: %s (after %d seconds)' % (test, endtime - starttime))