Welcome to mirror list, hosted at ThFree Co, Russian Federation.

CompilerArguments.fs « MonoDevelop.FSharp.Tests « fsharpbinding « external « main - github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 58bd80e95c6c2b523d9788800f8adf64bc586ad9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
namespace MonoDevelopTests
open System
open System.IO
open System.Runtime.CompilerServices
open System.Threading.Tasks
open NUnit.Framework
open FsUnit
open MonoDevelop.Core
open MonoDevelop.FSharp
open MonoDevelop.Projects

type TestPlatform =
    | Windows = 0
    | OSX = 1
    | Linux = 2

[<TestFixture>]
type CompilerArgumentsTests() =
    let toTask computation : Task = Async.StartAsTask computation :> _

    let makeTestableReference (path: string) =
        let path = path.Substring(4)
        let path = path.Substring(0,path.Length - 1)
        path

    let createFSharpProject() =
        async {
            let monitor = new MonoDevelop.Core.ProgressMonitor()
            let testProject = Services.ProjectService.CreateDotNetProject ("F#") :?> FSharpProject
            testProject.FileName <- Path.GetTempFileName() |> FilePath

            let! _ = testProject.SaveAsync monitor |> Async.AwaitTask
            do! testProject.ReevaluateProject(monitor) |> ignore
                testProject.GetReferences()
            return testProject
        }

    member private x.``Run Only mscorlib referenced`` (assemblyName) =
        async {
            use! testProject = createFSharpProject()
            let assemblyName = match assemblyName with Fqn a -> fromFqn a | File a -> a
            let _ = testProject.AddReference assemblyName
            let references =
                CompilerArguments.generateReferences(testProject, 
                                                     testProject.ReferencedAssemblies,
                                                     Some (FSharpCompilerVersion.FSharp_3_1),
                                                     FSharpTargetFramework.NET_4_5,
                                                     ConfigurationSelector.Default,
                                                     true) 

            //The two paths for mscorlib and FSharp.Core should match
            let testPaths = references |> List.map makeTestableReference
            match testPaths |> List.map Path.GetDirectoryName with
            | [one; two; three] -> ()
            | _ -> Assert.Fail(sprintf "Too many references returned %A" testPaths)
        }

    [<TestCase(TestPlatform.OSX,"/Library/Frameworks/Mono.framework/Versions/Current/lib/mono/4.5/mscorlib.dll")>]
    [<TestCase(TestPlatform.Linux,"/usr/lib/mono/4.5/mscorlib.dll")>]
    [<TestCase(TestPlatform.OSX,"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" )>]
    [<TestCase(TestPlatform.Linux,"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" )>]
    //[<TestCase(TestPlatform.Windows,"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" )>]
    [<Test;AsyncStateMachine(typeof<Task>)>]
    member x.``Only mscorlib referenced`` (platform, assemblyName:string) =
        async {
            match platform with
            | TestPlatform.Linux when Platform.IsLinux ->
                do! x.``Run Only mscorlib referenced``(assemblyName)
            | TestPlatform.OSX when Platform.IsMac ->
                do! x.``Run Only mscorlib referenced``(assemblyName)
            | TestPlatform.Windows when Platform.IsWindows -> 
                do! x.``Run Only mscorlib referenced``(assemblyName)
            | _ -> ()
        } |> toTask

    [<Test;AsyncStateMachine(typeof<Task>)>]
    member x.``Explicit FSharp.Core and mscorlib referenced``() =
        async {
            if Platform.IsMac then
                use! testProject = createFSharpProject()
                let _ = testProject.AddReference "mscorlib"
                // we need to use a path to FSharp.Core.dll that exists on disk
                let fscorePath = typeof<FSharp.Core.PrintfFormat<_,_,_,_>>.Assembly.Location
                let reference = testProject.AddReference fscorePath
                let references =
                    CompilerArguments.generateReferences(testProject,
                                                         testProject.ReferencedAssemblies,
                                                         Some (FSharpCompilerVersion.FSharp_3_1),
                                                         FSharpTargetFramework.NET_4_5,
                                                         ConfigurationSelector.Default,
                                                         true)
                let testPaths = references |> List.map makeTestableReference
                testPaths |> should contain (reference.HintPath.FullPath |> string)
        } |> toTask