@@ -381,5 +381,39 @@ public void MockFile_Move_ShouldRetainMetadata()
381381
382382 Assert . That ( fileSystem . File . GetCreationTimeUtc ( destFilePath ) , Is . EqualTo ( creationTime . UtcDateTime ) ) ;
383383 }
384+
385+ [ Test ]
386+ public void MockFile_Move_ShouldThrowExceptionWhenSourceFileShare_Is_Not_Delete ( )
387+ {
388+ string sourceFileReadDelete = XFS . Path ( @"c:\something\IHaveReadDelete.txt" ) ;
389+ string sourceFileDelete = XFS . Path ( @"c:\something\IHaveDelete.txt" ) ;
390+ string sourceFileRead = XFS . Path ( @"c:\something\IHaveRead.txt" ) ;
391+ string sourceFileNone = XFS . Path ( @"c:\something\IHaveNone.txt" ) ;
392+ var fileSystem = new MockFileSystem ( new Dictionary < string , MockFileData >
393+ {
394+ { sourceFileDelete , new MockFileData ( "" ) { AllowedFileShare = FileShare . Delete } } ,
395+ { sourceFileRead , new MockFileData ( "" ) { AllowedFileShare = FileShare . Read } } ,
396+ { sourceFileReadDelete , new MockFileData ( "" ) { AllowedFileShare = FileShare . Delete | FileShare . Read } } ,
397+ { sourceFileNone , new MockFileData ( "" ) { AllowedFileShare = FileShare . None } } ,
398+ } ) ;
399+
400+ AssertMoveSuccess ( sourceFileReadDelete ) ;
401+ AssertMoveSuccess ( sourceFileDelete ) ;
402+ AssertMoveThrowsIOException ( sourceFileRead ) ;
403+ AssertMoveThrowsIOException ( sourceFileNone ) ;
404+
405+ void AssertMoveThrowsIOException ( string sourceFile )
406+ {
407+ var target = sourceFile + ".moved" ;
408+ Assert . Throws < IOException > ( ( ) => fileSystem . File . Move ( sourceFile , target ) ) ;
409+ }
410+
411+ void AssertMoveSuccess ( string sourceFile )
412+ {
413+ var target = sourceFile + ".moved" ;
414+ fileSystem . File . Move ( sourceFile , target ) ;
415+ Assert . That ( fileSystem . File . Exists ( target ) , Is . True ) ;
416+ }
417+ }
384418 }
385419}
0 commit comments