@@ -1151,6 +1151,28 @@ def test_copy_return_value(self):
11511151 rv = fn (src , os .path .join (dst_dir , 'bar' ))
11521152 self .assertEqual (rv , os .path .join (dst_dir , 'bar' ))
11531153
1154+ def test_copy_dir (self ):
1155+ self ._test_copy_dir (shutil .copy )
1156+
1157+ def test_copy2_dir (self ):
1158+ self ._test_copy_dir (shutil .copy2 )
1159+
1160+ def _test_copy_dir (self , copy_func ):
1161+ src_dir = self .mkdtemp ()
1162+ src_file = os .path .join (src_dir , 'foo' )
1163+ dir2 = self .mkdtemp ()
1164+ dst = os .path .join (src_dir , 'does_not_exist/' )
1165+ write_file (src_file , 'foo' )
1166+ if sys .platform == "win32" :
1167+ err = PermissionError
1168+ else :
1169+ err = IsADirectoryError
1170+ self .assertRaises (err , copy_func , dir2 , src_dir )
1171+
1172+ # raise *err* because of src rather than FileNotFoundError because of dst
1173+ self .assertRaises (err , copy_func , dir2 , dst )
1174+ copy_func (src_file , dir2 ) # should not raise exceptions
1175+
11541176 ### shutil.copyfile
11551177
11561178 @os_helper .skip_unless_symlink
@@ -1259,6 +1281,24 @@ def test_copyfile_nonexistent_dir(self):
12591281 write_file (src_file , 'foo' )
12601282 self .assertRaises (FileNotFoundError , shutil .copyfile , src_file , dst )
12611283
1284+ def test_copyfile_copy_dir (self ):
1285+ # Issue 45234
1286+ # test copy() and copyfile() raising proper exceptions when src and/or
1287+ # dst are directories
1288+ src_dir = self .mkdtemp ()
1289+ src_file = os .path .join (src_dir , 'foo' )
1290+ dir2 = self .mkdtemp ()
1291+ dst = os .path .join (src_dir , 'does_not_exist/' )
1292+ write_file (src_file , 'foo' )
1293+ if sys .platform == "win32" :
1294+ err = PermissionError
1295+ else :
1296+ err = IsADirectoryError
1297+
1298+ self .assertRaises (err , shutil .copyfile , src_dir , dst )
1299+ self .assertRaises (err , shutil .copyfile , src_file , src_dir )
1300+ self .assertRaises (err , shutil .copyfile , dir2 , src_dir )
1301+
12621302
12631303class TestArchives (BaseTest , unittest .TestCase ):
12641304
0 commit comments