@@ -579,6 +579,48 @@ def _filter(src, names):
579
579
shutil .rmtree (src_dir )
580
580
shutil .rmtree (os .path .dirname (dst_dir ))
581
581
582
+ def test_copytree_arg_types_of_ignore (self ):
583
+ join = os .path .join
584
+ exists = os .path .exists
585
+
586
+ tmp_dir = self .mkdtemp ()
587
+ src_dir = join (tmp_dir , "source" )
588
+
589
+ os .mkdir (join (src_dir ))
590
+ os .mkdir (join (src_dir , 'test_dir' ))
591
+ os .mkdir (os .path .join (src_dir , 'test_dir' , 'subdir' ))
592
+ write_file ((src_dir , 'test_dir' , 'subdir' , 'test.txt' ), '456' )
593
+
594
+ invokations = []
595
+
596
+ def _ignore (src , names ):
597
+ invokations .append (src )
598
+ self .assertIsInstance (src , str )
599
+ self .assertIsInstance (names , list )
600
+ self .assertEqual (len (names ), len (set (names )))
601
+ for name in names :
602
+ self .assertIsInstance (name , str )
603
+ return []
604
+
605
+ dst_dir = join (self .mkdtemp (), 'destination' )
606
+ shutil .copytree (src_dir , dst_dir , ignore = _ignore )
607
+ self .assertTrue (exists (join (dst_dir , 'test_dir' , 'subdir' ,
608
+ 'test.txt' )))
609
+
610
+ dst_dir = join (self .mkdtemp (), 'destination' )
611
+ shutil .copytree (pathlib .Path (src_dir ), dst_dir , ignore = _ignore )
612
+ self .assertTrue (exists (join (dst_dir , 'test_dir' , 'subdir' ,
613
+ 'test.txt' )))
614
+
615
+ dst_dir = join (self .mkdtemp (), 'destination' )
616
+ src_dir_entry = list (os .scandir (tmp_dir ))[0 ]
617
+ self .assertIsInstance (src_dir_entry , os .DirEntry )
618
+ shutil .copytree (src_dir_entry , dst_dir , ignore = _ignore )
619
+ self .assertTrue (exists (join (dst_dir , 'test_dir' , 'subdir' ,
620
+ 'test.txt' )))
621
+
622
+ self .assertEqual (len (invokations ), 9 )
623
+
582
624
def test_copytree_retains_permissions (self ):
583
625
tmp_dir = self .mkdtemp ()
584
626
src_dir = os .path .join (tmp_dir , 'source' )
0 commit comments