提交 43f37d74 编写于 作者: S Shyam N

Merge pull request #9894 from huguesv/emptylinenooption

Allow interactive window evaluation of empty line.
......@@ -845,36 +845,30 @@ private async Task SubmitAsync()
var snapshotSpan = CurrentLanguageBuffer.CurrentSnapshot.GetExtent();
var trimmedSpan = snapshotSpan.TrimEnd();
if (trimmedSpan.Length == 0)
{
// TODO: reuse the current language buffer
PrepareForInput();
return;
}
else
if (trimmedSpan.Length > 0)
{
_history.Add(historySpan);
State = State.ExecutingInput;
}
StartCursorTimer();
State = State.ExecutingInput;
var executionResult = await Evaluator.ExecuteCodeAsync(snapshotSpan.GetText()).ConfigureAwait(true);
Debug.Assert(_window.OnUIThread()); // ConfigureAwait should bring us back to the UI thread.
StartCursorTimer();
// For reset command typed at prompt -> the state should be WaitingForInput.
// For all other submissions on the prompt -> it should be Executing input.
// If reset button is clicked during a long running submission -> it could be Resetting because
// oldService is disposed first as part of resetting, which leads to await call above returning, and new service is
// created after that as part of completing the resetting process.
Debug.Assert(State == State.ExecutingInput ||
State == State.WaitingForInput ||
State == State.Resetting, $"Unexpected state {State}");
var executionResult = await Evaluator.ExecuteCodeAsync(snapshotSpan.GetText()).ConfigureAwait(true);
Debug.Assert(_window.OnUIThread()); // ConfigureAwait should bring us back to the UI thread.
if (State == State.ExecutingInput)
{
FinishExecute(executionResult.IsSuccessful);
}
// For reset command typed at prompt -> the state should be WaitingForInput.
// For all other submissions on the prompt -> it should be Executing input.
// If reset button is clicked during a long running submission -> it could be Resetting because
// oldService is disposed first as part of resetting, which leads to await call above returning, and new service is
// created after that as part of completing the resetting process.
Debug.Assert(State == State.ExecutingInput ||
State == State.WaitingForInput ||
State == State.Resetting, $"Unexpected state {State}");
if (State == State.ExecutingInput)
{
FinishExecute(executionResult.IsSuccessful);
}
}
catch (Exception e) when (_window.ReportAndPropagateException(e))
......
......@@ -76,6 +76,29 @@ public async Task CheckHistoryPrevious()
AssertCurrentSubmission(inputString);
}
[WpfFact]
public async Task CheckHistoryPreviousWithAnEmptySubmission() {
//submit, submit, submit, up, up, up
const string inputString1 = "1 ";
const string inputString2 = " ";
const string inputString3 = "3 ";
await InsertAndExecuteInput(inputString1).ConfigureAwait(true);
await InsertAndExecuteInput(inputString2).ConfigureAwait(true);
await InsertAndExecuteInput(inputString3).ConfigureAwait(true);
_operations.HistoryPrevious();
AssertCurrentSubmission(inputString3);
//second input was empty, so it wasn't added to history
_operations.HistoryPrevious();
AssertCurrentSubmission(inputString1);
//has reached the top, no change
_operations.HistoryPrevious();
AssertCurrentSubmission(inputString1);
}
[WpfFact]
public async Task CheckHistoryPreviousNotCircular()
{
......
......@@ -1089,6 +1089,13 @@ public async Task SubmitAsyncMultiple()
await SubmitAsync("1", "2", "1 + 2").ConfigureAwait(true);
}
[WorkItem(8569, "https://github.com/dotnet/roslyn/issues/8569")]
[WpfFact]
public async Task SubmitAsyncEmptyLine()
{
await SubmitAsync("1", "", "1 + 2").ConfigureAwait(true);
}
private async Task SubmitAsync(params string[] submissions)
{
var actualSubmissions = new List<string>();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册