[testsuite] Change the calling order of setUp & tearDown in decorator

The FileDecoratorBase injects a new setUp & tearDown function. These new
functions would call the old setUp & tearDown in an inconvenient order: e.g. the
child class CopyFiles would at first call the user provided setUp and then copy
the files. This makes it impossible to perform some action on the file copy in
setUp.
=> This commit changes the call order, so that setUp & tearDown always "see" the
finished environment after file copies are in place and before any cleanup took
place.
v0.27.3
Dan Čermák 7 years ago
parent 39b7151b2e
commit 35e7037f86

@ -193,7 +193,6 @@ class FileDecoratorBase(object):
tearDown() functions of the type it is called on with custom ones.
The new setUp() function performs the following steps:
- call the old setUp()
- create a file list in the decorated class with the name stored in
FILE_LIST_NAME (defaults to _files)
- iterate over all files, performing:
@ -201,6 +200,7 @@ class FileDecoratorBase(object):
of the decorated class)
- call self.setUp_file_action(expanded file name)
- append the result to the file list in the decorated class
- call the old setUp()
The function self.setUp_file_action is provided by this class and
is intended to be overridden by child classes to provide some
@ -208,9 +208,9 @@ class FileDecoratorBase(object):
The new tearDown() function performs the following steps:
- call the old tearDown() function
- iterate over all files in the file list:
- call self.tearDown_file_action(filename)
- call the old tearDown() function
The function self.tearDown_file_action can be overridden by child
classes. The default version provided by this class simply deletes
@ -252,17 +252,17 @@ class FileDecoratorBase(object):
the constructor of the decorator, passes them to expand_variables
and then to setUp_file_action:
>>> M.setUp()
calling MockCase.setUp()
setUp_file_action with one_file
setUp_file_action with two_file
setUp_file_action with three_file
calling MockCase.setUp()
The tearDown() function works accordingly:
>>> M.tearDown()
calling MockCase.tearDown()
tearDown_file_action with One_file
tearDown_file_action with Two_file
tearDown_file_action with Three_file
calling MockCase.tearDown()
Please note the capitalized "file" names (this is due to
setUp_file_action returning f.capitalized()) and that the old
@ -321,7 +321,6 @@ class FileDecoratorBase(object):
"""
def setUp(other):
old_setUp(other)
if hasattr(other, self.FILE_LIST_NAME):
raise TypeError(
"{!s} already has an attribute with the name {!s} which "
@ -334,6 +333,7 @@ class FileDecoratorBase(object):
getattr(other, self.FILE_LIST_NAME).append(
self.setUp_file_action(expanded_fname)
)
old_setUp(other)
return setUp
def setUp_file_action(self, expanded_file_name):
@ -368,9 +368,9 @@ class FileDecoratorBase(object):
"""
def tearDown(other):
old_tearDown(other)
for f in getattr(other, self.FILE_LIST_NAME):
self.tearDown_file_action(f)
old_tearDown(other)
return tearDown
@ -436,7 +436,7 @@ class CopyFiles(FileDecoratorBase):
self._files and then calls the original tearDown method.
This function will also complain if it is called without arguments or
without paranthesis, which is valid decorator syntax but is obviously a bug
without parenthesis, which is valid decorator syntax but is obviously a bug
in this case as it can result in tests not being run without a warning.
"""

Loading…
Cancel
Save