From af287466484c1a3d32685a710117c5b822aa8de5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kan=20Th=C3=B6rngren?= Date: Sat, 2 Jan 2016 20:14:27 -0800 Subject: [PATCH] Preserve files for failed tests. In the Python version, preserve the work directory in work-save/class_name to make it possible to examine it afterwards. Before running tests, remove the entire old work-save directory hierarchy to ensure we only leave those behind that actually are relevant. --- python/cmdtest.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/python/cmdtest.py b/python/cmdtest.py index 5d7d21c..59ceafc 100755 --- a/python/cmdtest.py +++ b/python/cmdtest.py @@ -212,7 +212,7 @@ class ExpectPattern: #---------------------------------------------------------------------- class Result: - def __init__(self, err, before, after, stdout, stderr, tmpdir): + def __init__(self, err, before, after, stdout, stderr, tmpdir, test_class_name): self._err = err self._before = before self._after = after @@ -225,6 +225,9 @@ class Result: self._checked_files = set() self._nerrors = 0 + self.tmpdir = tmpdir + self.test_class_name = test_class_name + def __enter__(self, *args): return self @@ -241,6 +244,7 @@ class Result: if not self._checked_stderr: self.stderr_equal([]) if self._nerrors > 0: + self.tmpdir.preserve(self.test_class_name) raise AssertFailed("...") def _error(self, name, actual, expect): @@ -420,7 +424,7 @@ class TestCase: return Result(err, before, after, File(stdout_log), File(stderr_log), - tmpdir) + tmpdir, type(self).__name__) def _wait_for_new_second(self): newest = self._newest_file_time() @@ -518,9 +522,11 @@ class FsSnapshot: class Tmpdir: def __init__(self): self.top = os.path.abspath("tmp-cmdtest-python/work") + self.top_save = self.top + "-save" self.logdir = os.path.dirname(self.top) self.environ_path = os.environ['PATH'] self.old_cwds = [] + self.remove_all_preserve() def stdout_log(self): return os.path.join(self.logdir, "tmp.stdout") @@ -539,6 +545,13 @@ class Tmpdir: shutil.rmtree(self.top) os.makedirs(self.top) + def remove_all_preserve(self): + if os.path.exists(self.top_save): + shutil.rmtree(self.top_save) + + def preserve(self, name): + shutil.move(self.top, os.path.join(self.top_save, name)) + def __enter__(self): self.old_cwds.append(os.getcwd()) os.chdir(self.top) @@ -627,9 +640,9 @@ def cmdtest_in_dir(path): def test_files(py_files, selected_methods = set()): statistics = Statistics() + tmpdir = Tmpdir() for py_file in py_files: tfile = Tfile(py_file) - tmpdir = Tmpdir() for tclass in tfile.tclasses(): statistics.classes += 1 progress(tclass.name())