@@ -76,6 +76,46 @@ public void MockFileStream_Constructor_ReadTypeNotWritable()
7676 Assert . IsFalse ( stream . CanWrite ) ;
7777 Assert . Throws < NotSupportedException > ( ( ) => stream . WriteByte ( 1 ) ) ;
7878 }
79+
80+ [ Test ]
81+ [ TestCase ( FileShare . None , MockFileStream . StreamType . READ ) ]
82+ [ TestCase ( FileShare . None , MockFileStream . StreamType . WRITE ) ]
83+ [ TestCase ( FileShare . None , MockFileStream . StreamType . APPEND ) ]
84+ [ TestCase ( FileShare . None , MockFileStream . StreamType . TRUNCATE ) ]
85+ [ TestCase ( FileShare . Read , MockFileStream . StreamType . WRITE ) ]
86+ [ TestCase ( FileShare . Read , MockFileStream . StreamType . APPEND ) ]
87+ [ TestCase ( FileShare . Read , MockFileStream . StreamType . TRUNCATE ) ]
88+ [ TestCase ( FileShare . Write , MockFileStream . StreamType . READ ) ]
89+ public void MockFileStream_Constructor_Insufficient_FileShare_Throws_Exception ( FileShare allowedFileShare , MockFileStream . StreamType streamType )
90+ {
91+ var filePath = @"C:\locked.txt" ;
92+ var fileSystem = new MockFileSystem ( new Dictionary < string , MockFileData >
93+ {
94+ { filePath , new MockFileData ( "cannot access" ) { AllowedFileShare = allowedFileShare } }
95+ } ) ;
96+
97+ Assert . Throws < IOException > ( ( ) => new MockFileStream ( fileSystem , filePath , streamType ) ) ;
98+ }
99+
100+ [ Test ]
101+ [ TestCase ( FileShare . Read , MockFileStream . StreamType . READ ) ]
102+ [ TestCase ( FileShare . Read | FileShare . Write , MockFileStream . StreamType . READ ) ]
103+ [ TestCase ( FileShare . Read | FileShare . Write , MockFileStream . StreamType . APPEND ) ]
104+ [ TestCase ( FileShare . Read | FileShare . Write , MockFileStream . StreamType . TRUNCATE ) ]
105+ [ TestCase ( FileShare . ReadWrite , MockFileStream . StreamType . READ ) ]
106+ [ TestCase ( FileShare . ReadWrite , MockFileStream . StreamType . WRITE ) ]
107+ [ TestCase ( FileShare . ReadWrite , MockFileStream . StreamType . APPEND ) ]
108+ [ TestCase ( FileShare . ReadWrite , MockFileStream . StreamType . TRUNCATE ) ]
109+ public void MockFileStream_Constructor_Sufficient_FileShare_Does_Not_Throw_Exception ( FileShare allowedFileShare , MockFileStream . StreamType streamType )
110+ {
111+ var filePath = @"C:\locked.txt" ;
112+ var fileSystem = new MockFileSystem ( new Dictionary < string , MockFileData >
113+ {
114+ { filePath , new MockFileData ( "cannot access" ) { AllowedFileShare = allowedFileShare } }
115+ } ) ;
116+
117+ Assert . DoesNotThrow ( ( ) => new MockFileStream ( fileSystem , filePath , streamType ) ) ;
118+ }
79119
80120 [ Test ]
81121 public void MockFileStream_Close_MultipleCallsDontThrow ( )
0 commit comments