tests/run-tests.py
changeset 832 1f1db3dc9ddf
parent 829 7d66d78e6179
child 833 a9c6ada32647
--- a/tests/run-tests.py	Sat Oct 09 12:26:56 2010 +0100
+++ b/tests/run-tests.py	Sat Oct 09 15:47:19 2010 +0100
@@ -443,25 +443,25 @@
 def alarmed(signum, frame):
     raise Timeout
 
-def pytest(test, options):
+def pytest(test, options, replacements):
     py3kswitch = options.py3k_warnings and ' -3' or ''
     cmd = '%s%s "%s"' % (PYTHON, py3kswitch, test)
     vlog("# Running", cmd)
-    return run(cmd, options)
+    return run(cmd, options, replacements)
 
-def shtest(test, options):
+def shtest(test, options, replacements):
     cmd = '"%s"' % test
     vlog("# Running", cmd)
-    return run(cmd, options)
+    return run(cmd, options, replacements)
 
-def battest(test, options):
+def battest(test, options, replacements):
     # To reliably get the error code from batch files on WinXP,
     # the "cmd /c call" prefix is needed. Grrr
     cmd = 'cmd /c call "%s"' % testpath
     vlog("# Running", cmd)
-    return run(cmd, options)
+    return run(cmd, options, replacements)
 
-def tsttest(test, options):
+def tsttest(test, options, replacements):
     t = open(test)
     out = []
     script = []
@@ -500,7 +500,7 @@
 
         cmd = '/bin/sh "%s"' % name
         vlog("# Running", cmd)
-        exitcode, output = run(cmd, options)
+        exitcode, output = run(cmd, options, replacements)
         # do not merge output if skipped, return hghave message instead
         if exitcode == SKIPPED_STATUS:
             return exitcode, output
@@ -565,7 +565,7 @@
 
     return exitcode, postout
 
-def run(cmd, options):
+def run(cmd, options, replacements):
     """Run command in a sub-process, capturing the output (stdout and stderr).
     Return a tuple (exitcode, output).  output is None in debug mode."""
     # TODO: Use subprocess.Popen if we're running on Python 2.4
@@ -608,6 +608,8 @@
             cleanup()
             raise
 
+    for s, r in replacements:
+        output = output.replace(s, r)
     return ret, splitnewlines(output)
 
 def runone(options, test, skips, fails):
@@ -682,14 +684,19 @@
         runner = shtest
 
     # Make a tmp subdirectory to work in
-    tmpd = os.path.join(HGTMP, test)
-    os.mkdir(tmpd)
-    os.chdir(tmpd)
+    testtmp = os.environ["TESTTMP"] = os.path.join(HGTMP, test)
+    os.mkdir(testtmp)
+    os.chdir(testtmp)
 
     if options.timeout > 0:
         signal.alarm(options.timeout)
 
-    ret, out = runner(testpath, options)
+    ret, out = runner(testpath, options, [
+        (testtmp, '$TESTTMP'),
+        (':%s' % options.port, ':$HGPORT'),
+        (':%s' % (options.port + 1), ':$HGPORT1'),
+        (':%s' % (options.port + 2), ':$HGPORT2'),
+        ])
     vlog("# Ret was:", ret)
 
     if options.timeout > 0:
@@ -755,7 +762,7 @@
 
     os.chdir(TESTDIR)
     if not options.keep_tmpdir:
-        shutil.rmtree(tmpd, True)
+        shutil.rmtree(testtmp, True)
     if skipped:
         return None
     return ret == 0