@@ -388,5 +388,91 @@ public void CopyTo_TargetDirAndParentDoesNotExist_CreatesTargetDirectoryHierarch
388388
389389 Assert . IsFalse ( fs . File . Exists ( workingDir . FullName ) ) ;
390390 }
391+
392+ [ Test ]
393+ public void CopyTo_Overwrite_OverwritesWhenSet ( )
394+ {
395+ //arrange
396+ var fs = new FileSystem ( ) ;
397+ var workingDir = fs . DirectoryInfo . New ( fs . Directory . GetCurrentDirectory ( ) ) . CreateSubdirectory ( Guid . NewGuid ( ) . ToString ( ) ) ;
398+
399+ //create directories
400+ var source = fs . DirectoryInfo . New ( fs . Path . Combine ( workingDir . FullName , "SourceDir" ) ) ;
401+ var dest = fs . DirectoryInfo . New ( fs . Path . Combine ( workingDir . FullName , "DestDir" ) ) ;
402+
403+ source . Create ( ) ;
404+ dest . Create ( ) ;
405+
406+ //create files
407+ var sourceFile = fs . FileInfo . New ( fs . Path . Combine ( source . FullName , "file.txt" ) ) ;
408+ var destFile = fs . FileInfo . New ( fs . Path . Combine ( dest . FullName , "file.txt" ) ) ;
409+
410+ var sourceFileContent = new [ ] { nameof ( sourceFile ) } ;
411+ sourceFile . WriteLines ( sourceFileContent ) ;
412+ var destFileContent = new [ ] { nameof ( destFile ) } ;
413+ destFile . WriteLines ( destFileContent ) ;
414+
415+ //make sure everything is set up as expected
416+ Assert . IsTrue ( fs . Directory . Exists ( source . FullName ) ) ;
417+ Assert . IsTrue ( fs . File . Exists ( sourceFile . FullName ) ) ;
418+ Assert . AreEqual ( fs . File . ReadAllLines ( sourceFile . FullName ) , sourceFileContent ) ;
419+ Assert . IsTrue ( fs . Directory . Exists ( dest . FullName ) ) ;
420+ Assert . IsTrue ( fs . File . Exists ( destFile . FullName ) ) ;
421+ Assert . AreEqual ( fs . File . ReadAllLines ( destFile . FullName ) , destFileContent ) ;
422+
423+ //act
424+ source . CopyTo ( dest , overwrite : true ) ;
425+
426+ //assert
427+ Assert . AreEqual ( fs . File . ReadAllLines ( destFile . FullName ) , sourceFileContent ) ;
428+
429+ //cleanup
430+ workingDir . Delete ( recursive : true ) ;
431+
432+ Assert . IsFalse ( fs . File . Exists ( workingDir . FullName ) ) ;
433+ }
434+
435+ [ Test ]
436+ public void CopyTo_Overwrite_DoesNotOverwritesWhenNotSet ( )
437+ {
438+ //arrange
439+ var fs = new FileSystem ( ) ;
440+ var workingDir = fs . DirectoryInfo . New ( fs . Directory . GetCurrentDirectory ( ) ) . CreateSubdirectory ( Guid . NewGuid ( ) . ToString ( ) ) ;
441+
442+ //create directories
443+ var source = fs . DirectoryInfo . New ( fs . Path . Combine ( workingDir . FullName , "SourceDir" ) ) ;
444+ var dest = fs . DirectoryInfo . New ( fs . Path . Combine ( workingDir . FullName , "DestDir" ) ) ;
445+
446+ source . Create ( ) ;
447+ dest . Create ( ) ;
448+
449+ //create files
450+ var sourceFile = fs . FileInfo . New ( fs . Path . Combine ( source . FullName , "file.txt" ) ) ;
451+ var destFile = fs . FileInfo . New ( fs . Path . Combine ( dest . FullName , "file.txt" ) ) ;
452+
453+ var sourceFileContent = new [ ] { nameof ( sourceFile ) } ;
454+ sourceFile . WriteLines ( sourceFileContent ) ;
455+ var destFileContent = new [ ] { nameof ( destFile ) } ;
456+ destFile . WriteLines ( destFileContent ) ;
457+
458+ //make sure everything is set up as expected
459+ Assert . IsTrue ( fs . Directory . Exists ( source . FullName ) ) ;
460+ Assert . IsTrue ( fs . File . Exists ( sourceFile . FullName ) ) ;
461+ Assert . AreEqual ( fs . File . ReadAllLines ( sourceFile . FullName ) , sourceFileContent ) ;
462+ Assert . IsTrue ( fs . Directory . Exists ( dest . FullName ) ) ;
463+ Assert . IsTrue ( fs . File . Exists ( destFile . FullName ) ) ;
464+ Assert . AreEqual ( fs . File . ReadAllLines ( destFile . FullName ) , destFileContent ) ;
465+
466+ //act
467+ Assert . That ( ( ) => source . CopyTo ( dest , overwrite : false ) , Throws . Exception . TypeOf < IOException > ( ) . And . Message . Contains ( destFile . FullName ) ) ;
468+
469+ //assert
470+ Assert . AreEqual ( fs . File . ReadAllLines ( destFile . FullName ) , destFileContent ) ;
471+
472+ //cleanup
473+ workingDir . Delete ( recursive : true ) ;
474+
475+ Assert . IsFalse ( fs . File . Exists ( workingDir . FullName ) ) ;
476+ }
391477 }
392478}
0 commit comments