summaryrefslogtreecommitdiff
path: root/test/run-tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/run-tests.py')
-rwxr-xr-xtest/run-tests.py57
1 files changed, 32 insertions, 25 deletions
diff --git a/test/run-tests.py b/test/run-tests.py
index d0ca29eb..51eebc93 100755
--- a/test/run-tests.py
+++ b/test/run-tests.py
@@ -205,13 +205,21 @@ def SplitArgs(value):
return shlex.split(value)
+def FixPythonExecutable(args):
+ """Given an argument list beginning with a `*.py` file, return one with that
+ uses sys.executable as arg[0].
+ """
+ exe, rest = args[0], args[1:]
+ if os.path.splitext(exe)[1] == '.py':
+ return [sys.executable, os.path.join(REPO_ROOT_DIR, exe)] + rest
+ return args
+
+
class CommandTemplate(object):
def __init__(self, exe):
- self.exe = exe
- self.args = []
+ self.args = FixPythonExecutable(SplitArgs(exe))
self.verbose_args = []
- self.last_cmd = None
def AppendArgs(self, args):
self.args += SplitArgs(args)
@@ -222,26 +230,18 @@ class CommandTemplate(object):
self.verbose_args.append([])
self.verbose_args[level] += SplitArgs(level_args)
- def _GetExecutable(self):
- if os.path.splitext(self.exe)[1] == '.py':
- return [sys.executable, os.path.join(REPO_ROOT_DIR, self.exe)]
- else:
- return [self.exe]
-
def _Format(self, cmd, variables):
return [arg % variables for arg in cmd]
def GetCommand(self, variables, extra_args=None, verbose_level=0):
- args = self._GetExecutable()
+ args = self.args[:]
vl = 0
while vl < verbose_level and vl < len(self.verbose_args):
args += self.verbose_args[vl]
vl += 1
if extra_args:
args += extra_args
- args += self.args
args = self._Format(args, variables)
- self.last_cmd = args
return Command(args)
@@ -295,7 +295,7 @@ class Command(object):
finally:
KillProcess(False)
- return RunResult(stdout, stderr, returncode, duration)
+ return RunResult(self, stdout, stderr, returncode, duration)
def __str__(self):
return ' '.join(self.args)
@@ -303,7 +303,9 @@ class Command(object):
class RunResult(object):
- def __init__(self, stdout = '', stderr = '', returncode = 0, duration = 0):
+ def __init__(self, last_cmd=None, stdout='', stderr='', returncode=0,
+ duration=0):
+ self.last_cmd = last_cmd
self.stdout = stdout
self.stderr = stderr
self.returncode = returncode
@@ -314,16 +316,23 @@ class RunResult(object):
def Append(self, other):
assert isinstance(other, RunResult)
- self.stdout += other.stdout
- self.stderr += other.stderr
+
+ self.last_cmd = other.last_cmd
+
+ if other.stdout is not None:
+ self.stdout += other.stdout
+
+ if other.stderr is not None:
+ self.stderr += other.stderr
+
self.duration += other.duration
assert(self.returncode == 0)
self.returncode = other.returncode
def __repr__(self):
- return 'RunResult(%s, %s, %s, %s)' % (self.stdout, self.stderr,
- self.returncode, self.duration)
+ return 'RunResult(%s, %s, %s, %s, %s)' % (
+ self.last_cmd, self.stdout, self.stderr, self.returncode, self.duration)
class TestInfo(object):
@@ -338,7 +347,6 @@ class TestInfo(object):
self.tool = None
self.cmds = []
self.env = {}
- self.last_cmd = ''
self.expected_error = 0
self.slow = False
self.skip = False
@@ -589,9 +597,9 @@ class Status(object):
else:
sys.stderr.write('+ %s (%.3fs)\n' % (info.GetName(), duration))
- def Failed(self, info, error_msg):
+ def Failed(self, info, error_msg, result=None):
self.failed += 1
- self.failed_tests.append(info)
+ self.failed_tests.append((info, result))
if self.isatty:
self._Clear()
sys.stderr.write('- %s\n%s\n' % (info.GetName(), Indent(error_msg, 2)))
@@ -722,7 +730,7 @@ def HandleTestResult(status, info, result, rebase=False):
info.Diff(result.stdout, result.stderr)
status.Passed(info, result.duration)
except Error as e:
- status.Failed(info, str(e))
+ status.Failed(info, str(e), result)
#Source : http://stackoverflow.com/questions/3041986/python-command-line-yes-no-input
@@ -909,9 +917,8 @@ def main(args):
ret = 0
if status.failed:
sys.stderr.write('**** FAILED %s\n' % ('*' * (80 - 14)))
- for info in status.failed_tests:
- sys.stderr.write('- %s\n %s\n' % (info.GetName(),
- ' '.join(info.last_cmd)))
+ for info, result in status.failed_tests:
+ sys.stderr.write('- %s\n %s\n' % (info.GetName(), result.last_cmd))
ret = 1
return ret