#22315: Add test to capture the failure.

This commit is contained in:
Jason R. Coombs 2014-08-31 15:02:42 -04:00
parent 1be2e82c57
commit 4b02e7041c
1 changed files with 29 additions and 0 deletions

View File

@ -3,7 +3,9 @@ import unittest
import os
import stat
import sys
import contextlib
from distutils import dir_util, errors
from distutils.dir_util import (mkpath, remove_tree, create_tree, copy_tree,
ensure_relative)
@ -11,6 +13,20 @@ from distutils import log
from distutils.tests import support
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):
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('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():
return unittest.makeSuite(DirUtilTestCase)