@@ -47,68 +47,73 @@ module CompilerAssert =
4747 ExtraProjectInfo = None
4848 Stamp = None
4949 }
50+
51+ let lockObj = obj ()
5052
5153 let Pass ( source : string ) =
52- let parseResults , fileAnswer = checker.ParseAndCheckFileInProject( " test.fs" , 0 , SourceText.ofString source, defaultProjectOptions) |> Async.RunSynchronously
54+ lock lockObj <| fun () ->
55+ let parseResults , fileAnswer = checker.ParseAndCheckFileInProject( " test.fs" , 0 , SourceText.ofString source, defaultProjectOptions) |> Async.RunSynchronously
5356
54- Assert.True( parseResults.Errors.Length = 0 , sprintf " Parse errors: %A " parseResults.Errors)
57+ Assert.True( parseResults.Errors.Length = 0 , sprintf " Parse errors: %A " parseResults.Errors)
5558
56- match fileAnswer with
57- | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail( " Type Checker Aborted" )
58- | FSharpCheckFileAnswer.Succeeded( typeCheckResults) ->
59+ match fileAnswer with
60+ | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail( " Type Checker Aborted" )
61+ | FSharpCheckFileAnswer.Succeeded( typeCheckResults) ->
5962
60- Assert.True( typeCheckResults.Errors.Length = 0 , sprintf " Type Check errors: %A " typeCheckResults.Errors)
63+ Assert.True( typeCheckResults.Errors.Length = 0 , sprintf " Type Check errors: %A " typeCheckResults.Errors)
6164
6265 let TypeCheckSingleError ( source : string ) ( expectedErrorNumber : int ) ( expectedErrorRange : int * int * int * int ) ( expectedErrorMsg : string ) =
63- let parseResults , fileAnswer = checker.ParseAndCheckFileInProject( " test.fs" , 0 , SourceText.ofString source, defaultProjectOptions) |> Async.RunSynchronously
64-
65- Assert.True( parseResults.Errors.Length = 0 , sprintf " Parse errors: %A " parseResults.Errors)
66-
67- match fileAnswer with
68- | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail( " Type Checker Aborted" )
69- | FSharpCheckFileAnswer.Succeeded( typeCheckResults) ->
70-
71- Assert.True( typeCheckResults.Errors.Length = 1 , sprintf " Expected one type check error: %A " typeCheckResults.Errors)
72- typeCheckResults.Errors
73- |> Array.iter ( fun info ->
74- Assert.AreEqual( FSharpErrorSeverity.Error, info.Severity)
75- Assert.AreEqual( expectedErrorNumber, info.ErrorNumber, " expectedErrorNumber" )
76- Assert.AreEqual( expectedErrorRange, ( info.StartLineAlternate, info.StartColumn, info.EndLineAlternate, info.EndColumn), " expectedErrorRange" )
77- Assert.AreEqual( expectedErrorMsg, info.Message, " expectedErrorMsg" )
78- )
66+ lock lockObj <| fun () ->
67+ let parseResults , fileAnswer = checker.ParseAndCheckFileInProject( " test.fs" , 0 , SourceText.ofString source, defaultProjectOptions) |> Async.RunSynchronously
68+
69+ Assert.True( parseResults.Errors.Length = 0 , sprintf " Parse errors: %A " parseResults.Errors)
70+
71+ match fileAnswer with
72+ | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail( " Type Checker Aborted" )
73+ | FSharpCheckFileAnswer.Succeeded( typeCheckResults) ->
74+
75+ Assert.True( typeCheckResults.Errors.Length = 1 , sprintf " Expected one type check error: %A " typeCheckResults.Errors)
76+ typeCheckResults.Errors
77+ |> Array.iter ( fun info ->
78+ Assert.AreEqual( FSharpErrorSeverity.Error, info.Severity)
79+ Assert.AreEqual( expectedErrorNumber, info.ErrorNumber, " expectedErrorNumber" )
80+ Assert.AreEqual( expectedErrorRange, ( info.StartLineAlternate, info.StartColumn, info.EndLineAlternate, info.EndColumn), " expectedErrorRange" )
81+ Assert.AreEqual( expectedErrorMsg, info.Message, " expectedErrorMsg" )
82+ )
7983
8084 let RunScript ( source : string ) ( expectedErrorMessages : string list ) =
81- // Intialize output and input streams
82- use inStream = new StringReader( " " )
83- use outStream = new StringWriter()
84- use errStream = new StringWriter()
85-
86- // Build command line arguments & start FSI session
87- let argv = [| " C:\\ fsi.exe" |]
88- #if ! NETCOREAPP
89- let allArgs = Array.append argv [| " --noninteractive" |]
90- #else
91- let allArgs = Array.append argv [| " --noninteractive" ; " --targetprofile:netcore" |]
92- #endif
93-
94- let fsiConfig = FsiEvaluationSession.GetDefaultConfiguration()
95- use fsiSession = FsiEvaluationSession.Create( fsiConfig, allArgs, inStream, outStream, errStream, collectible = true )
96-
97- let ch , errors = fsiSession.EvalInteractionNonThrowing source
98-
99- let errorMessages = ResizeArray()
100- errors
101- |> Seq.iter ( fun error -> errorMessages.Add( error.Message))
102-
103- match ch with
104- | Choice2Of2 ex -> errorMessages.Add( ex.Message)
105- | _ -> ()
106-
107- if expectedErrorMessages.Length <> errorMessages.Count then
108- Assert.Fail( sprintf " Expected error messages: %A \n\n Actual error messages: %A " expectedErrorMessages errorMessages)
109- else
110- ( expectedErrorMessages, errorMessages)
111- ||> Seq.iter2 ( fun expectedErrorMessage errorMessage ->
112- Assert.AreEqual( expectedErrorMessage, errorMessage)
113- )
85+ lock lockObj <| fun () ->
86+ // Intialize output and input streams
87+ use inStream = new StringReader( " " )
88+ use outStream = new StringWriter()
89+ use errStream = new StringWriter()
90+
91+ // Build command line arguments & start FSI session
92+ let argv = [| " C:\\ fsi.exe" |]
93+ #if ! NETCOREAPP
94+ let allArgs = Array.append argv [| " --noninteractive" |]
95+ #else
96+ let allArgs = Array.append argv [| " --noninteractive" ; " --targetprofile:netcore" |]
97+ #endif
98+
99+ let fsiConfig = FsiEvaluationSession.GetDefaultConfiguration()
100+ use fsiSession = FsiEvaluationSession.Create( fsiConfig, allArgs, inStream, outStream, errStream, collectible = true )
101+
102+ let ch , errors = fsiSession.EvalInteractionNonThrowing source
103+
104+ let errorMessages = ResizeArray()
105+ errors
106+ |> Seq.iter ( fun error -> errorMessages.Add( error.Message))
107+
108+ match ch with
109+ | Choice2Of2 ex -> errorMessages.Add( ex.Message)
110+ | _ -> ()
111+
112+ if expectedErrorMessages.Length <> errorMessages.Count then
113+ Assert.Fail( sprintf " Expected error messages: %A \n\n Actual error messages: %A " expectedErrorMessages errorMessages)
114+ else
115+ ( expectedErrorMessages, errorMessages)
116+ ||> Seq.iter2 ( fun expectedErrorMessage errorMessage ->
117+ Assert.AreEqual( expectedErrorMessage, errorMessage)
118+ )
114119
0 commit comments