Patchwork [013,of,179,tests-refactor] run-tests: capture reference output in TestResult class

login
register
mail settings
Submitter Gregory Szorc
Date May 2, 2014, 6:37 p.m.
Message ID <020837217a5004ee9918.1399055850@vm-ubuntu-main.gateway.sonic.net>
Download mbox | patch
Permalink /patch/4508/
State Accepted
Commit 935ade2072534932ad37e70539e23d55ea62b937
Headers show

Comments

Gregory Szorc - May 2, 2014, 6:37 p.m.
# HG changeset patch
# User Gregory Szorc <gregory.szorc@gmail.com>
# Date 1397941786 25200
#      Sat Apr 19 14:09:46 2014 -0700
# Branch stable
# Node ID 020837217a5004ee99186e2e0002f8a7480a4b26
# Parent  eb3f807fc79740895e93eaa39ca1dee890a51173
run-tests: capture reference output in TestResult class

Patch

diff --git a/tests/run-tests.py b/tests/run-tests.py
--- a/tests/run-tests.py
+++ b/tests/run-tests.py
@@ -552,17 +552,17 @@  class Test(object):
         self.threadtmp = os.path.join(HGTMP, 'child%d' % count)
         os.mkdir(self.threadtmp)
 
         self._testtmp = os.path.join(self.threadtmp, os.path.basename(path))
         os.mkdir(self._testtmp)
 
         self._setreplacements(count)
 
-    def run(self, result):
+    def run(self, result, refpath):
         env = self._getenv()
         createhgrc(env['HGRCPATH'], self._options)
 
         starttime = time.time()
 
         def updateduration():
             result.duration = time.time() - starttime
 
@@ -575,16 +575,27 @@  class Test(object):
             updateduration()
             result.interrupted = True
         except Exception, e:
             updateduration()
             result.exception = e
 
         killdaemons(env['DAEMON_PIDS'])
 
+        # If we're not in --debug mode and reference output file exists,
+        # check test output against it.
+        if self._options.debug:
+            result.refout = None # to match "out is None"
+        elif os.path.exists(refpath):
+            f = open(refpath, 'r')
+            result.refout = f.read().splitlines(True)
+            f.close()
+        else:
+            result.refout = []
+
     def _run(self, replacements, env):
         raise NotImplemented('Subclasses must implement Test.run()')
 
     def _setreplacements(self, count):
         port = self._options.port + count * 3
         r = [
             (r':%s\b' % port, ':$HGPORT'),
             (r':%s\b' % (port + 1), ':$HGPORT1'),
@@ -641,16 +652,17 @@  class TestResult(object):
     """Holds the result of a test execution."""
 
     def __init__(self):
         self.ret = None
         self.out = None
         self.duration = None
         self.interrupted = False
         self.exception = None
+        self.refout = None
 
     @property
     def skipped(self):
         """Whether the test was skipped."""
         return self.ret == SKIPPED_STATUS
 
 def pytest(test, wd, options, replacements, env):
     py3kswitch = options.py3k_warnings and ' -3' or ''
@@ -1048,43 +1060,33 @@  def runone(options, test, count):
 
     vlog("# Test", test)
 
     if os.path.exists(err):
         os.remove(err)       # Remove any previous output files
 
     t = runner(testpath, options, count)
     res = TestResult()
-    t.run(res)
+    t.run(res, ref)
 
     if res.interrupted:
         log('INTERRUPTED: %s (after %d seconds)' % (test, res.duration))
         raise KeyboardInterrupt()
 
     if res.exception:
         return fail('Exception during execution: %s' % res.exception, 255)
 
     ret = res.ret
     out = res.out
 
     times.append((test, res.duration))
     vlog("# Ret was:", ret)
 
     skipped = res.skipped
-
-    # If we're not in --debug mode and reference output file exists,
-    # check test output against it.
-    if options.debug:
-        refout = None                   # to match "out is None"
-    elif os.path.exists(ref):
-        f = open(ref, "r")
-        refout = f.read().splitlines(True)
-        f.close()
-    else:
-        refout = []
+    refout = res.refout
 
     if (ret != 0 or out != refout) and not skipped and not options.debug:
         # Save errors to a file for diagnosis
         f = open(err, "wb")
         for line in out:
             f.write(line)
         f.close()