Commit 978e1351 authored by Kevin Christopher Henry's avatar Kevin Christopher Henry Committed by Tim Graham
Browse files

Fixed #21122 -- Improved clean up of test temp directory on Windows

- Fixed test that didn't close the files it opened
- Caught and handled exception when temp directory cannot be removed
parent 5381317f
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -174,3 +174,6 @@ class FileMoveSafeTests(unittest.TestCase):

        # 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)
+17 −7
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ import sys
import tempfile
import warnings


def upath(path):
    """
    Separate version of django.utils._os.upath. The django.utils version isn't
@@ -181,17 +182,24 @@ def setup(verbosity, test_labels):

    return state


def teardown(state):
    from django.conf import settings

    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)
@@ -280,6 +288,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)

@@ -315,6 +324,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 ...]"