@@ -7,6 +7,8 @@ open Xunit
7
7
open System
8
8
open FSharp.Test .Compiler
9
9
open FSharp.Test .ScriptHelpers
10
+ open FSharp.Compiler .Interactive .Shell
11
+ open FSharp.Compiler .Diagnostics
10
12
11
13
module ` `Interactive tests`` =
12
14
@@ -40,29 +42,44 @@ module ``Interactive tests`` =
40
42
[<InlineData( false , true ) >]
41
43
let ``Evaluation of multiple sessions should succeed`` ( useMultiEmit1 , useMultiEmit2 ) =
42
44
45
+ // This test is to check that we can have multiple sessions and that they can access each other
46
+
47
+ // Initialize
43
48
let args useMultiEmit : string array = [| if useMultiEmit then " --multiemit+" else " --multiemit-" |]
44
49
use sessionOne = new FSharpScript( additionalArgs = args useMultiEmit1)
45
50
use sessionTwo = new FSharpScript( additionalArgs = args useMultiEmit2)
51
+ use sessionThree = new FSharpScript( additionalArgs = args useMultiEmit2)
46
52
47
- sessionOne.Eval( """
48
- module Test1 =
49
-
50
- let test1 obj = sprintf "Execute - Test1.test1 - %A " obj""" ) |> ignore
51
-
52
- let result1 = sessionOne.Eval( """ Test1.test1 18""" ) |> getValue
53
+ // First session
54
+ sessionOne.Eval( """ module Test1 = let test1 obj = sprintf "Execute - Test1.test1 - %A " obj""" ) |> ignore
55
+ let result1 = sessionOne.Eval( " Test1.test1 18" ) |> getValue
53
56
let value1 = result1.Value
54
57
Assert.Equal( typeof< string>, value1.ReflectionType)
55
58
Assert.Equal( " Execute - Test1.test1 - 18" , value1.ReflectionValue :?> string)
56
59
57
- sessionTwo.Eval( """
58
- module Test2 =
59
- let test2 obj = sprintf "Execute - Test2.test2 - %A " obj""" ) |> ignore
60
-
60
+ // Second session
61
+ sessionTwo.Eval( """ module Test2 = let test2 obj = sprintf "Execute - Test2.test2 - %A " obj""" ) |> ignore
61
62
let result2 = sessionTwo.Eval( """ Test2.test2 27""" ) |> getValue
62
63
let value2 = result2.Value
63
64
Assert.Equal( typeof< string>, value2.ReflectionType)
64
65
Assert.Equal( " Execute - Test2.test2 - 27" , value2.ReflectionValue :?> string)
65
66
67
+ // Can I access the other session
68
+ let result : Result < FsiValue option , exn > * FSharpDiagnostic [] = sessionOne.Eval( """ Test2.test2 19""" )
69
+ match result with
70
+ | Result.Ok _, errors -> Assert.True( false , $""" Failed in line: {String.Join(", ", errors)}""" )
71
+ | Result.Error ex, _ diagnostics -> Assert.True( false , $""" Failed in line: {ex.Message}""" )
72
+
73
+
74
+
75
+
76
+ //let result4 = sessionTwo.Eval("""Test1.test1 21""") |> getValue
77
+ //let value4 = result4.Value
78
+ //Assert.Equal(typeof<string>, value4.ReflectionType)
79
+ //Assert.Equal("Execute - Test1.test1 - 21", value4.ReflectionValue :?> string)
80
+
81
+ ()
82
+
66
83
module ` `External FSI tests`` =
67
84
[<Fact>]
68
85
let ``Eval object value`` () =
0 commit comments