1+ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information.
2+
3+ namespace FSharp.Compiler.UnitTests
4+
5+ open System
6+ open Microsoft.FSharp .Compiler .Text
7+ open Microsoft.FSharp .Compiler .SourceCodeServices
8+
9+ open NUnit.Framework
10+
11+ [<RequireQualifiedAccess>]
12+ module Compiler =
13+
14+ let checker = FSharpChecker.Create()
15+
16+ let private defaultProjectOptions =
17+ {
18+ ProjectFileName = " Z:\\ test.fsproj"
19+ ProjectId = None
20+ SourceFiles = [| " test.fs" |]
21+ OtherOptions = [||]
22+ ReferencedProjects = [||]
23+ IsIncompleteTypeCheckEnvironment = false
24+ UseScriptResolutionRules = false
25+ LoadTime = DateTime()
26+ UnresolvedReferences = None
27+ OriginalLoadReferences = []
28+ ExtraProjectInfo = None
29+ Stamp = None
30+ }
31+
32+ let AssertPass ( source : string ) =
33+ let parseResults , fileAnswer = checker.ParseAndCheckFileInProject( " test.fs" , 0 , SourceText.ofString source, defaultProjectOptions) |> Async.RunSynchronously
34+
35+ Assert.True( parseResults.Errors.Length = 0 , sprintf " Parse errors: %A " parseResults.Errors)
36+
37+ match fileAnswer with
38+ | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail( " Type Checker Aborted" )
39+ | FSharpCheckFileAnswer.Succeeded( typeCheckResults) ->
40+
41+ Assert.True( typeCheckResults.Errors.Length = 0 , sprintf " Type Check errors: %A " typeCheckResults.Errors)
42+
43+ let AssertSingleErrorTypeCheck ( source : string ) ( expectedErrorNumber : int ) ( expectedErrorRange : int * int * int * int ) ( expectedErrorMsg : string ) =
44+ let parseResults , fileAnswer = checker.ParseAndCheckFileInProject( " test.fs" , 0 , SourceText.ofString source, defaultProjectOptions) |> Async.RunSynchronously
45+
46+ Assert.True( parseResults.Errors.Length = 0 , sprintf " Parse errors: %A " parseResults.Errors)
47+
48+ match fileAnswer with
49+ | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail( " Type Checker Aborted" )
50+ | FSharpCheckFileAnswer.Succeeded( typeCheckResults) ->
51+
52+ Assert.True( typeCheckResults.Errors.Length = 1 , sprintf " Expected one type check error: %A " typeCheckResults.Errors)
53+ typeCheckResults.Errors
54+ |> Array.iter ( fun info ->
55+ Assert.AreEqual( FSharpErrorSeverity.Error, info.Severity)
56+ Assert.AreEqual( expectedErrorNumber, info.ErrorNumber, " expectedErrorNumber" )
57+ Assert.AreEqual( expectedErrorRange, ( info.StartLineAlternate, info.StartColumn, info.EndLineAlternate, info.EndColumn), " expectedErrorRange" )
58+ Assert.AreEqual( expectedErrorMsg, info.Message, " expectedErrorMsg" )
59+ )
0 commit comments