Patchwork [004,of,179,tests-refactor] run-tests: move createenv() into Test

login
register
mail settings
Submitter Gregory Szorc
Date May 2, 2014, 6:37 p.m.
Message ID <71520e4115ab64e38cc8.1399055841@vm-ubuntu-main.gateway.sonic.net>
Download mbox | patch
Permalink /patch/4499/
State Accepted
Commit 7861de61583bce2529e8ac0ae44a7017ab55386e
Headers show

Comments

Gregory Szorc - May 2, 2014, 6:37 p.m.
# HG changeset patch
# User Gregory Szorc <gregory.szorc@gmail.com>
# Date 1397938025 25200
#      Sat Apr 19 13:07:05 2014 -0700
# Branch stable
# Node ID 71520e4115ab64e38cc872ec04044f37c747ffcf
# Parent  b5da54671ef0204c48ce54715aa547cb1766fb7d
run-tests: move createenv() into Test

createenv() is consulting lots of test-specific variables. It makes
sense to attach it to the Test class.
Pierre-Yves David - May 7, 2014, 8:39 p.m.
On 05/02/2014 11:37 AM, Gregory Szorc wrote:
> # HG changeset patch
> # User Gregory Szorc <gregory.szorc@gmail.com>
> # Date 1397938025 25200
> #      Sat Apr 19 13:07:05 2014 -0700
> # Branch stable
> # Node ID 71520e4115ab64e38cc872ec04044f37c747ffcf
> # Parent  b5da54671ef0204c48ce54715aa547cb1766fb7d
> run-tests: move createenv() into Test
>
> createenv() is consulting lots of test-specific variables. It makes
> sense to attach it to the Test class.
>

[…]

> @@ -606,16 +572,51 @@ class Test(object):
>                   (''.join(c.isalpha() and '[%s%s]' % (c.lower(), c.upper()) or
>                       c in '/\\' and r'[/\\]' or c.isdigit() and c or '\\' + c
>                       for c in self.testtmp), '$TESTTMP'))
>           else:
>               r.append((re.escape(self.testtmp), '$TESTTMP'))
>
>           return r, port
>
> +    def getenv(self, port):


This function wants a docstring too.

is methods needs a docstring.

Patch

diff --git a/tests/run-tests.py b/tests/run-tests.py
--- a/tests/run-tests.py
+++ b/tests/run-tests.py
@@ -357,51 +357,16 @@  def createhgrc(path, options):
     if options.extra_config_opt:
         for opt in options.extra_config_opt:
             section, key = opt.split('.', 1)
             assert '=' in key, ('extra config opt %s must '
                                 'have an = for assignment' % opt)
             hgrc.write('[%s]\n%s\n' % (section, key))
     hgrc.close()
 
-def createenv(options, testtmp, threadtmp, port):
-    env = os.environ.copy()
-    env['TESTTMP'] = testtmp
-    env['HOME'] = testtmp
-    env["HGPORT"] = str(port)
-    env["HGPORT1"] = str(port + 1)
-    env["HGPORT2"] = str(port + 2)
-    env["HGRCPATH"] = os.path.join(threadtmp, '.hgrc')
-    env["DAEMON_PIDS"] = os.path.join(threadtmp, 'daemon.pids')
-    env["HGEDITOR"] = sys.executable + ' -c "import sys; sys.exit(0)"'
-    env["HGMERGE"] = "internal:merge"
-    env["HGUSER"]   = "test"
-    env["HGENCODING"] = "ascii"
-    env["HGENCODINGMODE"] = "strict"
-
-    # Reset some environment variables to well-known values so that
-    # the tests produce repeatable output.
-    env['LANG'] = env['LC_ALL'] = env['LANGUAGE'] = 'C'
-    env['TZ'] = 'GMT'
-    env["EMAIL"] = "Foo Bar <foo.bar@example.com>"
-    env['COLUMNS'] = '80'
-    env['TERM'] = 'xterm'
-
-    for k in ('HG HGPROF CDPATH GREP_OPTIONS http_proxy no_proxy ' +
-              'NO_PROXY').split():
-        if k in env:
-            del env[k]
-
-    # unset env related to hooks
-    for k in env.keys():
-        if k.startswith('HG_'):
-            del env[k]
-
-    return env
-
 def checktools():
     # Before we go any further, check for pre-requisite tools
     # stuff from coreutils (cat, rm, etc) are not tested
     for p in requiredtools:
         if os.name == 'nt' and not p.endswith('.exe'):
             p += '.exe'
         found = findprogram(p)
         if found:
