mirror of
https://github.com/python/cpython.git
synced 2025-09-13 12:17:24 +00:00
#22315: Add test to capture the failure.
This commit is contained in:
parent
1be2e82c57
commit
4b02e7041c
1 changed files with 29 additions and 0 deletions
|
@ -3,7 +3,9 @@ import unittest
|
||||||
import os
|
import os
|
||||||
import stat
|
import stat
|
||||||
import sys
|
import sys
|
||||||
|
import contextlib
|
||||||
|
|
||||||
|
from distutils import dir_util, errors
|
||||||
from distutils.dir_util import (mkpath, remove_tree, create_tree, copy_tree,
|
from distutils.dir_util import (mkpath, remove_tree, create_tree, copy_tree,
|
||||||
ensure_relative)
|
ensure_relative)
|
||||||
|
|
||||||
|
@ -11,6 +13,20 @@ from distutils import log
|
||||||
from distutils.tests import support
|
from distutils.tests import support
|
||||||
from test.support import run_unittest
|
from test.support import run_unittest
|
||||||
|
|
||||||
|
|
||||||
|
@contextlib.context_manager
|
||||||
|
def patch_obj(obj, attr, replacement):
|
||||||
|
"""
|
||||||
|
A poor man's mock.patch.object
|
||||||
|
"""
|
||||||
|
orig = getattr(obj, attr)
|
||||||
|
try:
|
||||||
|
setattr(obj, attr, replacement)
|
||||||
|
yield
|
||||||
|
finally:
|
||||||
|
setattr(obj, attr, orig)
|
||||||
|
|
||||||
|
|
||||||
class DirUtilTestCase(support.TempdirManager, unittest.TestCase):
|
class DirUtilTestCase(support.TempdirManager, unittest.TestCase):
|
||||||
|
|
||||||
def _log(self, msg, *args):
|
def _log(self, msg, *args):
|
||||||
|
@ -119,6 +135,19 @@ class DirUtilTestCase(support.TempdirManager, unittest.TestCase):
|
||||||
self.assertEqual(ensure_relative('c:\\home\\foo'), 'c:home\\foo')
|
self.assertEqual(ensure_relative('c:\\home\\foo'), 'c:home\\foo')
|
||||||
self.assertEqual(ensure_relative('home\\foo'), 'home\\foo')
|
self.assertEqual(ensure_relative('home\\foo'), 'home\\foo')
|
||||||
|
|
||||||
|
def test_copy_tree_exception_in_listdir(self):
|
||||||
|
"""
|
||||||
|
An exception in listdir should raise a DistutilsFileError
|
||||||
|
"""
|
||||||
|
def new_listdir(path):
|
||||||
|
raise OSError()
|
||||||
|
# simulate a transient network error or other failure invoking listdir
|
||||||
|
with patch_obj(os, 'listdir', new_listdir):
|
||||||
|
args = 'src', None
|
||||||
|
exc = errors.DistutilsFileError
|
||||||
|
self.assertRaises(exc, dir_util.copy_tree, *args)
|
||||||
|
|
||||||
|
|
||||||
def test_suite():
|
def test_suite():
|
||||||
return unittest.makeSuite(DirUtilTestCase)
|
return unittest.makeSuite(DirUtilTestCase)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue