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

login
register
mail settings
Submitter Gregory Szorc
Date May 2, 2014, 6:37 p.m.
Message ID <3029253df56a97f5622b.1399055865@vm-ubuntu-main.gateway.sonic.net>
Download mbox | patch
Permalink /patch/4526/
State Accepted
Commit a7c677e2f6aef9338a240980a57cee0d149f67c4
Headers show

Comments

Gregory Szorc - May 2, 2014, 6:37 p.m.
# HG changeset patch
# User Gregory Szorc <gregory.szorc@gmail.com>
# Date 1397965268 25200
#      Sat Apr 19 20:41:08 2014 -0700
# Branch stable
# Node ID 3029253df56a97f5622b6383285182133e592994
# Parent  19a7cd2c17eea63d5ab3b1946aecdd2691222506
run-tests: move fail() into Test

The code was changed slightly as part of the migration to make use of
appropriate variables and modern Python conventions.

Patch

diff --git a/tests/run-tests.py b/tests/run-tests.py
--- a/tests/run-tests.py
+++ b/tests/run-tests.py
@@ -671,16 +671,37 @@  class Test(object):
             if k.startswith('HG_'):
                 del env[k]
 
         return env
 
     def success(self):
         return '.', self._test, ''
 
+    def fail(self, msg, ret):
+        warned = ret is False
+        if not self._options.nodiff:
+            log("\n%s: %s %s" % (warned and 'Warning' or 'ERROR', self._test,
+                                 msg))
+        if (not ret and self._options.interactive and
+            os.path.exists(self._errpath)):
+            iolock.acquire()
+            print 'Accept this change? [n] ',
+            answer = sys.stdin.readline().strip()
+            iolock.release()
+            if answer.lower() in ('y', 'yes').split():
+                if self._test.endswith('.t'):
+                    rename(self._errpath, self._testpath)
+                else:
+                    rename(self._errpath, '%s.out' % self._testpath)
+
+                return '.', self._test, ''
+
+        return warned and '~' or '!', self._test, msg
+
 class TestResult(object):
     """Holds the result of a test execution."""
 
     def __init__(self):
         self.ret = None
         self.out = None
         self.duration = None
         self.exception = None
@@ -1027,34 +1048,16 @@  def run(cmd, wd, options, replacements, 
 def runone(options, test, count):
     '''returns a result element: (code, test, msg)'''
 
     def skip(msg):
         if options.verbose:
             log("\nSkipping %s: %s" % (testpath, msg))
         return 's', test, msg
 
-    def fail(msg, ret):
-        warned = ret is False
-        if not options.nodiff:
-            log("\n%s: %s %s" % (warned and 'Warning' or 'ERROR', test, msg))
-        if (not ret and options.interactive
-            and os.path.exists(testpath + ".err")):
-            iolock.acquire()
-            print "Accept this change? [n] ",
-            answer = sys.stdin.readline().strip()
-            iolock.release()
-            if answer.lower() in "y yes".split():
-                if test.endswith(".t"):
-                    rename(testpath + ".err", testpath)
-                else:
-                    rename(testpath + ".err", testpath + ".out")
-                return '.', test, ''
-        return warned and '~' or '!', test, msg
-
     def ignore(msg):
         return 'i', test, msg
 
     def describe(ret):
         if ret < 0:
             return 'killed by signal %d' % -ret
         return 'returned error code %d' % ret
 
@@ -1094,17 +1097,17 @@  def runone(options, test, count):
 
     vlog("# Test", test)
 
     t = runner(test, testpath, options, count, ref, err)
     res = TestResult()
     t.run(res)
 
     if res.exception:
-        return fail('Exception during execution: %s' % res.exception, 255)
+        return t.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
@@ -1121,40 +1124,40 @@  def runone(options, test, count):
         if out is None:                 # debug mode: nothing to parse
             missing = ['unknown']
             failed = None
         else:
             missing, failed = parsehghaveoutput(out)
         if not missing:
             missing = ['irrelevant']
         if failed:
-            result = fail("hghave failed checking for %s" % failed[-1], ret)
+            result = t.fail("hghave failed checking for %s" % failed[-1], ret)
             skipped = False
         else:
             result = skip(missing[-1])
     elif ret == 'timeout':
-        result = fail("timed out", ret)
+        result = t.fail("timed out", ret)
     elif out != refout:
         info = {}
         if not options.nodiff:
             iolock.acquire()
             if options.view:
                 os.system("%s %s %s" % (options.view, ref, err))
             else:
                 info = showdiff(refout, out, ref, err)
             iolock.release()
         msg = ""
         if info.get('servefail'): msg += "serve failed and "
         if ret:
             msg += "output changed and " + describe(ret)
         else:
             msg += "output changed"
-        result = fail(msg, ret)
+        result = t.fail(msg, ret)
     elif ret:
-        result = fail(describe(ret), ret)
+        result = t.fail(describe(ret), ret)
     else:
         result = t.success()
 
     if not options.verbose:
         iolock.acquire()
         sys.stdout.write(result[0])
         sys.stdout.flush()
         iolock.release()