summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xtest/pacman/pactest.py41
1 files changed, 40 insertions, 1 deletions
diff --git a/test/pacman/pactest.py b/test/pacman/pactest.py
index db61233d..b5f6d4d7 100755
--- a/test/pacman/pactest.py
+++ b/test/pacman/pactest.py
@@ -23,6 +23,8 @@ import os
import shutil
import sys
import tempfile
+import glob
+import subprocess
import pmenv
import tap
@@ -31,6 +33,30 @@ import util
__author__ = "Aurelien FORET"
__version__ = "0.4"
+# writer to send output to multiple destinations simultaneously
+class MultiWriter():
+ def __init__(self, *outputs):
+ self.outputs = outputs
+
+ def write(self, message):
+ for op in self.outputs:
+ op.write(message)
+
+# duplicate stdout/stderr to a temporary file
+class OutputSaver():
+ def __init__(self):
+ self.save_file = tempfile.NamedTemporaryFile(prefix='pactest-output-')
+
+ def __enter__(self):
+ sys.stdout = MultiWriter(sys.stdout, self.save_file)
+ sys.stderr = MultiWriter(sys.stderr, self.save_file)
+ return self.save_file
+
+ def __exit__(self, type, value, traceback):
+ sys.stdout = sys.__stdout__
+ sys.stderr = sys.__stderr__
+ self.save_file.flush()
+
def create_parser():
usage = "usage: %prog [options] <path/to/testfile.py>..."
description = "Runs automated tests on the pacman binary. Tests are " \
@@ -71,6 +97,12 @@ def create_parser():
parser.add_option("--ldconfig", type = "string",
dest = "ldconfig", default = "/sbin/ldconfig",
help = "specify path to ldconfig")
+ parser.add_option("--review", action = "store_true",
+ dest = "review", default = False,
+ help = "review test files, test output, and saved logs")
+ parser.add_option("--editor", action = "store",
+ dest = "editor", default = os.getenv('EDITOR', 'vim'),
+ help = "editor to use for viewing files")
return parser
@@ -114,7 +146,14 @@ if __name__ == "__main__":
sys.exit(2)
# run tests
- env.run()
+ if not opts.review:
+ env.run()
+ else:
+ # save output in tempfile for review
+ with OutputSaver() as save_file:
+ env.run()
+ files = [save_file.name] + args + glob.glob(root_path + "/var/log/*")
+ subprocess.call([opts.editor] + files)
if not opts.keeproot:
shutil.rmtree(root_path)