@@ -111,7 +111,8 @@ module CompilerAssert =
111111 Assert.IsEmpty( typeCheckResults.Errors, sprintf " Type Check errors: %A " typeCheckResults.Errors)
112112
113113
114- let TypeCheckSingleError ( source : string ) ( expectedErrorNumber : int ) ( expectedErrorRange : int * int * int * int ) ( expectedErrorMsg : string ) =
114+
115+ let TypeCheckWithErrors ( source : string ) expectedTypeErrors =
115116 lock gate <| fun () ->
116117 let parseResults , fileAnswer = checker.ParseAndCheckFileInProject( " test.fs" , 0 , SourceText.ofString source, defaultProjectOptions) |> Async.RunSynchronously
117118
@@ -121,15 +122,24 @@ module CompilerAssert =
121122 | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail( " Type Checker Aborted" )
122123 | FSharpCheckFileAnswer.Succeeded( typeCheckResults) ->
123124
124- Assert.AreEqual( 1 , typeCheckResults.Errors.Length, sprintf " Expected one type check error: %A " typeCheckResults.Errors)
125- typeCheckResults.Errors
126- |> Array.iter ( fun info ->
127- Assert.AreEqual( FSharpErrorSeverity.Error, info.Severity)
125+ let errors =
126+ typeCheckResults.Errors
127+ |> Array.distinctBy ( fun e -> e.Severity, e.ErrorNumber, e.StartLineAlternate, e.StartColumn, e.EndLineAlternate, e.EndColumn, e.Message)
128+
129+ Assert.AreEqual( Array.length expectedTypeErrors, errors.Length, sprintf " Type check errors: %A " typeCheckResults.Errors)
130+
131+ Array.zip errors expectedTypeErrors
132+ |> Array.iter ( fun ( info , expectedError ) ->
133+ let ( expectedServerity : FSharpErrorSeverity , expectedErrorNumber : int , expectedErrorRange : int * int * int * int , expectedErrorMsg : string ) = expectedError
134+ Assert.AreEqual( expectedServerity, info.Severity)
128135 Assert.AreEqual( expectedErrorNumber, info.ErrorNumber, " expectedErrorNumber" )
129- Assert.AreEqual( expectedErrorRange, ( info.StartLineAlternate, info.StartColumn, info.EndLineAlternate, info.EndColumn), " expectedErrorRange" )
136+ Assert.AreEqual( expectedErrorRange, ( info.StartLineAlternate, info.StartColumn + 1 , info.EndLineAlternate, info.EndColumn + 1 ), " expectedErrorRange" )
130137 Assert.AreEqual( expectedErrorMsg, info.Message, " expectedErrorMsg" )
131138 )
132139
140+ let TypeCheckSingleError ( source : string ) ( expectedServerity : FSharpErrorSeverity ) ( expectedErrorNumber : int ) ( expectedErrorRange : int * int * int * int ) ( expectedErrorMsg : string ) =
141+ TypeCheckWithErrors ( source: string) [| expectedServerity, expectedErrorNumber, expectedErrorRange, expectedErrorMsg |]
142+
133143 let CompileExe ( source : string ) =
134144 compile true source ( fun ( errors , _ ) ->
135145 if errors.Length > 0 then
@@ -203,4 +213,4 @@ module CompilerAssert =
203213 ||> Seq.iter2 ( fun expectedErrorMessage errorMessage ->
204214 Assert.AreEqual( expectedErrorMessage, errorMessage)
205215 )
206-
216+
0 commit comments