提交 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() ...@@ -845,36 +845,30 @@ private async Task SubmitAsync()
var snapshotSpan = CurrentLanguageBuffer.CurrentSnapshot.GetExtent(); var snapshotSpan = CurrentLanguageBuffer.CurrentSnapshot.GetExtent();
var trimmedSpan = snapshotSpan.TrimEnd(); var trimmedSpan = snapshotSpan.TrimEnd();
if (trimmedSpan.Length > 0)
if (trimmedSpan.Length == 0)
{
// TODO: reuse the current language buffer
PrepareForInput();
return;
}
else
{ {
_history.Add(historySpan); _history.Add(historySpan);
State = State.ExecutingInput; }
StartCursorTimer(); State = State.ExecutingInput;
var executionResult = await Evaluator.ExecuteCodeAsync(snapshotSpan.GetText()).ConfigureAwait(true); StartCursorTimer();
Debug.Assert(_window.OnUIThread()); // ConfigureAwait should bring us back to the UI thread.
// For reset command typed at prompt -> the state should be WaitingForInput. var executionResult = await Evaluator.ExecuteCodeAsync(snapshotSpan.GetText()).ConfigureAwait(true);
// For all other submissions on the prompt -> it should be Executing input. Debug.Assert(_window.OnUIThread()); // ConfigureAwait should bring us back to the UI thread.
// 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) // For reset command typed at prompt -> the state should be WaitingForInput.
{ // For all other submissions on the prompt -> it should be Executing input.
FinishExecute(executionResult.IsSuccessful); // 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)) catch (Exception e) when (_window.ReportAndPropagateException(e))
......
...@@ -76,6 +76,29 @@ public async Task CheckHistoryPrevious() ...@@ -76,6 +76,29 @@ public async Task CheckHistoryPrevious()
AssertCurrentSubmission(inputString); 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] [WpfFact]
public async Task CheckHistoryPreviousNotCircular() public async Task CheckHistoryPreviousNotCircular()
{ {
......
...@@ -1089,6 +1089,13 @@ public async Task SubmitAsyncMultiple() ...@@ -1089,6 +1089,13 @@ public async Task SubmitAsyncMultiple()
await SubmitAsync("1", "2", "1 + 2").ConfigureAwait(true); 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) private async Task SubmitAsync(params string[] submissions)
{ {
var actualSubmissions = new List<string>(); var actualSubmissions = new List<string>();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册