mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-27 16:27:55 +01:00
* Fixes #1133. Flaw in LayoutSubviews/TopologicalSort. * Toplevel can't be used on Pos/Dim but only his subviews. Was not caught before because the LayoutSubviews method never gone so deep before. * Fixed the error that is triggered when the Pos/Dim is the current Application.Top. * Application.Top is the only exception in the TopologicalSort method check. * Fixes #1179. TextView does not copy to the clipboard on deleting. * Added Button DoubleClick and fixed WordForward/WordBackward issues. * Prevents a negative height. * Fixes the enter key line feed. * Fixes #1187. Prevents WordBackward throwing an exception if point is greater than the text length. * Fixes #1189. Prevents negative index. * Fixes #1193. A non auto size default Button now preserves his width and thus the text alignment now work. * Fixing the Width and Height checks of the Dim class with AutoSize dependence. * Fixes #1197. Prevents width negative value if added directly to the Application.Top * Fixes #1199. Normalize views constructors and did some typo fixing. * Fixing the Application.Top Pos/Dim settings. * Always uses inverted color for selected text to avoid same colors. * Prevents throw an exception if the clipboard content is null. * Added Find and Replace (next/previous). Replace All and Select All. A non modal dialog box. * Keeps tracking the selected replaced text. * Fixes #1202. CheckBox now deals with a functional '_' underscore hotkey. * The selected text should be maintained when losing focus. * Fixes an extra line on page down. * Fixes the WordBackward if it text has more than one whitespaces or when has only one digit or letter. * Fixes WordForward/WordBackward on text with more than one whitespace or with only one digit or letter. * Forgot to replace the hacking. * Added unit tests for the TextField view. Fixed some more bugs. * Redraw should only show the selected text if it is focused. * Fixes cursor position on double click and ensures the setting of the selected text. * Added match whole word checking. * Added missing parameters documentation. * Ensures the SelectedLength property to be always with positive value. * Fixes the WordBackward when at the end of the text has a character between two whitespace. * Added unit tests to the TextView, Used property and fixed some more bugs. * Fixed Used to only show if it has focus. * Fixed ReplaceAll and prevents Debug.Assert from showing.
798 lines
30 KiB
C#
798 lines
30 KiB
C#
using Xunit;
|
|
|
|
namespace Terminal.Gui {
|
|
public class TextViewTests {
|
|
private TextView _textView;
|
|
|
|
public TextViewTests ()
|
|
{
|
|
Application.Init (new FakeDriver (), new FakeMainLoop (() => FakeConsole.ReadKey (true)));
|
|
|
|
// 1 2 3
|
|
// 01234567890123456789012345678901=32 (Length)
|
|
var txt = "TAB to jump between text fields.";
|
|
var buff = new byte [txt.Length];
|
|
for (int i = 0; i < txt.Length; i++) {
|
|
buff [i] = (byte)txt [i];
|
|
}
|
|
var ms = new System.IO.MemoryStream (buff).ToArray ();
|
|
_textView = new TextView () { Width = 30, Height = 10 };
|
|
_textView.Text = ms;
|
|
}
|
|
|
|
[Fact]
|
|
public void Changing_Selection_Or_CursorPosition_Update_SelectedLength_And_SelectedText ()
|
|
{
|
|
_textView.SelectionStartColumn = 2;
|
|
_textView.SelectionStartRow = 0;
|
|
Assert.Equal (0, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (2, _textView.SelectedLength);
|
|
Assert.Equal ("TA", _textView.SelectedText);
|
|
_textView.CursorPosition = new Point (20, 0);
|
|
Assert.Equal (2, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (18, _textView.SelectedLength);
|
|
Assert.Equal ("B to jump between ", _textView.SelectedText);
|
|
}
|
|
|
|
[Fact]
|
|
public void Selection_With_Value_Less_Than_Zero_Changes_To_Zero ()
|
|
{
|
|
_textView.SelectionStartColumn = -2;
|
|
_textView.SelectionStartRow = -2;
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
}
|
|
|
|
[Fact]
|
|
public void Selection_With_Value_Greater_Than_Text_Length_Changes_To_Text_Length ()
|
|
{
|
|
_textView.CursorPosition = new Point (2, 0);
|
|
_textView.SelectionStartColumn = 33;
|
|
_textView.SelectionStartRow = 1;
|
|
Assert.Equal (32, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (30, _textView.SelectedLength);
|
|
Assert.Equal ("B to jump between text fields.", _textView.SelectedText);
|
|
}
|
|
|
|
[Fact]
|
|
public void Selection_With_Empty_Text ()
|
|
{
|
|
_textView = new TextView ();
|
|
_textView.CursorPosition = new Point (2, 0);
|
|
_textView.SelectionStartColumn = 33;
|
|
_textView.SelectionStartRow = 1;
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
}
|
|
|
|
[Fact]
|
|
public void Selection_And_CursorPosition_With_Value_Greater_Than_Text_Length_Changes_Both_To_Text_Length ()
|
|
{
|
|
_textView.CursorPosition = new Point (33, 2);
|
|
_textView.SelectionStartColumn = 33;
|
|
_textView.SelectionStartRow = 33;
|
|
Assert.Equal (32, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (32, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
}
|
|
|
|
[Fact]
|
|
public void CursorPosition_With_Value_Less_Than_Zero_Changes_To_Zero ()
|
|
{
|
|
_textView.CursorPosition = new Point (-1, -1);
|
|
Assert.Equal (0, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
}
|
|
|
|
[Fact]
|
|
public void CursorPosition_With_Value_Greater_Than_Text_Length_Changes_To_Text_Length ()
|
|
{
|
|
_textView.CursorPosition = new Point (33, 1);
|
|
Assert.Equal (32, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
}
|
|
|
|
[Fact]
|
|
public void WordForward_With_No_Selection ()
|
|
{
|
|
_textView.CursorPosition = new Point (0, 0);
|
|
var iteration = 0;
|
|
|
|
while (_textView.CursorPosition.X < _textView.Text.Length) {
|
|
_textView.ProcessKey (new KeyEvent (Key.CursorRight | Key.CtrlMask, new KeyModifiers ()));
|
|
switch (iteration) {
|
|
case 0:
|
|
Assert.Equal (4, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 1:
|
|
Assert.Equal (7, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 2:
|
|
Assert.Equal (12, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 3:
|
|
Assert.Equal (20, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 4:
|
|
Assert.Equal (25, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 5:
|
|
Assert.Equal (32, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
}
|
|
iteration++;
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void WordBackward_With_No_Selection ()
|
|
{
|
|
_textView.CursorPosition = new Point (_textView.Text.Length, 0);
|
|
var iteration = 0;
|
|
|
|
while (_textView.CursorPosition.X > 0) {
|
|
_textView.ProcessKey (new KeyEvent (Key.CursorLeft | Key.CtrlMask, new KeyModifiers ()));
|
|
switch (iteration) {
|
|
case 0:
|
|
Assert.Equal (25, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 1:
|
|
Assert.Equal (20, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 2:
|
|
Assert.Equal (12, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 3:
|
|
Assert.Equal (7, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 4:
|
|
Assert.Equal (4, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 5:
|
|
Assert.Equal (0, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
}
|
|
iteration++;
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void WordForward_With_Selection ()
|
|
{
|
|
_textView.CursorPosition = new Point (0, 0);
|
|
_textView.SelectionStartColumn = 0;
|
|
_textView.SelectionStartRow = 0;
|
|
var iteration = 0;
|
|
|
|
while (_textView.CursorPosition.X < _textView.Text.Length) {
|
|
_textView.ProcessKey (new KeyEvent (Key.CursorRight | Key.CtrlMask | Key.ShiftMask, new KeyModifiers ()));
|
|
switch (iteration) {
|
|
case 0:
|
|
Assert.Equal (4, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (4, _textView.SelectedLength);
|
|
Assert.Equal ("TAB ", _textView.SelectedText);
|
|
break;
|
|
case 1:
|
|
Assert.Equal (7, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (7, _textView.SelectedLength);
|
|
Assert.Equal ("TAB to ", _textView.SelectedText);
|
|
break;
|
|
case 2:
|
|
Assert.Equal (12, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (12, _textView.SelectedLength);
|
|
Assert.Equal ("TAB to jump ", _textView.SelectedText);
|
|
break;
|
|
case 3:
|
|
Assert.Equal (20, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (20, _textView.SelectedLength);
|
|
Assert.Equal ("TAB to jump between ", _textView.SelectedText);
|
|
break;
|
|
case 4:
|
|
Assert.Equal (25, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (25, _textView.SelectedLength);
|
|
Assert.Equal ("TAB to jump between text ", _textView.SelectedText);
|
|
break;
|
|
case 5:
|
|
Assert.Equal (32, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (32, _textView.SelectedLength);
|
|
Assert.Equal ("TAB to jump between text fields.", _textView.SelectedText);
|
|
break;
|
|
}
|
|
iteration++;
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void WordBackward_With_Selection ()
|
|
{
|
|
_textView.CursorPosition = new Point (_textView.Text.Length, 0);
|
|
_textView.SelectionStartColumn = _textView.Text.Length;
|
|
_textView.SelectionStartRow = 0;
|
|
var iteration = 0;
|
|
|
|
while (_textView.CursorPosition.X > 0) {
|
|
_textView.ProcessKey (new KeyEvent (Key.CursorLeft | Key.CtrlMask | Key.ShiftMask, new KeyModifiers ()));
|
|
switch (iteration) {
|
|
case 0:
|
|
Assert.Equal (25, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (32, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (7, _textView.SelectedLength);
|
|
Assert.Equal ("fields.", _textView.SelectedText);
|
|
break;
|
|
case 1:
|
|
Assert.Equal (20, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (32, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (12, _textView.SelectedLength);
|
|
Assert.Equal ("text fields.", _textView.SelectedText);
|
|
break;
|
|
case 2:
|
|
Assert.Equal (12, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (32, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (20, _textView.SelectedLength);
|
|
Assert.Equal ("between text fields.", _textView.SelectedText);
|
|
break;
|
|
case 3:
|
|
Assert.Equal (7, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (32, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (25, _textView.SelectedLength);
|
|
Assert.Equal ("jump between text fields.", _textView.SelectedText);
|
|
break;
|
|
case 4:
|
|
Assert.Equal (4, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (32, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (28, _textView.SelectedLength);
|
|
Assert.Equal ("to jump between text fields.", _textView.SelectedText);
|
|
break;
|
|
case 5:
|
|
Assert.Equal (0, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (32, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (32, _textView.SelectedLength);
|
|
Assert.Equal ("TAB to jump between text fields.", _textView.SelectedText);
|
|
break;
|
|
}
|
|
iteration++;
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void WordForward_With_The_Same_Values_For_SelectedStart_And_CursorPosition_And_Not_Starting_At_Beginning_Of_The_Text ()
|
|
{
|
|
_textView.CursorPosition = new Point (10, 0);
|
|
_textView.SelectionStartColumn = 10;
|
|
_textView.SelectionStartRow = 0;
|
|
var iteration = 0;
|
|
|
|
while (_textView.CursorPosition.X < _textView.Text.Length) {
|
|
_textView.ProcessKey (new KeyEvent (Key.CursorRight | Key.CtrlMask | Key.ShiftMask, new KeyModifiers ()));
|
|
switch (iteration) {
|
|
case 0:
|
|
Assert.Equal (12, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (10, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (2, _textView.SelectedLength);
|
|
Assert.Equal ("p ", _textView.SelectedText);
|
|
break;
|
|
case 1:
|
|
Assert.Equal (20, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (10, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (10, _textView.SelectedLength);
|
|
Assert.Equal ("p between ", _textView.SelectedText);
|
|
break;
|
|
case 2:
|
|
Assert.Equal (25, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (10, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (15, _textView.SelectedLength);
|
|
Assert.Equal ("p between text ", _textView.SelectedText);
|
|
break;
|
|
case 3:
|
|
Assert.Equal (32, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (10, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (22, _textView.SelectedLength);
|
|
Assert.Equal ("p between text fields.", _textView.SelectedText);
|
|
break;
|
|
}
|
|
iteration++;
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void WordBackward_With_The_Same_Values_For_SelectedStart_And_CursorPosition_And_Not_Starting_At_Beginning_Of_The_Text ()
|
|
{
|
|
_textView.CursorPosition = new Point (10, 0);
|
|
_textView.SelectionStartColumn = 10;
|
|
_textView.SelectionStartRow = 0;
|
|
var iteration = 0;
|
|
|
|
while (_textView.CursorPosition.X > 0) {
|
|
_textView.ProcessKey (new KeyEvent (Key.CursorLeft | Key.CtrlMask | Key.ShiftMask, new KeyModifiers ()));
|
|
switch (iteration) {
|
|
case 0:
|
|
Assert.Equal (7, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (10, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (3, _textView.SelectedLength);
|
|
Assert.Equal ("jum", _textView.SelectedText);
|
|
break;
|
|
case 1:
|
|
Assert.Equal (4, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (10, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (6, _textView.SelectedLength);
|
|
Assert.Equal ("to jum", _textView.SelectedText);
|
|
break;
|
|
case 2:
|
|
Assert.Equal (0, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (10, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (10, _textView.SelectedLength);
|
|
Assert.Equal ("TAB to jum", _textView.SelectedText);
|
|
break;
|
|
}
|
|
iteration++;
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void WordForward_With_No_Selection_And_With_More_Than_Only_One_Whitespace_And_With_Only_One_Letter ()
|
|
{
|
|
// 1 2 3 4 5
|
|
// 0123456789012345678901234567890123456789012345678901234=55 (Length)
|
|
_textView.Text = "TAB t o jump b etween t ext f ields .";
|
|
_textView.CursorPosition = new Point (0, 0);
|
|
var iteration = 0;
|
|
|
|
while (_textView.CursorPosition.X < _textView.Text.Length) {
|
|
_textView.ProcessKey (new KeyEvent (Key.CursorRight | Key.CtrlMask, new KeyModifiers ()));
|
|
switch (iteration) {
|
|
case 0:
|
|
Assert.Equal (6, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 1:
|
|
Assert.Equal (9, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 2:
|
|
Assert.Equal (12, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 3:
|
|
Assert.Equal (25, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 4:
|
|
Assert.Equal (28, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 5:
|
|
Assert.Equal (38, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 6:
|
|
Assert.Equal (40, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 7:
|
|
Assert.Equal (46, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 8:
|
|
Assert.Equal (48, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 9:
|
|
Assert.Equal (55, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
}
|
|
iteration++;
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void WordBackward_With_No_Selection_And_With_More_Than_Only_One_Whitespace_And_With_Only_One_Letter ()
|
|
{
|
|
// 1 2 3 4 5
|
|
// 0123456789012345678901234567890123456789012345678901234=55 (Length)
|
|
_textView.Text = "TAB t o jump b etween t ext f ields .";
|
|
_textView.CursorPosition = new Point (_textView.Text.Length, 0);
|
|
var iteration = 0;
|
|
|
|
while (_textView.CursorPosition.X > 0) {
|
|
_textView.ProcessKey (new KeyEvent (Key.CursorLeft | Key.CtrlMask, new KeyModifiers ()));
|
|
switch (iteration) {
|
|
case 0:
|
|
Assert.Equal (54, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 1:
|
|
Assert.Equal (48, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 2:
|
|
Assert.Equal (46, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 3:
|
|
Assert.Equal (40, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 4:
|
|
Assert.Equal (38, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 5:
|
|
Assert.Equal (28, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 6:
|
|
Assert.Equal (25, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 7:
|
|
Assert.Equal (12, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 8:
|
|
Assert.Equal (9, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 9:
|
|
Assert.Equal (6, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
case 10:
|
|
Assert.Equal (0, _textView.CursorPosition.X);
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
Assert.Equal (0, _textView.SelectionStartColumn);
|
|
Assert.Equal (0, _textView.SelectionStartRow);
|
|
Assert.Equal (0, _textView.SelectedLength);
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
break;
|
|
}
|
|
iteration++;
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void Copy_Or_Cut_Null_If_No_Selection ()
|
|
{
|
|
_textView.SelectionStartColumn = 0;
|
|
_textView.SelectionStartRow = 0;
|
|
_textView.Copy ();
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
_textView.Cut ();
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
}
|
|
|
|
[Fact]
|
|
public void Copy_Or_Cut_Not_Null_If_Has_Selection ()
|
|
{
|
|
_textView.SelectionStartColumn = 20;
|
|
_textView.SelectionStartRow = 0;
|
|
_textView.CursorPosition = new Point (24, 0);
|
|
_textView.Copy ();
|
|
Assert.Equal ("text", _textView.SelectedText);
|
|
_textView.Cut ();
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
}
|
|
|
|
[Fact]
|
|
public void Copy_Or_Cut_And_Paste_With_Selection ()
|
|
{
|
|
_textView.SelectionStartColumn = 20;
|
|
_textView.SelectionStartRow = 0;
|
|
_textView.CursorPosition = new Point (24, 0);
|
|
_textView.Copy ();
|
|
Assert.Equal ("text", _textView.SelectedText);
|
|
Assert.Equal ("TAB to jump between text fields.", _textView.Text);
|
|
_textView.Paste ();
|
|
Assert.Equal ("TAB to jump between text fields.", _textView.Text);
|
|
_textView.SelectionStartColumn = 20;
|
|
_textView.SelectionStartRow = 0;
|
|
_textView.Cut ();
|
|
_textView.Paste ();
|
|
Assert.Equal ("TAB to jump between text fields.", _textView.Text);
|
|
}
|
|
|
|
[Fact]
|
|
public void Copy_Or_Cut_And_Paste_With_No_Selection ()
|
|
{
|
|
_textView.SelectionStartColumn = 20;
|
|
_textView.SelectionStartRow = 0;
|
|
_textView.CursorPosition = new Point (24, 0);
|
|
_textView.Copy ();
|
|
Assert.Equal ("text", _textView.SelectedText);
|
|
Assert.Equal ("TAB to jump between text fields.", _textView.Text);
|
|
_textView.SelectionStartColumn = 0;
|
|
_textView.SelectionStartRow = 0;
|
|
Assert.True (_textView.Selecting);
|
|
_textView.Selecting = false;
|
|
_textView.Paste ();
|
|
Assert.Equal ("TAB to jump between texttext fields.", _textView.Text);
|
|
_textView.SelectionStartColumn = 24;
|
|
_textView.SelectionStartRow = 0;
|
|
_textView.Cut ();
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
Assert.Equal ("TAB to jump between text fields.", _textView.Text);
|
|
_textView.SelectionStartColumn = 0;
|
|
_textView.SelectionStartRow = 0;
|
|
Assert.True (_textView.Selecting);
|
|
_textView.Selecting = false;
|
|
_textView.Paste ();
|
|
Assert.Equal ("TAB to jump between texttext fields.", _textView.Text);
|
|
}
|
|
|
|
[Fact]
|
|
public void Cut_Not_Allowed_If_ReadOnly_Is_True ()
|
|
{
|
|
_textView.ReadOnly = true;
|
|
_textView.SelectionStartColumn = 20;
|
|
_textView.SelectionStartRow = 0;
|
|
_textView.CursorPosition = new Point (24, 0);
|
|
_textView.Copy ();
|
|
Assert.Equal ("text", _textView.SelectedText);
|
|
_textView.Cut (); // Selecting is set to false after Cut.
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
_textView.ReadOnly = false;
|
|
Assert.False (_textView.Selecting);
|
|
_textView.Selecting = true; // Needed to set Selecting to true.
|
|
_textView.Copy ();
|
|
Assert.Equal ("text", _textView.SelectedText);
|
|
_textView.Cut ();
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
}
|
|
|
|
[Fact]
|
|
public void Paste_Always_Clear_The_SelectedText ()
|
|
{
|
|
_textView.SelectionStartColumn = 20;
|
|
_textView.SelectionStartRow = 0;
|
|
_textView.CursorPosition = new Point (24, 0);
|
|
_textView.Copy ();
|
|
Assert.Equal ("text", _textView.SelectedText);
|
|
_textView.Paste ();
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
}
|
|
|
|
[Fact]
|
|
public void TextChanged_Event ()
|
|
{
|
|
_textView.TextChanged += () => {
|
|
if (_textView.Text == "changing") {
|
|
Assert.Equal ("changing", _textView.Text);
|
|
_textView.Text = "changed";
|
|
}
|
|
};
|
|
|
|
_textView.Text = "changing";
|
|
Assert.Equal ("changed", _textView.Text);
|
|
}
|
|
|
|
[Fact]
|
|
public void Used_Is_True_By_Default ()
|
|
{
|
|
_textView.CursorPosition = new Point (10, 0);
|
|
Assert.Equal ("TAB to jump between text fields.", _textView.Text);
|
|
_textView.ProcessKey (new KeyEvent ((Key)0x75, new KeyModifiers ())); // u
|
|
Assert.Equal ("TAB to jumup between text fields.", _textView.Text);
|
|
_textView.ProcessKey (new KeyEvent ((Key)0x73, new KeyModifiers ())); // s
|
|
Assert.Equal ("TAB to jumusp between text fields.", _textView.Text);
|
|
_textView.ProcessKey (new KeyEvent ((Key)0x65, new KeyModifiers ())); // e
|
|
Assert.Equal ("TAB to jumusep between text fields.", _textView.Text);
|
|
_textView.ProcessKey (new KeyEvent ((Key)0x64, new KeyModifiers ())); // d
|
|
Assert.Equal ("TAB to jumusedp between text fields.", _textView.Text);
|
|
}
|
|
|
|
[Fact]
|
|
public void Used_Is_False ()
|
|
{
|
|
_textView.Used = false;
|
|
_textView.CursorPosition = new Point (10, 0);
|
|
Assert.Equal ("TAB to jump between text fields.", _textView.Text);
|
|
_textView.ProcessKey (new KeyEvent ((Key)0x75, new KeyModifiers ())); // u
|
|
Assert.Equal ("TAB to jumu between text fields.", _textView.Text);
|
|
_textView.ProcessKey (new KeyEvent ((Key)0x73, new KeyModifiers ())); // s
|
|
Assert.Equal ("TAB to jumusbetween text fields.", _textView.Text);
|
|
_textView.ProcessKey (new KeyEvent ((Key)0x65, new KeyModifiers ())); // e
|
|
Assert.Equal ("TAB to jumuseetween text fields.", _textView.Text);
|
|
_textView.ProcessKey (new KeyEvent ((Key)0x64, new KeyModifiers ())); // d
|
|
Assert.Equal ("TAB to jumusedtween text fields.", _textView.Text);
|
|
}
|
|
}
|
|
}
|