22// The .NET Foundation licenses this file to you under the MIT license.
33// See the LICENSE file in the project root for more information.
44
5- using System ;
6- using System . IO ;
75using Xunit ;
86
97namespace System . IO . Tests
108{
119 public partial class FileStream_ctor_str_fm_fa_fs : FileStream_ctor_str_fm_fa
1210 {
13- protected override FileStream CreateFileStream ( string path , FileMode mode , FileAccess access )
14- {
15- return CreateFileStream ( path , mode , access , FileShare . Read ) ;
16- }
11+ protected override FileStream CreateFileStream ( string path , FileMode mode , FileAccess access ) =>
12+ CreateFileStream ( path , mode , access , FileShare . Read ) ;
1713
18- protected virtual FileStream CreateFileStream ( string path , FileMode mode , FileAccess access , FileShare share )
19- {
20- return new FileStream ( path , mode , access , share ) ;
21- }
14+ protected virtual FileStream CreateFileStream ( string path , FileMode mode , FileAccess access , FileShare share ) =>
15+ new FileStream ( path , mode , access , share ) ;
2216
2317 [ Fact ]
2418 public void InvalidShareThrows ( )
2519 {
2620 AssertExtensions . Throws < ArgumentOutOfRangeException > ( "share" , ( ) => CreateFileStream ( GetTestFilePath ( ) , FileMode . Create , FileAccess . ReadWrite , ~ FileShare . None ) ) ;
2721 }
2822
29- static readonly FileShare [ ] shares =
30- {
31- FileShare . None ,
32- FileShare . Inheritable ,
33- FileShare . Delete , FileShare . Delete | FileShare . Inheritable ,
34- FileShare . Read , FileShare . Read | FileShare . Inheritable , FileShare . Read | FileShare . Delete , FileShare . Read | FileShare . Delete | FileShare . Inheritable ,
35- FileShare . Write , FileShare . Write | FileShare . Inheritable , FileShare . Write | FileShare . Delete , FileShare . Write | FileShare . Delete | FileShare . Inheritable ,
36- FileShare . ReadWrite , FileShare . ReadWrite | FileShare . Inheritable , FileShare . ReadWrite | FileShare . Delete , FileShare . ReadWrite | FileShare . Delete | FileShare . Inheritable
37- } ;
23+ private static readonly FileShare [ ] s_shares =
24+ {
25+ FileShare . None ,
26+ FileShare . Inheritable ,
27+ FileShare . Delete , FileShare . Delete | FileShare . Inheritable ,
28+ FileShare . Read , FileShare . Read | FileShare . Inheritable , FileShare . Read | FileShare . Delete , FileShare . Read | FileShare . Delete | FileShare . Inheritable ,
29+ FileShare . Write , FileShare . Write | FileShare . Inheritable , FileShare . Write | FileShare . Delete , FileShare . Write | FileShare . Delete | FileShare . Inheritable ,
30+ FileShare . ReadWrite , FileShare . ReadWrite | FileShare . Inheritable , FileShare . ReadWrite | FileShare . Delete , FileShare . ReadWrite | FileShare . Delete | FileShare . Inheritable
31+ } ;
3832
3933 [ Fact ]
4034 public void FileShareOpen ( )
4135 {
4236 // create the file
4337 string fileName = GetTestFilePath ( ) ;
44- using ( FileStream fs = CreateFileStream ( fileName , FileMode . Create , FileAccess . ReadWrite , FileShare . ReadWrite | FileShare . Delete ) )
45- { }
38+ CreateFileStream ( fileName , FileMode . CreateNew , FileAccess . ReadWrite , FileShare . ReadWrite | FileShare . Delete ) . Dispose ( ) ;
4639
4740 // just check that the inputs are accepted, actual sharing varies by platform so we separate the behavior testing
48- foreach ( FileShare share in shares )
41+ foreach ( FileAccess access in new [ ] { FileAccess . ReadWrite , FileAccess . Write , FileAccess . Read } )
4942 {
50- using ( FileStream fs = CreateFileStream ( fileName , FileMode . Open , FileAccess . ReadWrite , share ) )
51- { }
52-
53- using ( FileStream fs = CreateFileStream ( fileName , FileMode . Open , FileAccess . Write , share ) )
54- { }
55-
56- using ( FileStream fs = CreateFileStream ( fileName , FileMode . Open , FileAccess . Read , share ) )
57- { }
43+ foreach ( FileShare share in s_shares )
44+ {
45+ try
46+ {
47+ CreateFileStream ( fileName , FileMode . Open , access , share ) . Dispose ( ) ;
48+ }
49+ catch ( Exception e )
50+ {
51+ throw new Exception ( $ "Failed with FileAccess { access } and FileShare { share } ", e ) ;
52+ }
53+ }
5854 }
5955 }
6056
@@ -63,13 +59,19 @@ public void FileShareCreate()
6359 {
6460 // just check that the inputs are accepted, actual sharing varies by platform so we separate the behavior testing
6561 int i = 0 ;
66- foreach ( FileShare share in shares )
62+ foreach ( FileAccess access in new [ ] { FileAccess . ReadWrite , FileAccess . Write } )
6763 {
68- using ( FileStream fs = CreateFileStream ( GetTestFilePath ( i ++ ) , FileMode . Create , FileAccess . ReadWrite , share ) )
69- { }
70-
71- using ( FileStream fs = CreateFileStream ( GetTestFilePath ( i ++ ) , FileMode . Create , FileAccess . Write , share ) )
72- { }
64+ foreach ( FileShare share in s_shares )
65+ {
66+ try
67+ {
68+ CreateFileStream ( GetTestFilePath ( i ++ ) , FileMode . Create , access , share ) . Dispose ( ) ;
69+ }
70+ catch ( Exception e )
71+ {
72+ throw new Exception ( $ "Failed with FileAccess { access } and FileShare { share } ", e ) ;
73+ }
74+ }
7375 }
7476 }
7577
@@ -78,16 +80,19 @@ public void FileShareOpenOrCreate()
7880 {
7981 // just check that the inputs are accepted, actual sharing varies by platform so we separate the behavior testing
8082 int i = 0 ;
81- foreach ( FileShare share in shares )
83+ foreach ( FileAccess access in new [ ] { FileAccess . ReadWrite , FileAccess . Write , FileAccess . Read } )
8284 {
83- using ( FileStream fs = CreateFileStream ( GetTestFilePath ( i ++ ) , FileMode . OpenOrCreate , FileAccess . ReadWrite , share ) )
84- { }
85-
86- using ( FileStream fs = CreateFileStream ( GetTestFilePath ( i ++ ) , FileMode . OpenOrCreate , FileAccess . Write , share ) )
87- { }
88-
89- using ( FileStream fs = CreateFileStream ( GetTestFilePath ( i ++ ) , FileMode . OpenOrCreate , FileAccess . Read , share ) )
90- { }
85+ foreach ( FileShare share in s_shares )
86+ {
87+ try
88+ {
89+ CreateFileStream ( GetTestFilePath ( i ++ ) , FileMode . OpenOrCreate , access , share ) . Dispose ( ) ;
90+ }
91+ catch ( Exception e )
92+ {
93+ throw new Exception ( $ "Failed with FileAccess { access } and FileShare { share } ", e ) ;
94+ }
95+ }
9196 }
9297 }
9398 }
0 commit comments