Skip to content

Commit

Permalink
[1.6.x] Fixed #21122 -- Improved clean up of test temp directory on W…
Browse files Browse the repository at this point in the history
…indows

- Fixed test that didn't close the files it opened
- Caught and handled exception when temp directory cannot be removed

Backport of 978e135 of master
  • Loading branch information
marfire authored and timgraham committed Oct 2, 2013
1 parent 06b149e commit 02c7dbd
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 7 deletions.
3 changes: 3 additions & 0 deletions tests/files/tests.py
Expand Up @@ -175,3 +175,6 @@ def test_file_move_overwrite(self):

# should allow it and continue on if allow_overwrite is True
self.assertIsNone(file_move_safe(self.file_a, self.file_b, allow_overwrite=True))

os.close(handle_a)
os.close(handle_b)
23 changes: 16 additions & 7 deletions tests/runtests.py
Expand Up @@ -146,8 +146,8 @@ def no_available_apps(self):
module_found_in_labels = True
else:
match = lambda label: (
module_label == label or # exact match
module_label.startswith(label + '.') # ancestor match
module_label == label or # exact match
module_label.startswith(label + '.') # ancestor match
)

module_found_in_labels = any(match(l) for l in test_labels_set)
Expand All @@ -162,17 +162,24 @@ def no_available_apps(self):

return state


def teardown(state):
from django.conf import settings
# Removing the temporary TEMP_DIR. Ensure we pass in unicode
# so that it will successfully remove temp trees containing
# non-ASCII filenames on Windows. (We're assuming the temp dir
# name itself does not contain non-ASCII characters.)
shutil.rmtree(six.text_type(TEMP_DIR))

try:
# Removing the temporary TEMP_DIR. Ensure we pass in unicode
# so that it will successfully remove temp trees containing
# non-ASCII filenames on Windows. (We're assuming the temp dir
# name itself does not contain non-ASCII characters.)
shutil.rmtree(six.text_type(TEMP_DIR))
except OSError:
print('Failed to remove temp directory: %s' % TEMP_DIR)

# Restore the old settings.
for key, value in state.items():
setattr(settings, key, value)


def django_tests(verbosity, interactive, failfast, test_labels):
from django.conf import settings
state = setup(verbosity, test_labels)
Expand Down Expand Up @@ -253,6 +260,7 @@ def bisect_tests(bisection_label, options, test_labels):
print("***** Source of error: %s" % test_labels[0])
teardown(state)


def paired_tests(paired_test, options, test_labels):
state = setup(int(options.verbosity), test_labels)

Expand Down Expand Up @@ -288,6 +296,7 @@ def paired_tests(paired_test, options, test_labels):
print('***** No problem pair found')
teardown(state)


if __name__ == "__main__":
from optparse import OptionParser
usage = "%prog [options] [module module module ...]"
Expand Down

0 comments on commit 02c7dbd

Please sign in to comment.