return self.process.wait(*args, **kwargs)
class VcsSim(object):
+ logname = "simv.log"
+
def __init__(self, sim_cmd=None, debug=False):
if sim_cmd:
cmd = shlex.split(sim_cmd)
if debug:
cmd[0] = cmd[0] + "-debug"
cmd += ["+vcdplusfile=output/gdbserver.vpd"]
- logfile = open("simv.log", "w")
+ logfile = open(self.logname, "w")
logfile.write("+ %s\n" % " ".join(cmd))
logfile.flush()
- listenfile = open("simv.log", "r")
+ listenfile = open(self.logname, "r")
listenfile.seek(0, 2)
self.process = subprocess.Popen(cmd, stdin=subprocess.PIPE,
stdout=logfile, stderr=logfile)
log_name = os.path.join(parsed.logs, "%s-%s-%s.log" %
(time.strftime("%Y%m%d-%H%M%S"), type(target).__name__, name))
log_fd = open(log_name, 'w')
- print "Running", name, "...",
+ print "Running %s > %s ..." % (name, log_name),
sys.stdout.flush()
log_fd.write("Test: %s\n" % name)
log_fd.write("Target: %s\n" % type(target).__name__)
sys.stdout = real_stdout
log_fd.write("Time elapsed: %.2fs\n" % (time.time() - start))
print "%s in %.2fs" % (result, time.time() - start)
+ if result not in good_results and parsed.print_failures:
+ sys.stdout.write(open(log_name).read())
sys.stdout.flush()
- results.setdefault(result, []).append(name)
+ results.setdefault(result, []).append((name, log_name))
count += 1
if result not in good_results and parsed.fail_fast:
break
print "%d tests returned %s" % (len(value), key)
if key not in good_results:
result = 1
- for test in value:
- print " ", test
+ for name, log_name in value:
+ print " %s > %s" % (name, log_name)
return result
def add_test_run_options(parser):
-
parser.add_argument("--logs", default="logs",
help="Store logs in the specified directory.")
parser.add_argument("--fail-fast", "-f", action="store_true",
help="Exit as soon as any test fails.")
+ parser.add_argument("--print-failures", action="store_true",
+ help="When a test fails, print the log file to stdout.")
parser.add_argument("test", nargs='*',
help="Run only tests that are named here.")
parser.add_argument("--gdb",