Skip to content

Commit ed387e0

Browse files
KevinRansombrettfo
authored andcommitted
Will's fix (#6559)
1 parent 0d18903 commit ed387e0

File tree

1 file changed

+60
-55
lines changed

1 file changed

+60
-55
lines changed

tests/fsharp/Compiler/CompilerAssert.fs

Lines changed: 60 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)