public void AlgorithmInterpreterStepOut() { var program = CreateBasicRecursivityProgramWithOneBreakpoint(); var algorithmInterpreter = new AlgorithmInterpreter(program); algorithmInterpreter.StartAsync(debugMode: true); Task.Delay(TimeSpan.FromSeconds(5)).Wait(); Assert.AreEqual(algorithmInterpreter.StateChangeHistory[95].State, AlgorithmInterpreterState.PauseBreakpoint); Assert.AreEqual(algorithmInterpreter.DebugInfo.CallStackService.CallStacks.First().Stack.Count, 8); Assert.AreEqual(algorithmInterpreter.DebugInfo.CallStackService.CallStacks.First().Stack.First().Variables[0].Name, "num"); Assert.AreEqual(algorithmInterpreter.DebugInfo.CallStackService.CallStacks.First().Stack.First().Variables[0].Value, (long)4); algorithmInterpreter.StepInto(); Task.Delay(TimeSpan.FromSeconds(2)).Wait(); Assert.AreEqual(algorithmInterpreter.DebugInfo.CallStackService.CallStacks.First().Stack.First().Variables[0].Value, (long)4); algorithmInterpreter.StepOut(); Task.Delay(TimeSpan.FromSeconds(2)).Wait(); Assert.AreEqual(algorithmInterpreter.DebugInfo.CallStackService.CallStacks.First().Stack.First().Variables[0].Value, (long)1); algorithmInterpreter.Resume(); Task.Delay(TimeSpan.FromSeconds(2)).Wait(); Assert.AreEqual(algorithmInterpreter.StateChangeHistory[0].State, AlgorithmInterpreterState.Ready); Assert.AreEqual(algorithmInterpreter.StateChangeHistory[1].State, AlgorithmInterpreterState.Preparing); Assert.AreEqual(algorithmInterpreter.StateChangeHistory[2].State, AlgorithmInterpreterState.Running); Assert.AreEqual(algorithmInterpreter.StateChangeHistory[3].State, AlgorithmInterpreterState.Log); Assert.AreEqual(algorithmInterpreter.StateChangeHistory[176].State, AlgorithmInterpreterState.Stopped); Assert.AreEqual(algorithmInterpreter.State, AlgorithmInterpreterState.Stopped); AlgorithmInterpreter_Test.RunProgramWithoutDebug(program); }