diff --git a/rider-fsharp/src/test/kotlin/com/jetbrains/rider/plugins/fsharp/test/cases/debugger/FSharpSteppingTest.kt b/rider-fsharp/src/test/kotlin/com/jetbrains/rider/plugins/fsharp/test/cases/debugger/FSharpSteppingTest.kt index 9fc0be3990..7c4796a2ce 100644 --- a/rider-fsharp/src/test/kotlin/com/jetbrains/rider/plugins/fsharp/test/cases/debugger/FSharpSteppingTest.kt +++ b/rider-fsharp/src/test/kotlin/com/jetbrains/rider/plugins/fsharp/test/cases/debugger/FSharpSteppingTest.kt @@ -39,4 +39,77 @@ class FSharpSteppingTest : DebuggerTestBase() { resumeSession() }, true) } + + @Test + fun testStepIntoFunction() { + testDebugProgram({ + toggleBreakpoint("FunctionsModule.fs", 16) + toggleBreakpoint("FunctionsModule.fs", 17) + toggleBreakpoint("FunctionsModule.fs", 18) + toggleBreakpoint("FunctionsModule.fs", 19) + toggleBreakpoint("FunctionsLocal.fs", 16) + toggleBreakpoint("FunctionsLocal.fs", 17) + toggleBreakpoint("FunctionsLocal.fs", 18) + toggleBreakpoint("FunctionsLocal.fs", 19) + + }, { + waitForPause() + dumpFullCurrentData(message = "Stopped at module f1 call") + + stepInto() + dumpFullCurrentData(message = "Stepped into module f1") + resumeSession() + + waitForPause() + dumpFullCurrentData(message = "Stopped at module f2 call") + + stepInto() + dumpFullCurrentData(message = "Stepped into module f2") + resumeSession() + + waitForPause() + dumpFullCurrentData(message = "Stopped at module f3 call") + + stepInto() + dumpFullCurrentData(message = "Stepped into module f3") + resumeSession() + + waitForPause() + dumpFullCurrentData(message = "Stopped at module f4 call") + + stepInto() + dumpFullCurrentData(message = "Stepped into module f4") + resumeSession() + + waitForPause() + dumpFullCurrentData(message = "Stopped at local f1 call") + + stepInto() + dumpFullCurrentData(message = "Stepped into local f1") + resumeSession() + + waitForPause() + dumpFullCurrentData(message = "Stopped at local f2 call") + + stepInto() + dumpFullCurrentData(message = "Stepped into local f2") + resumeSession() + + waitForPause() + dumpFullCurrentData(message = "Stopped at local f3 call") + + stepInto() + dumpFullCurrentData(message = "Stepped into local f3") + resumeSession() + + waitForPause() + dumpFullCurrentData(message = "Stopped at local f4 call") + + stepInto() + dumpFullCurrentData(message = "Stepped into local f4") + + resumeSession() + }, true) + } + } diff --git a/rider-fsharp/src/test/testData/debugger/FSharpSteppingTest/testStepIntoFunction/gold/testStepIntoFunction.gold b/rider-fsharp/src/test/testData/debugger/FSharpSteppingTest/testStepIntoFunction/gold/testStepIntoFunction.gold new file mode 100644 index 0000000000..a660180d5a --- /dev/null +++ b/rider-fsharp/src/test/testData/debugger/FSharpSteppingTest/testStepIntoFunction/gold/testStepIntoFunction.gold @@ -0,0 +1,97 @@ +Stopped at module f1 call: +--> FunctionsModule.fs:16(138,143) // f1 () +FunctionsModule.run() in SteppingTests.dll + +Stepped into module f1: +--> FunctionsModule.fs:4(40,41) // 1 +FunctionsModule.f1() in SteppingTests.dll + +Stopped at module f2 call: +--> FunctionsModule.fs:17(156,160) // f2 1 +FunctionsModule.run() in SteppingTests.dll + +Stepped into module f2: +--> FunctionsModule.fs:7(58,63) // x + 1 +FunctionsModule.f2() in SteppingTests.dll + x = {int} 1 + +Stopped at module f3 call: +--> FunctionsModule.fs:18(173,179) // f3 1 2 +FunctionsModule.run() in SteppingTests.dll + +Stepped into module f3: +--> FunctionsModule.fs:10(82,87) // a + b +FunctionsModule.f3() in SteppingTests.dll + a = {int} 1 + b = {int} 2 + +Stopped at module f4 call: +--> FunctionsModule.fs:19(192,198) // f4 1 2 +FunctionsModule.run() in SteppingTests.dll + +Stepped into module f4: +--> FunctionsModule.fs:13(106,111) // a + 1 +FunctionsModule.f4() in SteppingTests.dll + a = {int} 1 + b = {int} 2 + +[Type variables] + +Stopped at local f1 call: +--> FunctionsLocal.fs:16(169,174) // f1 () +FunctionsLocal.run() in SteppingTests.dll + +f1 = FunctionsLocal.f1@5 + +f2 = FunctionsLocal.f2@8 + +f3 = FunctionsLocal.f3@11 + +f4 = FunctionsLocal.f4@13 + +Stepped into local f1: +--> FunctionsLocal.fs:5(60,61) // 1 +FunctionsLocal.f1@5.Invoke() in SteppingTests.dll + +this = FunctionsLocal.f1@5 + unitVar0 = {Unit} null + +Stopped at local f2 call: +--> FunctionsLocal.fs:17(187,191) // f2 1 +FunctionsLocal.run() in SteppingTests.dll + +f1 = FunctionsLocal.f1@5 + +f2 = FunctionsLocal.f2@8 + +f3 = FunctionsLocal.f3@11 + +f4 = FunctionsLocal.f4@13 + +Stepped into local f2: +--> FunctionsLocal.fs:8(86,91) // x + 1 +FunctionsLocal.f2@8.Invoke() in SteppingTests.dll + +this = FunctionsLocal.f2@8 + x = {int} 1 + +Stopped at local f3 call: +--> FunctionsLocal.fs:18(204,210) // f3 1 2 +FunctionsLocal.run() in SteppingTests.dll + +f1 = FunctionsLocal.f1@5 + +f2 = FunctionsLocal.f2@8 + +f3 = FunctionsLocal.f3@11 + +f4 = FunctionsLocal.f4@13 + +Stepped into local f3: +--> FunctionsLocal.fs:11(118,123) // a + b +FunctionsLocal.f3@11.Invoke() in SteppingTests.dll + +this = FunctionsLocal.f3@11 + a = {int} 1 + b = {int} 2 + +Stopped at local f4 call: +--> FunctionsLocal.fs:19(223,229) // f4 1 2 +FunctionsLocal.run() in SteppingTests.dll + +f1 = FunctionsLocal.f1@5 + +f2 = FunctionsLocal.f2@8 + +f3 = FunctionsLocal.f3@11 + +f4 = FunctionsLocal.f4@13 + +Stepped into local f4: +--> FunctionsLocal.fs:14(150,155) // a + 1 +FunctionsLocal.f4@13T.Invoke() in SteppingTests.dll + +this = FunctionsLocal.f4@13T + a = {int} 1 + b = {int} 2 + +[Type variables] + diff --git a/rider-fsharp/src/test/testData/solutions/SteppingTests/FunctionsLocal.fs b/rider-fsharp/src/test/testData/solutions/SteppingTests/FunctionsLocal.fs new file mode 100644 index 0000000000..4bb190f481 --- /dev/null +++ b/rider-fsharp/src/test/testData/solutions/SteppingTests/FunctionsLocal.fs @@ -0,0 +1,21 @@ +module FunctionsLocal + +let run () = + let f1 () = + 1 + + let f2 x = + x + 1 + + let f3 a b = + a + b + + let f4 a b = + a + 1 + + let _ = f1 () + let _ = f2 1 + let _ = f3 1 2 + let _ = f4 1 2 + + () diff --git a/rider-fsharp/src/test/testData/solutions/SteppingTests/FunctionsModule.fs b/rider-fsharp/src/test/testData/solutions/SteppingTests/FunctionsModule.fs new file mode 100644 index 0000000000..ab4d67b384 --- /dev/null +++ b/rider-fsharp/src/test/testData/solutions/SteppingTests/FunctionsModule.fs @@ -0,0 +1,21 @@ +module FunctionsModule + +let f1 () = + 1 + +let f2 x = + x + 1 + +let f3 a b = + a + b + +let f4 a b = + a + 1 + +let run () = + let _ = f1 () + let _ = f2 1 + let _ = f3 1 2 + let _ = f4 1 2 + + () diff --git a/rider-fsharp/src/test/testData/solutions/SteppingTests/Program.fs b/rider-fsharp/src/test/testData/solutions/SteppingTests/Program.fs index eca8f7e8f0..b0423ea2d8 100644 --- a/rider-fsharp/src/test/testData/solutions/SteppingTests/Program.fs +++ b/rider-fsharp/src/test/testData/solutions/SteppingTests/Program.fs @@ -3,3 +3,6 @@ type T() = () |> ignore let t = T() + +FunctionsModule.run() +FunctionsLocal.run() diff --git a/rider-fsharp/src/test/testData/solutions/SteppingTests/SteppingTests.fsproj b/rider-fsharp/src/test/testData/solutions/SteppingTests/SteppingTests.fsproj index cc698eae4f..e3fda01439 100644 --- a/rider-fsharp/src/test/testData/solutions/SteppingTests/SteppingTests.fsproj +++ b/rider-fsharp/src/test/testData/solutions/SteppingTests/SteppingTests.fsproj @@ -6,6 +6,8 @@ + +