mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Merged revisions 78136 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r78136 | ezio.melotti | 2010-02-10 23:40:33 +0200 (Wed, 10 Feb 2010) | 1 line #7712: add a temp_cwd context manager to test_support and use it in regrtest to run all the tests in a temporary directory, saving the original CWD in test_support.SAVEDCWD. Thanks to Florent Xicluna who helped with the patch. ........
This commit is contained in:
parent
a3211ee8d4
commit
184bdfb03a
4 changed files with 98 additions and 27 deletions
|
@ -21,8 +21,8 @@ __all__ = ["Error", "TestFailed", "ResourceDenied", "import_module",
|
|||
"verbose", "use_resources", "max_memuse", "record_original_stdout",
|
||||
"get_original_stdout", "unload", "unlink", "rmtree", "forget",
|
||||
"is_resource_enabled", "requires", "find_unused_port", "bind_port",
|
||||
"fcmp", "is_jython", "TESTFN", "HOST", "FUZZ", "findfile",
|
||||
"sortdict", "check_syntax_error", "open_urlresource",
|
||||
"fcmp", "is_jython", "TESTFN", "HOST", "FUZZ", "SAVEDCWD", "temp_cwd",
|
||||
"findfile", "sortdict", "check_syntax_error", "open_urlresource",
|
||||
"check_warnings", "CleanImport", "EnvironmentVarGuard",
|
||||
"TransientResource", "captured_output", "captured_stdout",
|
||||
"time_out", "socket_peer_reset", "ioerror_peer_reset",
|
||||
|
@ -338,7 +338,7 @@ else:
|
|||
|
||||
# Disambiguate TESTFN for parallel testing, while letting it remain a valid
|
||||
# module name.
|
||||
TESTFN = "{0}_{1}_tmp".format(TESTFN, os.getpid())
|
||||
TESTFN = "{}_{}_tmp".format(TESTFN, os.getpid())
|
||||
|
||||
# Assuming sys.getfilesystemencoding()!=sys.getdefaultencoding()
|
||||
# TESTFN_UNICODE is a filename that can be encoded using the
|
||||
|
@ -369,23 +369,37 @@ else:
|
|||
'Unicode filename tests may not be effective'
|
||||
% TESTFN_UNICODE_UNENCODEABLE)
|
||||
|
||||
# Make sure we can write to TESTFN, try in /tmp if we can't
|
||||
fp = None
|
||||
try:
|
||||
fp = open(TESTFN, 'w+')
|
||||
except IOError:
|
||||
TMP_TESTFN = os.path.join('/tmp', TESTFN)
|
||||
# Save the initial cwd
|
||||
SAVEDCWD = os.getcwd()
|
||||
|
||||
@contextlib.contextmanager
|
||||
def temp_cwd(name='tempcwd', quiet=False):
|
||||
"""
|
||||
Context manager that creates a temporary directory and set it as CWD.
|
||||
|
||||
The new CWD is created in the current directory and it's named *name*.
|
||||
If *quiet* is False (default) and it's not possible to create or change
|
||||
the CWD, an error is raised. If it's True, only a warning is raised
|
||||
and the original CWD is used.
|
||||
"""
|
||||
saved_dir = os.getcwd()
|
||||
is_temporary = False
|
||||
try:
|
||||
fp = open(TMP_TESTFN, 'w+')
|
||||
TESTFN = TMP_TESTFN
|
||||
del TMP_TESTFN
|
||||
except IOError:
|
||||
print(('WARNING: tests will fail, unable to write to: %s or %s' %
|
||||
(TESTFN, TMP_TESTFN)))
|
||||
if fp is not None:
|
||||
fp.close()
|
||||
unlink(TESTFN)
|
||||
del fp
|
||||
os.mkdir(name)
|
||||
os.chdir(name)
|
||||
is_temporary = True
|
||||
except OSError:
|
||||
if not quiet:
|
||||
raise
|
||||
warnings.warn('tests may fail, unable to change the CWD to ' + name,
|
||||
RuntimeWarning, stacklevel=3)
|
||||
try:
|
||||
yield os.getcwd()
|
||||
finally:
|
||||
os.chdir(saved_dir)
|
||||
if is_temporary:
|
||||
rmtree(name)
|
||||
|
||||
|
||||
def findfile(file, here=__file__):
|
||||
"""Try to find a file on sys.path and the working directory. If it is not
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue