提交 e9137a04 编写于 作者: G Gen Lu

Add unittests

上级 5c61156c
......@@ -2164,8 +2164,18 @@ private bool IsStreamSelectionInEditableBuffer(ITextSelection selection)
{
Debug.Assert(selection.Mode == TextSelectionMode.Stream);
return MapToEditableBuffer(selection.AnchorPoint.Position) != null ||
MapToEditableBuffer(selection.ActivePoint.Position) != null;
var editableBuffer = (ReadingStandardInput) ? StandardInputBuffer : CurrentLanguageBuffer;
var selectedSpans = selection.SelectedSpans;
foreach (var selectedSpan in selectedSpans)
{
var spans = TextView.BufferGraph.MapDownToBuffer(selectedSpan, SpanTrackingMode.EdgeInclusive, editableBuffer);
if (spans.Count > 0)
{
return true;
}
}
return false;
}
private bool ReduceBoxSelectionToEditableBox(bool isDelete = true)
......
......@@ -756,6 +756,467 @@ public void SelectAllInHeader()
Assert.Equal(new Span(0, fullText.Length), Window.TextView.Selection.SelectedSpans.Single().Span);
}
[Fact]
public void DeleteWithOutSelectionInReadOnlyArea()
{
Submit(
@"1",
@"1
");
Window.InsertCode("2");
var caret = Window.TextView.Caret;
// with empty selection, Delete() only handles caret movement,
// so we can only test caret location.
// Delete() with caret in readonly area, no-op
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
AssertCaretVirtualPosition(1, 1);
Task.Run(() => Window.Operations.Delete()).PumpingWait();
AssertCaretVirtualPosition(1, 1);
// Delete() with caret in active prompt, move caret to
// closest editable buffer
caret.MoveToNextCaretPosition();
AssertCaretVirtualPosition(2, 0);
Task.Run(() => Window.Operations.Delete()).PumpingWait();
AssertCaretVirtualPosition(2, 2);
}
[Fact]
public void DeleteWithSelectionInReadonlyArea()
{
Submit(
@"1",
@"1
");
Window.InsertCode("23");
var caret = Window.TextView.Caret;
var selection = Window.TextView.Selection;
// Delete() with selection in readonly area, no-op
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
AssertCaretVirtualPosition(1, 1);
Window.Operations.SelectAll();
Task.Run(() => Window.Operations.Delete()).PumpingWait();
Assert.Equal("> 1\r\n1\r\n> 23", Window.TextView.TextBuffer.CurrentSnapshot.GetText());
// Delete() with selection in active prompt, no-op
selection.Clear();
var start = caret.MoveToNextCaretPosition().VirtualBufferPosition;
caret.MoveToNextCaretPosition();
var end = caret.MoveToNextCaretPosition().VirtualBufferPosition;
AssertCaretVirtualPosition(2, 2);
selection.Select(start, end);
Task.Run(() => Window.Operations.Delete()).PumpingWait();
Assert.Equal("> 1\r\n1\r\n> 23", Window.TextView.TextBuffer.CurrentSnapshot.GetText());
// Delete() with selection overlaps with editable buffer,
// delete editable content and move caret to closest editable location
selection.Clear();
caret.MoveToPreviousCaretPosition();
start = caret.MoveToPreviousCaretPosition().VirtualBufferPosition;
caret.MoveToNextCaretPosition();
caret.MoveToNextCaretPosition();
end = caret.MoveToNextCaretPosition().VirtualBufferPosition;
AssertCaretVirtualPosition(2, 3);
selection.Select(start, end);
Task.Run(() => Window.Operations.Delete()).PumpingWait();
Assert.Equal("> 1\r\n1\r\n> 3", Window.TextView.TextBuffer.CurrentSnapshot.GetText());
AssertCaretVirtualPosition(2, 2);
}
[Fact]
public void BackspaceWithOutSelectionInReadOnlyArea()
{
Submit(
@"1",
@"1
");
Window.InsertCode("int x");
Window.Operations.BreakLine();
Window.InsertCode(";");
var caret = Window.TextView.Caret;
// Backspace() with caret in readonly area, no-op
Window.Operations.Home(false);
Window.Operations.Home(false);
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
Window.Operations.Home(false);
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
AssertCaretVirtualPosition(1, 1);
Task.Run(() => Window.Operations.Backspace()).PumpingWait();
AssertCaretVirtualPosition(1, 1);
Assert.Equal("> 1\r\n1\r\n> int x\r\n> ;", Window.TextView.TextBuffer.CurrentSnapshot.GetText());
// Backspace() with caret in 2nd active prompt, move caret to
// closest editable buffer then delete prvious characer (breakline)
caret.MoveToNextCaretPosition();
Window.Operations.End(false);
caret.MoveToNextCaretPosition();
caret.MoveToNextCaretPosition();
AssertCaretVirtualPosition(3, 1);
Task.Run(() => Window.Operations.Backspace()).PumpingWait();
AssertCaretVirtualPosition(2, 7);
Assert.Equal("> 1\r\n1\r\n> int x;", Window.TextView.TextBuffer.CurrentSnapshot.GetText());
}
[Fact]
public void BackspaceWithSelectionInReadonlyArea()
{
Submit(
@"1",
@"1
");
Window.InsertCode("int x");
Window.Operations.BreakLine();
Window.InsertCode(";");
var caret = Window.TextView.Caret;
var selection = Window.TextView.Selection;
// Backspace() with selection in readonly area, no-op
Window.Operations.Home(false);
Window.Operations.Home(false);
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
Window.Operations.Home(false);
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
AssertCaretVirtualPosition(1, 1);
Window.Operations.SelectAll();
Task.Run(() => Window.Operations.Backspace()).PumpingWait();
Assert.Equal("> 1\r\n1\r\n> int x\r\n> ;", Window.TextView.TextBuffer.CurrentSnapshot.GetText());
// Backspace() with selection in active prompt, no-op
selection.Clear();
var start = caret.MoveToNextCaretPosition().VirtualBufferPosition;
caret.MoveToNextCaretPosition();
var end = caret.MoveToNextCaretPosition().VirtualBufferPosition;
AssertCaretVirtualPosition(2, 2);
selection.Select(start, end);
Task.Run(() => Window.Operations.Backspace()).PumpingWait();
Assert.Equal("> 1\r\n1\r\n> int x\r\n> ;", Window.TextView.TextBuffer.CurrentSnapshot.GetText());
// Backspace() with selection overlaps with editable buffer
selection.Clear();
Window.Operations.End(false);
start = caret.Position.VirtualBufferPosition;
caret.MoveToNextCaretPosition();
caret.MoveToNextCaretPosition();
end = caret.MoveToNextCaretPosition().VirtualBufferPosition;
AssertCaretVirtualPosition(3, 2);
selection.Select(start, end);
Task.Run(() => Window.Operations.Backspace()).PumpingWait();
Assert.Equal("> 1\r\n1\r\n> int x;", Window.TextView.TextBuffer.CurrentSnapshot.GetText());
AssertCaretVirtualPosition(2, 7);
}
[Fact]
public void ReturnWithOutSelectionInReadOnlyArea()
{
Submit(
@"1",
@"1
");
var caret = Window.TextView.Caret;
// Return() with caret in readonly area, no-op
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
AssertCaretVirtualPosition(1, 1);
Task.Run(() => Window.Operations.Return()).PumpingWait();
AssertCaretVirtualPosition(1, 1);
// Return() with caret in active prompt, move caret to
// closest editable buffer first
caret.MoveToNextCaretPosition();
AssertCaretVirtualPosition(2, 0);
Task.Run(() => Window.Operations.Return()).PumpingWait();
AssertCaretVirtualPosition(3, 2);
}
[Fact]
public void ReturnWithSelectionInReadonlyArea()
{
Submit(
@"1",
@"1
");
Window.InsertCode("23");
var caret = Window.TextView.Caret;
var selection = Window.TextView.Selection;
// Return() with selection in readonly area, no-op
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
AssertCaretVirtualPosition(1, 1);
Window.Operations.SelectAll();
Task.Run(() => Window.Operations.Return()).PumpingWait();
Assert.Equal("> 1\r\n1\r\n> 23", Window.TextView.TextBuffer.CurrentSnapshot.GetText());
// Return() with selection in active prompt, no-op
selection.Clear();
var start = caret.MoveToNextCaretPosition().VirtualBufferPosition;
caret.MoveToNextCaretPosition();
var end = caret.MoveToNextCaretPosition().VirtualBufferPosition;
AssertCaretVirtualPosition(2, 2);
selection.Select(start, end);
Task.Run(() => Window.Operations.Return()).PumpingWait();
Assert.Equal("> 1\r\n1\r\n> 23", Window.TextView.TextBuffer.CurrentSnapshot.GetText());
// Delete() with selection overlaps with editable buffer,
// delete editable content and move caret to closest editable location and insert a return
selection.Clear();
caret.MoveToPreviousCaretPosition();
start = caret.MoveToPreviousCaretPosition().VirtualBufferPosition;
caret.MoveToNextCaretPosition();
caret.MoveToNextCaretPosition();
end = caret.MoveToNextCaretPosition().VirtualBufferPosition;
AssertCaretVirtualPosition(2, 3);
selection.Select(start, end);
Task.Run(() => Window.Operations.Return()).PumpingWait();
Assert.Equal("> 1\r\n1\r\n> \r\n> 3", Window.TextView.TextBuffer.CurrentSnapshot.GetText());
AssertCaretVirtualPosition(3, 2);
}
[Fact]
public void CutWithOutSelectionInReadOnlyArea()
{
Submit(
@"1",
@"1
");
Window.InsertCode("2");
var caret = Window.TextView.Caret;
Clipboard.Clear();
// Cut() with caret in readonly area, no-op
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
AssertCaretVirtualPosition(1, 1);
Task.Run(() => Window.Operations.Cut()).PumpingWait();
Assert.Equal("> 1\r\n1\r\n> 2", Window.TextView.TextBuffer.CurrentSnapshot.GetText());
AssertCaretVirtualPosition(1, 1);
VerifyClipboardData(null);
// Cut() with caret in active prompt
caret.MoveToNextCaretPosition();
AssertCaretVirtualPosition(2, 0);
Task.Run(() => Window.Operations.Cut()).PumpingWait();
Assert.Equal("> 1\r\n1\r\n> ", Window.TextView.TextBuffer.CurrentSnapshot.GetText());
AssertCaretVirtualPosition(2, 2);
VerifyClipboardData("2", expectedRtf: null);
}
[Fact]
public void CutWithSelectionInReadonlyArea()
{
Submit(
@"1",
@"1
");
Window.InsertCode("23");
var caret = Window.TextView.Caret;
var selection = Window.TextView.Selection;
Clipboard.Clear();
// Cut() with selection in readonly area, no-op
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
AssertCaretVirtualPosition(1, 1);
Window.Operations.SelectAll();
Task.Run(() => Window.Operations.Cut()).PumpingWait();
Assert.Equal("> 1\r\n1\r\n> 23", Window.TextView.TextBuffer.CurrentSnapshot.GetText());
VerifyClipboardData(null);
// Cut() with selection in active prompt, no-op
selection.Clear();
var start = caret.MoveToNextCaretPosition().VirtualBufferPosition;
caret.MoveToNextCaretPosition();
var end = caret.MoveToNextCaretPosition().VirtualBufferPosition;
AssertCaretVirtualPosition(2, 2);
selection.Select(start, end);
Task.Run(() => Window.Operations.Cut()).PumpingWait();
Assert.Equal("> 1\r\n1\r\n> 23", Window.TextView.TextBuffer.CurrentSnapshot.GetText());
VerifyClipboardData(null);
// Cut() with selection overlaps with editable buffer,
// Cut editable content and move caret to closest editable location
selection.Clear();
caret.MoveToPreviousCaretPosition();
start = caret.MoveToPreviousCaretPosition().VirtualBufferPosition;
caret.MoveToNextCaretPosition();
caret.MoveToNextCaretPosition();
end = caret.MoveToNextCaretPosition().VirtualBufferPosition;
AssertCaretVirtualPosition(2, 3);
selection.Select(start, end);
Task.Run(() => Window.Operations.Cut()).PumpingWait();
Assert.Equal("> 1\r\n1\r\n> 3", Window.TextView.TextBuffer.CurrentSnapshot.GetText());
AssertCaretVirtualPosition(2, 2);
VerifyClipboardData("2", expectedRtf: null);
}
[Fact]
public void PasteWithOutSelectionInReadOnlyArea()
{
Submit(
@"1",
@"1
");
Window.InsertCode("2");
var caret = Window.TextView.Caret;
Clipboard.Clear();
Window.Operations.Home(true);
Window.Operations.Copy();
VerifyClipboardData("2", @"\ansi{\fonttbl{\f0 Consolas;}}{\colortbl;\red0\green0\blue0;\red255\green255\blue255;}\f0 \fs24 \cf1 \cb2 \highlight2 2");
// Paste() with caret in readonly area, no-op
Window.TextView.Selection.Clear();
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
AssertCaretVirtualPosition(1, 1);
Task.Run(() => Window.Operations.Paste()).PumpingWait();
Assert.Equal("> 1\r\n1\r\n> 2", Window.TextView.TextBuffer.CurrentSnapshot.GetText());
AssertCaretVirtualPosition(1, 1);
// Paste() with caret in active prompt
caret.MoveToNextCaretPosition();
AssertCaretVirtualPosition(2, 0);
Task.Run(() => Window.Operations.Paste()).PumpingWait();
Assert.Equal("> 1\r\n1\r\n> 22", Window.TextView.TextBuffer.CurrentSnapshot.GetText());
AssertCaretVirtualPosition(2, 3);
}
[Fact]
public void PasteWithSelectionInReadonlyArea()
{
Submit(
@"1",
@"1
");
Window.InsertCode("23");
var caret = Window.TextView.Caret;
var selection = Window.TextView.Selection;
Clipboard.Clear();
Window.Operations.Home(true);
Window.Operations.Copy();
VerifyClipboardData("23", @"\ansi{\fonttbl{\f0 Consolas;}}{\colortbl;\red0\green0\blue0;\red255\green255\blue255;}\f0 \fs24 \cf1 \cb2 \highlight2 23");
// Paste() with selection in readonly area, no-op
selection.Clear();
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
caret.MoveToPreviousCaretPosition();
AssertCaretVirtualPosition(1, 1);
Window.Operations.SelectAll();
Task.Run(() => Window.Operations.Paste()).PumpingWait();
Assert.Equal("> 1\r\n1\r\n> 23", Window.TextView.TextBuffer.CurrentSnapshot.GetText());
// Paste() with selection in active prompt, no-op
selection.Clear();
var start = caret.MoveToNextCaretPosition().VirtualBufferPosition;
caret.MoveToNextCaretPosition();
var end = caret.MoveToNextCaretPosition().VirtualBufferPosition;
AssertCaretVirtualPosition(2, 2);
selection.Select(start, end);
Task.Run(() => Window.Operations.Paste()).PumpingWait();
Assert.Equal("> 1\r\n1\r\n> 23", Window.TextView.TextBuffer.CurrentSnapshot.GetText());
// Paste() with selection overlaps with editable buffer,
// Cut editable content, move caret to closest editable location and insert text
selection.Clear();
caret.MoveToPreviousCaretPosition();
start = caret.MoveToPreviousCaretPosition().VirtualBufferPosition;
caret.MoveToNextCaretPosition();
caret.MoveToNextCaretPosition();
end = caret.MoveToNextCaretPosition().VirtualBufferPosition;
AssertCaretVirtualPosition(2, 3);
selection.Select(start, end);
Task.Run(() => Window.Operations.Paste()).PumpingWait();
Assert.Equal("> 1\r\n1\r\n> 233", Window.TextView.TextBuffer.CurrentSnapshot.GetText());
AssertCaretVirtualPosition(2, 4);
}
private void Submit(string submission, string output)
{
Task.Run(() => Window.SubmitAsync(new[] { submission })).PumpingWait();
......
......@@ -57,7 +57,7 @@ public Task<ExecutionResult> ExecuteCodeAsync(string text)
public string FormatClipboard()
{
return "";
return null;
}
public void AbortExecution()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册