@@ -20,7 +20,7 @@ open FSharp.Compiler.Service.Tests.Common
20
20
let fileName1 = @" c:\mycode\test1.fs" // note, the path doesn' exist
21
21
let fileName2 = @" c:\mycode\test2.fs" // note, the path doesn' exist
22
22
23
- type internal MyFileSystem ( defaultFileSystem : IFileSystem ) =
23
+ type internal MyFileSystem ( defaultFileSystem : IFileSystem ) =
24
24
let file1 = """
25
25
module File1
26
26
@@ -31,25 +31,26 @@ let B = File1.A + File1.A"""
31
31
let files = dict [( fileName1, file1); ( fileName2, file2)]
32
32
33
33
interface IFileSystem with
34
+
35
+ member _.AssemblyLoader = DefaultAssemblyLoader() :> IAssemblyLoader
34
36
// Implement the service to open files for reading and writing
35
- member _.FileStreamReadShim ( fileName ) =
36
- match files.TryGetValue fileName with
37
- | true , text -> new MemoryStream( Encoding.UTF8.GetBytes( text)) :> Stream
38
- | _ -> defaultFileSystem.FileStreamReadShim( fileName)
39
-
40
- member _.FileStreamCreateShim ( fileName ) =
41
- defaultFileSystem.FileStreamCreateShim( fileName)
42
-
43
- member _.IsStableFileHeuristic ( fileName ) =
37
+ member _.OpenFileForReadShim ( filePath , ? shouldShadowCopy : bool ) =
38
+ let shouldShadowCopy = defaultArg shouldShadowCopy false
39
+ match files.TryGetValue filePath with
40
+ | true , text ->
41
+ let bytes = Encoding.UTF8.GetBytes( text)
42
+ ByteArrayMemory( bytes, 0 , bytes.Length) :> ByteMemory
43
+ | _ -> defaultFileSystem.OpenFileForReadShim( filePath, shouldShadowCopy)
44
+
45
+ member _.OpenFileForWriteShim ( filePath , ? fileMode : FileMode , ? fileAccess : FileAccess , ? fileShare : FileShare ) =
46
+ let fileMode = defaultArg fileMode FileMode.OpenOrCreate
47
+ let fileAccess = defaultArg fileAccess FileAccess.ReadWrite
48
+ let fileShare = defaultArg fileShare FileShare.Read
49
+ defaultFileSystem.OpenFileForWriteShim( filePath, fileMode, fileAccess, fileShare)
50
+
51
+ member _.IsStableFileHeuristic ( fileName ) =
44
52
defaultFileSystem.IsStableFileHeuristic( fileName)
45
53
46
- member _.FileStreamWriteExistingShim ( fileName ) =
47
- defaultFileSystem.FileStreamWriteExistingShim( fileName)
48
-
49
- member _.ReadAllBytesShim ( fileName ) =
50
- match files.TryGetValue fileName with
51
- | true , text -> Encoding.UTF8.GetBytes( text)
52
- | _ -> defaultFileSystem.ReadAllBytesShim( fileName)
53
54
54
55
// Implement the service related to temporary paths and file time stamps
55
56
member _.GetTempPathShim () = defaultFileSystem.GetTempPathShim()
@@ -58,16 +59,23 @@ let B = File1.A + File1.A"""
58
59
member _.IsInvalidPathShim ( fileName ) = defaultFileSystem.IsInvalidPathShim( fileName)
59
60
member _.IsPathRootedShim ( fileName ) = defaultFileSystem.IsPathRootedShim( fileName)
60
61
61
- // Implement the service related to file existence and deletion
62
- member _.SafeExists ( fileName ) = files.ContainsKey( fileName) || defaultFileSystem.SafeExists( fileName)
63
- member _.FileDelete ( fileName ) = defaultFileSystem.FileDelete( fileName)
62
+ member _.CopyShim ( src , dest , overwrite ) = defaultFileSystem.CopyShim( src, dest, overwrite)
63
+ member _.DirectoryCreateShim ( path ) = defaultFileSystem.DirectoryCreateShim( path)
64
+ member _.DirectoryDeleteShim ( path ) = defaultFileSystem.DirectoryDeleteShim( path)
65
+ member _.DirectoryExistsShim ( path ) = defaultFileSystem.DirectoryExistsShim( path)
66
+ member _.EnumerateDirectoriesShim ( path ) = defaultFileSystem.EnumerateDirectoriesShim( path)
67
+ member _.EnumerateFilesShim ( path , pattern ) = defaultFileSystem.EnumerateFilesShim( path, pattern)
68
+ member _.FileDeleteShim ( fileName ) = defaultFileSystem.FileDeleteShim( fileName)
69
+ member _.FileExistsShim ( fileName ) = defaultFileSystem.FileExistsShim( fileName)
70
+ member _.GetCreationTimeShim ( path ) = defaultFileSystem.GetCreationTimeShim( path)
71
+ member _.GetDirectoryNameShim ( path ) = defaultFileSystem.GetDirectoryNameShim( path)
72
+ member _.GetFullFilePathInDirectoryShim ( dir ) ( fileName ) = defaultFileSystem.GetFullFilePathInDirectoryShim dir fileName
73
+ member _.NormalizePathShim ( path ) = defaultFileSystem.NormalizePathShim( path)
74
+
64
75
65
- // Implement the service related to assembly loading, used to load type providers
66
- // and for F# interactive.
67
- member _.AssemblyLoadFrom ( fileName ) = defaultFileSystem.AssemblyLoadFrom fileName
68
- member _.AssemblyLoad ( assemblyName ) = defaultFileSystem.AssemblyLoad assemblyName
69
76
70
- let UseMyFileSystem () =
77
+
78
+ let UseMyFileSystem () =
71
79
let myFileSystem = MyFileSystem( FileSystemAutoOpens.FileSystem)
72
80
FileSystemAutoOpens.FileSystem <- myFileSystem
73
81
{ new IDisposable with member x.Dispose () = FileSystemAutoOpens.FileSystem <- myFileSystem }
@@ -77,35 +85,35 @@ let UseMyFileSystem() =
77
85
#if NETCOREAPP
78
86
[<Ignore( " SKIPPED: need to check if these tests can be enabled for .NET Core testing of FSharp.Compiler.Service" ) >]
79
87
#endif
80
- let ``FileSystem compilation test`` () =
81
- if System.Environment.OSVersion.Platform = System.PlatformID.Win32NT then // file references only valid on Windows
88
+ let ``FileSystem compilation test`` () =
89
+ if System.Environment.OSVersion.Platform = System.PlatformID.Win32NT then // file references only valid on Windows
82
90
use myFileSystem = UseMyFileSystem()
83
91
let programFilesx86Folder = System.Environment.GetEnvironmentVariable( " PROGRAMFILES(X86)" )
84
92
85
- let projectOptions =
86
- let allFlags =
87
- [| yield " --simpleresolution" ;
88
- yield " --noframework" ;
89
- yield " --debug:full" ;
90
- yield " --define:DEBUG" ;
91
- yield " --optimize-" ;
92
- yield " --doc:test.xml" ;
93
- yield " --warn:3" ;
94
- yield " --fullpaths" ;
95
- yield " --flaterrors" ;
96
- yield " --target:library" ;
97
- for r in [ sysLib " mscorlib" ; sysLib " System" ; sysLib " System.Core" ; fsCoreDefaultReference() ] do
93
+ let projectOptions =
94
+ let allFlags =
95
+ [| yield " --simpleresolution" ;
96
+ yield " --noframework" ;
97
+ yield " --debug:full" ;
98
+ yield " --define:DEBUG" ;
99
+ yield " --optimize-" ;
100
+ yield " --doc:test.xml" ;
101
+ yield " --warn:3" ;
102
+ yield " --fullpaths" ;
103
+ yield " --flaterrors" ;
104
+ yield " --target:library" ;
105
+ for r in [ sysLib " mscorlib" ; sysLib " System" ; sysLib " System.Core" ; fsCoreDefaultReference() ] do
98
106
yield " -r:" + r |]
99
-
107
+
100
108
{ ProjectFileName = @" c:\mycode\compilation.fsproj" // Make a name that is unique in this directory.
101
109
ProjectId = None
102
110
SourceFiles = [| fileName1; fileName2 |]
103
- OtherOptions = allFlags
111
+ OtherOptions = allFlags
104
112
ReferencedProjects = [| |];
105
113
IsIncompleteTypeCheckEnvironment = false
106
- UseScriptResolutionRules = true
114
+ UseScriptResolutionRules = true
107
115
LoadTime = System.DateTime.Now // Not 'now', we don't want to force reloading
108
- UnresolvedReferences = None
116
+ UnresolvedReferences = None
109
117
OriginalLoadReferences = []
110
118
Stamp = None }
111
119
@@ -115,4 +123,3 @@ let ``FileSystem compilation test``() =
115
123
results.AssemblySignature.Entities.Count |> shouldEqual 2
116
124
results.AssemblySignature.Entities.[ 0 ]. MembersFunctionsAndValues.Count |> shouldEqual 1
117
125
results.AssemblySignature.Entities.[ 0 ]. MembersFunctionsAndValues.[ 0 ]. DisplayName |> shouldEqual " B"
118
-
0 commit comments