@@ -578,16 +543,17 @@  def outputcoverage(options):
         covrun('-i', '-a', '"--directory=%s"' % adir, '"--omit=%s"' % omit)
 
 class Test(object):
     """Encapsulates a single, runnable test."""
 
     def __init__(self, path, options, threadtmp):
         self._path = path
         self._options = options
+        self._threadtmp = threadtmp
 
         self.testtmp = os.path.join(threadtmp, os.path.basename(path))
         os.mkdir(self.testtmp)
 
     def run(self, replacements, env):
         return self._run(replacements, env)
 
     def _run(self, replacements, env):
@@ -606,16 +572,51 @@  class Test(object):
                 (''.join(c.isalpha() and '[%s%s]' % (c.lower(), c.upper()) or
                     c in '/\\' and r'[/\\]' or c.isdigit() and c or '\\' + c
                     for c in self.testtmp), '$TESTTMP'))
         else:
             r.append((re.escape(self.testtmp), '$TESTTMP'))
 
         return r, port
 
+    def getenv(self, port):
+        env = os.environ.copy()
+        env['TESTTMP'] = self.testtmp
+        env['HOME'] = self.testtmp
+        env["HGPORT"] = str(port)
+        env["HGPORT1"] = str(port + 1)
+        env["HGPORT2"] = str(port + 2)
+        env["HGRCPATH"] = os.path.join(self._threadtmp, '.hgrc')
+        env["DAEMON_PIDS"] = os.path.join(self._threadtmp, 'daemon.pids')
+        env["HGEDITOR"] = sys.executable + ' -c "import sys; sys.exit(0)"'
+        env["HGMERGE"] = "internal:merge"
+        env["HGUSER"]   = "test"
+        env["HGENCODING"] = "ascii"
+        env["HGENCODINGMODE"] = "strict"
+
+        # Reset some environment variables to well-known values so that
+        # the tests produce repeatable output.
+        env['LANG'] = env['LC_ALL'] = env['LANGUAGE'] = 'C'
+        env['TZ'] = 'GMT'
+        env["EMAIL"] = "Foo Bar <foo.bar@example.com>"
+        env['COLUMNS'] = '80'
+        env['TERM'] = 'xterm'
+
+        for k in ('HG HGPROF CDPATH GREP_OPTIONS http_proxy no_proxy ' +
+                  'NO_PROXY').split():
+            if k in env:
+                del env[k]
+
+        # unset env related to hooks
+        for k in env.keys():
+            if k.startswith('HG_'):
+                del env[k]
+
+        return env
+
 def pytest(test, wd, options, replacements, env):
     py3kswitch = options.py3k_warnings and ' -3' or ''
     cmd = '%s%s "%s"' % (PYTHON, py3kswitch, test)
     vlog("# Running", cmd)
     if os.name == 'nt':
         replacements.append((r'\r\n', '\n'))
     return run(cmd, wd, options, replacements, env)
 
@@ -1011,17 +1012,17 @@  def runone(options, test, count):
         os.remove(err)       # Remove any previous output files
 
     # Make a tmp subdirectory to work in
     threadtmp = os.path.join(HGTMP, "child%d" % count)
     os.mkdir(threadtmp)
 
     t = runner(testpath, options, threadtmp)
     replacements, port = t.getreplacements(count)
-    env = createenv(options, t.testtmp, threadtmp, port)
+    env = t.getenv(port)
     createhgrc(env['HGRCPATH'], options)
 
     starttime = time.time()
     try:
         ret, out = t.run(replacements, env)
     except KeyboardInterrupt:
         endtime = time.time()
         log('INTERRUPTED: %s (after %d seconds)' % (test, endtime - starttime))