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.
This commit is contained in:
parent
f486a15f66
commit
af28746648
@ -212,7 +212,7 @@ class ExpectPattern:
|
|||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
|
|
||||||
class Result:
|
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._err = err
|
||||||
self._before = before
|
self._before = before
|
||||||
self._after = after
|
self._after = after
|
||||||
@ -225,6 +225,9 @@ class Result:
|
|||||||
self._checked_files = set()
|
self._checked_files = set()
|
||||||
self._nerrors = 0
|
self._nerrors = 0
|
||||||
|
|
||||||
|
self.tmpdir = tmpdir
|
||||||
|
self.test_class_name = test_class_name
|
||||||
|
|
||||||
def __enter__(self, *args):
|
def __enter__(self, *args):
|
||||||
return self
|
return self
|
||||||
|
|
||||||
@ -241,6 +244,7 @@ class Result:
|
|||||||
if not self._checked_stderr: self.stderr_equal([])
|
if not self._checked_stderr: self.stderr_equal([])
|
||||||
|
|
||||||
if self._nerrors > 0:
|
if self._nerrors > 0:
|
||||||
|
self.tmpdir.preserve(self.test_class_name)
|
||||||
raise AssertFailed("...")
|
raise AssertFailed("...")
|
||||||
|
|
||||||
def _error(self, name, actual, expect):
|
def _error(self, name, actual, expect):
|
||||||
@ -420,7 +424,7 @@ class TestCase:
|
|||||||
|
|
||||||
return Result(err, before, after,
|
return Result(err, before, after,
|
||||||
File(stdout_log), File(stderr_log),
|
File(stdout_log), File(stderr_log),
|
||||||
tmpdir)
|
tmpdir, type(self).__name__)
|
||||||
|
|
||||||
def _wait_for_new_second(self):
|
def _wait_for_new_second(self):
|
||||||
newest = self._newest_file_time()
|
newest = self._newest_file_time()
|
||||||
@ -518,9 +522,11 @@ class FsSnapshot:
|
|||||||
class Tmpdir:
|
class Tmpdir:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.top = os.path.abspath("tmp-cmdtest-python/work")
|
self.top = os.path.abspath("tmp-cmdtest-python/work")
|
||||||
|
self.top_save = self.top + "-save"
|
||||||
self.logdir = os.path.dirname(self.top)
|
self.logdir = os.path.dirname(self.top)
|
||||||
self.environ_path = os.environ['PATH']
|
self.environ_path = os.environ['PATH']
|
||||||
self.old_cwds = []
|
self.old_cwds = []
|
||||||
|
self.remove_all_preserve()
|
||||||
|
|
||||||
def stdout_log(self):
|
def stdout_log(self):
|
||||||
return os.path.join(self.logdir, "tmp.stdout")
|
return os.path.join(self.logdir, "tmp.stdout")
|
||||||
@ -539,6 +545,13 @@ class Tmpdir:
|
|||||||
shutil.rmtree(self.top)
|
shutil.rmtree(self.top)
|
||||||
os.makedirs(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):
|
def __enter__(self):
|
||||||
self.old_cwds.append(os.getcwd())
|
self.old_cwds.append(os.getcwd())
|
||||||
os.chdir(self.top)
|
os.chdir(self.top)
|
||||||
@ -627,9 +640,9 @@ def cmdtest_in_dir(path):
|
|||||||
|
|
||||||
def test_files(py_files, selected_methods = set()):
|
def test_files(py_files, selected_methods = set()):
|
||||||
statistics = Statistics()
|
statistics = Statistics()
|
||||||
|
tmpdir = Tmpdir()
|
||||||
for py_file in py_files:
|
for py_file in py_files:
|
||||||
tfile = Tfile(py_file)
|
tfile = Tfile(py_file)
|
||||||
tmpdir = Tmpdir()
|
|
||||||
for tclass in tfile.tclasses():
|
for tclass in tfile.tclasses():
|
||||||
statistics.classes += 1
|
statistics.classes += 1
|
||||||
progress(tclass.name())
|
progress(tclass.name())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user