|
@@ -1,4 +1,5 @@
|
|
|
using System;
|
|
|
+using System.Linq;
|
|
|
using Xunit;
|
|
|
|
|
|
namespace Terminal.Gui.Views {
|
|
@@ -900,7 +901,7 @@ namespace Terminal.Gui.Views {
|
|
|
Assert.Equal (0, _textView.CursorPosition.X);
|
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
|
Assert.Equal ("", _textView.Text);
|
|
|
- _textView.Paste ();
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.Y | Key.CtrlMask, new KeyModifiers ())); // Paste
|
|
|
Assert.Equal ("This is the second line.", _textView.Text);
|
|
|
break;
|
|
|
default:
|
|
@@ -936,7 +937,7 @@ namespace Terminal.Gui.Views {
|
|
|
Assert.Equal (0, _textView.CursorPosition.X);
|
|
|
Assert.Equal (0, _textView.CursorPosition.Y);
|
|
|
Assert.Equal ("", _textView.Text);
|
|
|
- _textView.Paste ();
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.Y | Key.CtrlMask, new KeyModifiers ())); // Paste
|
|
|
Assert.Equal ("This is the first line.", _textView.Text);
|
|
|
break;
|
|
|
default:
|
|
@@ -1197,9 +1198,9 @@ namespace Terminal.Gui.Views {
|
|
|
{
|
|
|
_textView.SelectionStartColumn = 0;
|
|
|
_textView.SelectionStartRow = 0;
|
|
|
- _textView.Copy ();
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.C | Key.CtrlMask, new KeyModifiers ())); // Copy
|
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
|
- _textView.Cut ();
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.W | Key.CtrlMask, new KeyModifiers ())); // Cut
|
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
|
}
|
|
|
|
|
@@ -1209,9 +1210,9 @@ namespace Terminal.Gui.Views {
|
|
|
_textView.SelectionStartColumn = 20;
|
|
|
_textView.SelectionStartRow = 0;
|
|
|
_textView.CursorPosition = new Point (24, 0);
|
|
|
- _textView.Copy ();
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.C | Key.CtrlMask, new KeyModifiers ())); // Copy
|
|
|
Assert.Equal ("text", _textView.SelectedText);
|
|
|
- _textView.Cut ();
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.W | Key.CtrlMask, new KeyModifiers ())); // Cut
|
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
|
}
|
|
|
|
|
@@ -1221,15 +1222,15 @@ namespace Terminal.Gui.Views {
|
|
|
_textView.SelectionStartColumn = 20;
|
|
|
_textView.SelectionStartRow = 0;
|
|
|
_textView.CursorPosition = new Point (24, 0);
|
|
|
- _textView.Copy ();
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.C | Key.CtrlMask, new KeyModifiers ())); // Copy
|
|
|
Assert.Equal ("text", _textView.SelectedText);
|
|
|
Assert.Equal ("TAB to jump between text fields.", _textView.Text);
|
|
|
- _textView.Paste ();
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.Y | Key.CtrlMask, new KeyModifiers ())); // Paste
|
|
|
Assert.Equal ("TAB to jump between text fields.", _textView.Text);
|
|
|
_textView.SelectionStartColumn = 20;
|
|
|
_textView.SelectionStartRow = 0;
|
|
|
- _textView.Cut ();
|
|
|
- _textView.Paste ();
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.W | Key.CtrlMask, new KeyModifiers ())); // Cut
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.Y | Key.CtrlMask, new KeyModifiers ())); // Paste
|
|
|
Assert.Equal ("TAB to jump between text fields.", _textView.Text);
|
|
|
}
|
|
|
|
|
@@ -1239,25 +1240,25 @@ namespace Terminal.Gui.Views {
|
|
|
_textView.SelectionStartColumn = 20;
|
|
|
_textView.SelectionStartRow = 0;
|
|
|
_textView.CursorPosition = new Point (24, 0);
|
|
|
- _textView.Copy ();
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.C | Key.CtrlMask, new KeyModifiers ())); // 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 ();
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.Y | Key.CtrlMask, new KeyModifiers ())); // Paste
|
|
|
Assert.Equal ("TAB to jump between texttext fields.", _textView.Text);
|
|
|
_textView.SelectionStartColumn = 24;
|
|
|
_textView.SelectionStartRow = 0;
|
|
|
- _textView.Cut ();
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.W | Key.CtrlMask, new KeyModifiers ())); // 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 ();
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.Y | Key.CtrlMask, new KeyModifiers ())); // Paste
|
|
|
Assert.Equal ("TAB to jump between texttext fields.", _textView.Text);
|
|
|
}
|
|
|
|
|
@@ -1268,16 +1269,16 @@ namespace Terminal.Gui.Views {
|
|
|
_textView.SelectionStartColumn = 20;
|
|
|
_textView.SelectionStartRow = 0;
|
|
|
_textView.CursorPosition = new Point (24, 0);
|
|
|
- _textView.Copy ();
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.C | Key.CtrlMask, new KeyModifiers ())); // Copy
|
|
|
Assert.Equal ("text", _textView.SelectedText);
|
|
|
- _textView.Cut (); // Selecting is set to false after Cut.
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.W | Key.CtrlMask, new KeyModifiers ())); // 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 ();
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.C | Key.CtrlMask, new KeyModifiers ())); // Copy
|
|
|
Assert.Equal ("text", _textView.SelectedText);
|
|
|
- _textView.Cut ();
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.W | Key.CtrlMask, new KeyModifiers ())); // Cut
|
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
|
}
|
|
|
|
|
@@ -1287,9 +1288,9 @@ namespace Terminal.Gui.Views {
|
|
|
_textView.SelectionStartColumn = 20;
|
|
|
_textView.SelectionStartRow = 0;
|
|
|
_textView.CursorPosition = new Point (24, 0);
|
|
|
- _textView.Copy ();
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.C | Key.CtrlMask, new KeyModifiers ())); // Copy
|
|
|
Assert.Equal ("text", _textView.SelectedText);
|
|
|
- _textView.Paste ();
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.Y | Key.CtrlMask, new KeyModifiers ())); // Paste
|
|
|
Assert.Equal ("", _textView.SelectedText);
|
|
|
}
|
|
|
|
|
@@ -1343,17 +1344,392 @@ namespace Terminal.Gui.Views {
|
|
|
{
|
|
|
_textView.Text = "This is the first line.\nThis is the second line.\n";
|
|
|
_textView.CursorPosition = new Point (0, _textView.Lines - 1);
|
|
|
- _textView.ProcessKey (new KeyEvent (Key.C | Key.CtrlMask, new KeyModifiers ()));
|
|
|
- _textView.Paste ();
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.C | Key.CtrlMask, new KeyModifiers ())); // Copy
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.Y | Key.CtrlMask, new KeyModifiers ())); // Paste
|
|
|
Assert.Equal ($"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}{Environment.NewLine}", _textView.Text);
|
|
|
_textView.CursorPosition = new Point (3, 1);
|
|
|
- _textView.ProcessKey (new KeyEvent (Key.C | Key.CtrlMask, new KeyModifiers ()));
|
|
|
- _textView.Paste ();
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.C | Key.CtrlMask, new KeyModifiers ())); // Copy
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.Y | Key.CtrlMask, new KeyModifiers ())); // Paste
|
|
|
Assert.Equal ($"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the second line.{Environment.NewLine}{Environment.NewLine}", _textView.Text);
|
|
|
Assert.Equal (new Point (3, 2), _textView.CursorPosition);
|
|
|
- _textView.Paste ();
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.Y | Key.CtrlMask, new KeyModifiers ())); // Paste
|
|
|
Assert.Equal ($"This is the first line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the second line.{Environment.NewLine}This is the second line.{Environment.NewLine}{Environment.NewLine}", _textView.Text);
|
|
|
Assert.Equal (new Point (3, 3), _textView.CursorPosition);
|
|
|
}
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void TabWidth_Setting_To_Zero_Changes_AllowsTab_To_False_If_True ()
|
|
|
+ {
|
|
|
+ Assert.Equal (4, _textView.TabWidth);
|
|
|
+ Assert.True (_textView.AllowsTab);
|
|
|
+ Assert.True (_textView.AllowsReturn);
|
|
|
+ Assert.True (_textView.Multiline);
|
|
|
+ _textView.TabWidth = -1;
|
|
|
+ Assert.Equal (0, _textView.TabWidth);
|
|
|
+ Assert.False (_textView.AllowsTab);
|
|
|
+ Assert.False (_textView.AllowsReturn);
|
|
|
+ Assert.False (_textView.Multiline);
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.Tab, new KeyModifiers ()));
|
|
|
+ Assert.Equal ("TAB to jump between text fields.", _textView.Text);
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.BackTab, new KeyModifiers ()));
|
|
|
+ Assert.Equal ("TAB to jump between text fields.", _textView.Text);
|
|
|
+ }
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void AllowsTab_Setting_To_True_Changes_TabWidth_To_Default_If_It_Is_Zero ()
|
|
|
+ {
|
|
|
+ _textView.TabWidth = 0;
|
|
|
+ Assert.Equal (0, _textView.TabWidth);
|
|
|
+ Assert.False (_textView.AllowsTab);
|
|
|
+ Assert.False (_textView.AllowsReturn);
|
|
|
+ Assert.False (_textView.Multiline);
|
|
|
+ _textView.AllowsTab = true;
|
|
|
+ Assert.True (_textView.AllowsTab);
|
|
|
+ Assert.Equal (4, _textView.TabWidth);
|
|
|
+ Assert.True (_textView.AllowsReturn);
|
|
|
+ Assert.True (_textView.Multiline);
|
|
|
+ }
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void AllowsReturn_Setting_To_True_Changes_Multiline_To_True_If_It_Is_False ()
|
|
|
+ {
|
|
|
+ Assert.True (_textView.AllowsReturn);
|
|
|
+ Assert.True (_textView.Multiline);
|
|
|
+ Assert.Equal (4, _textView.TabWidth);
|
|
|
+ Assert.True (_textView.AllowsTab);
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.Enter, new KeyModifiers ()));
|
|
|
+ Assert.Equal (Environment.NewLine +
|
|
|
+ "TAB to jump between text fields.", _textView.Text);
|
|
|
+
|
|
|
+ _textView.AllowsReturn = false;
|
|
|
+ Assert.False (_textView.AllowsReturn);
|
|
|
+ Assert.False (_textView.Multiline);
|
|
|
+ Assert.Equal (0, _textView.TabWidth);
|
|
|
+ Assert.False (_textView.AllowsTab);
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.Enter, new KeyModifiers ()));
|
|
|
+ Assert.Equal (Environment.NewLine +
|
|
|
+ "TAB to jump between text fields.", _textView.Text);
|
|
|
+ }
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void Multiline_Setting_Changes_AllowsReturn_And_AllowsTab_And_Height ()
|
|
|
+ {
|
|
|
+ Assert.True (_textView.Multiline);
|
|
|
+ Assert.True (_textView.AllowsReturn);
|
|
|
+ Assert.Equal (4, _textView.TabWidth);
|
|
|
+ Assert.True (_textView.AllowsTab);
|
|
|
+ Assert.Equal ("Dim.Absolute(30)", _textView.Width.ToString ());
|
|
|
+ Assert.Equal ("Dim.Absolute(10)", _textView.Height.ToString ());
|
|
|
+
|
|
|
+ _textView.Multiline = false;
|
|
|
+ Assert.False (_textView.Multiline);
|
|
|
+ Assert.False (_textView.AllowsReturn);
|
|
|
+ Assert.Equal (0, _textView.TabWidth);
|
|
|
+ Assert.False (_textView.AllowsTab);
|
|
|
+ Assert.Equal ("Dim.Absolute(30)", _textView.Width.ToString ());
|
|
|
+ Assert.Equal ("Dim.Absolute(1)", _textView.Height.ToString ());
|
|
|
+
|
|
|
+ _textView.Multiline = true;
|
|
|
+ Assert.True (_textView.Multiline);
|
|
|
+ Assert.True (_textView.AllowsReturn);
|
|
|
+ Assert.Equal (4, _textView.TabWidth);
|
|
|
+ Assert.True (_textView.AllowsTab);
|
|
|
+ Assert.Equal ("Dim.Absolute(30)", _textView.Width.ToString ());
|
|
|
+ Assert.Equal ("Dim.Absolute(10)", _textView.Height.ToString ());
|
|
|
+ }
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void Tab_Test_Follow_By_BackTab ()
|
|
|
+ {
|
|
|
+ Application.Top.Add (_textView);
|
|
|
+
|
|
|
+ Application.Iteration += () => {
|
|
|
+ var width = _textView.Bounds.Width - 1;
|
|
|
+ Assert.Equal (30, width + 1);
|
|
|
+ Assert.Equal (10, _textView.Height);
|
|
|
+ _textView.Text = "";
|
|
|
+ var col = 0;
|
|
|
+ var leftCol = 0;
|
|
|
+ var tabWidth = _textView.TabWidth;
|
|
|
+ while (col < 100) {
|
|
|
+ col++;
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.Tab, new KeyModifiers ()));
|
|
|
+ Assert.Equal (new Point (col, 0), _textView.CursorPosition);
|
|
|
+ leftCol = GetLeftCol (leftCol);
|
|
|
+ Assert.Equal (leftCol, _textView.LeftColumn);
|
|
|
+ }
|
|
|
+ while (col > 0) {
|
|
|
+ col--;
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.BackTab, new KeyModifiers ()));
|
|
|
+ Assert.Equal (new Point (col, 0), _textView.CursorPosition);
|
|
|
+ leftCol = GetLeftCol (leftCol);
|
|
|
+ Assert.Equal (leftCol, _textView.LeftColumn);
|
|
|
+ }
|
|
|
+
|
|
|
+ Application.Top.Remove (_textView);
|
|
|
+ Application.RequestStop ();
|
|
|
+ };
|
|
|
+
|
|
|
+ Application.Run ();
|
|
|
+ }
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void BackTab_Test_Follow_By_Tab ()
|
|
|
+ {
|
|
|
+ Application.Top.Add (_textView);
|
|
|
+
|
|
|
+ Application.Iteration += () => {
|
|
|
+ var width = _textView.Bounds.Width - 1;
|
|
|
+ Assert.Equal (30, width + 1);
|
|
|
+ Assert.Equal (10, _textView.Height);
|
|
|
+ _textView.Text = "";
|
|
|
+ for (int i = 0; i < 100; i++) {
|
|
|
+ _textView.Text += "\t";
|
|
|
+ }
|
|
|
+ var col = 100;
|
|
|
+ var tabWidth = _textView.TabWidth;
|
|
|
+ var leftCol = _textView.LeftColumn;
|
|
|
+ _textView.MoveEnd ();
|
|
|
+ Assert.Equal (new Point (col, 0), _textView.CursorPosition);
|
|
|
+ leftCol = GetLeftCol (leftCol);
|
|
|
+ Assert.Equal (leftCol, _textView.LeftColumn);
|
|
|
+ while (col > 0) {
|
|
|
+ col--;
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.BackTab, new KeyModifiers ()));
|
|
|
+ Assert.Equal (new Point (col, 0), _textView.CursorPosition);
|
|
|
+ leftCol = GetLeftCol (leftCol);
|
|
|
+ Assert.Equal (leftCol, _textView.LeftColumn);
|
|
|
+ }
|
|
|
+ while (col < 100) {
|
|
|
+ col++;
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.Tab, new KeyModifiers ()));
|
|
|
+ Assert.Equal (new Point (col, 0), _textView.CursorPosition);
|
|
|
+ leftCol = GetLeftCol (leftCol);
|
|
|
+ Assert.Equal (leftCol, _textView.LeftColumn);
|
|
|
+ }
|
|
|
+
|
|
|
+ Application.Top.Remove (_textView);
|
|
|
+ Application.RequestStop ();
|
|
|
+ };
|
|
|
+
|
|
|
+ Application.Run ();
|
|
|
+ }
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void Tab_Test_Follow_By_CursorLeft_And_Then_Follow_By_CursorRight ()
|
|
|
+ {
|
|
|
+ Application.Top.Add (_textView);
|
|
|
+
|
|
|
+ Application.Iteration += () => {
|
|
|
+ var width = _textView.Bounds.Width - 1;
|
|
|
+ Assert.Equal (30, width + 1);
|
|
|
+ Assert.Equal (10, _textView.Height);
|
|
|
+ _textView.Text = "";
|
|
|
+ var col = 0;
|
|
|
+ var leftCol = 0;
|
|
|
+ var tabWidth = _textView.TabWidth;
|
|
|
+ while (col < 100) {
|
|
|
+ col++;
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.Tab, new KeyModifiers ()));
|
|
|
+ Assert.Equal (new Point (col, 0), _textView.CursorPosition);
|
|
|
+ leftCol = GetLeftCol (leftCol);
|
|
|
+ Assert.Equal (leftCol, _textView.LeftColumn);
|
|
|
+ }
|
|
|
+ while (col > 0) {
|
|
|
+ col--;
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.CursorLeft, new KeyModifiers ()));
|
|
|
+ Assert.Equal (new Point (col, 0), _textView.CursorPosition);
|
|
|
+ leftCol = GetLeftCol (leftCol);
|
|
|
+ Assert.Equal (leftCol, _textView.LeftColumn);
|
|
|
+ }
|
|
|
+ while (col < 100) {
|
|
|
+ col++;
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.CursorRight, new KeyModifiers ()));
|
|
|
+ Assert.Equal (new Point (col, 0), _textView.CursorPosition);
|
|
|
+ leftCol = GetLeftCol (leftCol);
|
|
|
+ Assert.Equal (leftCol, _textView.LeftColumn);
|
|
|
+ }
|
|
|
+
|
|
|
+ Application.Top.Remove (_textView);
|
|
|
+ Application.RequestStop ();
|
|
|
+ };
|
|
|
+
|
|
|
+ Application.Run ();
|
|
|
+ }
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void Tab_Test_Follow_By_BackTab_With_Text ()
|
|
|
+ {
|
|
|
+ Application.Top.Add (_textView);
|
|
|
+
|
|
|
+ Application.Iteration += () => {
|
|
|
+ var width = _textView.Bounds.Width - 1;
|
|
|
+ Assert.Equal (30, width + 1);
|
|
|
+ Assert.Equal (10, _textView.Height);
|
|
|
+ var col = 0;
|
|
|
+ var leftCol = 0;
|
|
|
+ Assert.Equal (new Point (col, 0), _textView.CursorPosition);
|
|
|
+ Assert.Equal (leftCol, _textView.LeftColumn);
|
|
|
+ while (col < 100) {
|
|
|
+ col++;
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.Tab, new KeyModifiers ()));
|
|
|
+ Assert.Equal (new Point (col, 0), _textView.CursorPosition);
|
|
|
+ leftCol = GetLeftCol (leftCol);
|
|
|
+ Assert.Equal (leftCol, _textView.LeftColumn);
|
|
|
+ }
|
|
|
+ while (col > 0) {
|
|
|
+ col--;
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.BackTab, new KeyModifiers ()));
|
|
|
+ Assert.Equal (new Point (col, 0), _textView.CursorPosition);
|
|
|
+ leftCol = GetLeftCol (leftCol);
|
|
|
+ Assert.Equal (leftCol, _textView.LeftColumn);
|
|
|
+ }
|
|
|
+
|
|
|
+ Application.Top.Remove (_textView);
|
|
|
+ Application.RequestStop ();
|
|
|
+ };
|
|
|
+
|
|
|
+ Application.Run ();
|
|
|
+ }
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void Tab_Test_Follow_By_Home_And_Then_Follow_By_End_And_Then_Follow_By_BackTab_With_Text ()
|
|
|
+ {
|
|
|
+ Application.Top.Add (_textView);
|
|
|
+
|
|
|
+ Application.Iteration += () => {
|
|
|
+ var width = _textView.Bounds.Width - 1;
|
|
|
+ Assert.Equal (30, width + 1);
|
|
|
+ Assert.Equal (10, _textView.Height);
|
|
|
+ var col = 0;
|
|
|
+ var leftCol = 0;
|
|
|
+ Assert.Equal (new Point (col, 0), _textView.CursorPosition);
|
|
|
+ Assert.Equal (leftCol, _textView.LeftColumn);
|
|
|
+ Assert.Equal ("TAB to jump between text fields.", _textView.Text);
|
|
|
+ Assert.Equal (32, _textView.Text.Length);
|
|
|
+ while (col < 100) {
|
|
|
+ col++;
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.Tab, new KeyModifiers ()));
|
|
|
+ Assert.Equal (new Point (col, 0), _textView.CursorPosition);
|
|
|
+ leftCol = GetLeftCol (leftCol);
|
|
|
+ Assert.Equal (leftCol, _textView.LeftColumn);
|
|
|
+ }
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.Home, new KeyModifiers ()));
|
|
|
+ col = 0;
|
|
|
+ Assert.Equal (new Point (col, 0), _textView.CursorPosition);
|
|
|
+ leftCol = 0;
|
|
|
+ Assert.Equal (leftCol, _textView.LeftColumn);
|
|
|
+
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.End, new KeyModifiers ()));
|
|
|
+ col = _textView.Text.Length;
|
|
|
+ Assert.Equal (132, _textView.Text.Length);
|
|
|
+ Assert.Equal (new Point (col, 0), _textView.CursorPosition);
|
|
|
+ leftCol = GetLeftCol (leftCol);
|
|
|
+ Assert.Equal (leftCol, _textView.LeftColumn);
|
|
|
+ var txt = _textView.Text;
|
|
|
+ while (col - 1 > 0 && txt [col - 1] != '\t') {
|
|
|
+ col--;
|
|
|
+ }
|
|
|
+ _textView.CursorPosition = new Point (col, 0);
|
|
|
+ leftCol = GetLeftCol (leftCol);
|
|
|
+ while (col > 0) {
|
|
|
+ col--;
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.BackTab, new KeyModifiers ()));
|
|
|
+ Assert.Equal (new Point (col, 0), _textView.CursorPosition);
|
|
|
+ leftCol = GetLeftCol (leftCol);
|
|
|
+ Assert.Equal (leftCol, _textView.LeftColumn);
|
|
|
+ }
|
|
|
+ Assert.Equal ("TAB to jump between text fields.", _textView.Text);
|
|
|
+ Assert.Equal (32, _textView.Text.Length);
|
|
|
+
|
|
|
+ Application.Top.Remove (_textView);
|
|
|
+ Application.RequestStop ();
|
|
|
+ };
|
|
|
+
|
|
|
+ Application.Run ();
|
|
|
+ }
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void Tab_Test_Follow_By_CursorLeft_And_Then_Follow_By_CursorRight_With_Text ()
|
|
|
+ {
|
|
|
+ Application.Top.Add (_textView);
|
|
|
+
|
|
|
+ Application.Iteration += () => {
|
|
|
+ var width = _textView.Bounds.Width - 1;
|
|
|
+ Assert.Equal (30, width + 1);
|
|
|
+ Assert.Equal (10, _textView.Height);
|
|
|
+ Assert.Equal ("TAB to jump between text fields.", _textView.Text);
|
|
|
+ var col = 0;
|
|
|
+ var leftCol = 0;
|
|
|
+ var tabWidth = _textView.TabWidth;
|
|
|
+ while (col < 100) {
|
|
|
+ col++;
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.Tab, new KeyModifiers ()));
|
|
|
+ Assert.Equal (new Point (col, 0), _textView.CursorPosition);
|
|
|
+ leftCol = GetLeftCol (leftCol);
|
|
|
+ Assert.Equal (leftCol, _textView.LeftColumn);
|
|
|
+ }
|
|
|
+ Assert.Equal (132, _textView.Text.Length);
|
|
|
+ while (col > 0) {
|
|
|
+ col--;
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.CursorLeft, new KeyModifiers ()));
|
|
|
+ Assert.Equal (new Point (col, 0), _textView.CursorPosition);
|
|
|
+ leftCol = GetLeftCol (leftCol);
|
|
|
+ Assert.Equal (leftCol, _textView.LeftColumn);
|
|
|
+ }
|
|
|
+ while (col < 100) {
|
|
|
+ col++;
|
|
|
+ _textView.ProcessKey (new KeyEvent (Key.CursorRight, new KeyModifiers ()));
|
|
|
+ Assert.Equal (new Point (col, 0), _textView.CursorPosition);
|
|
|
+ leftCol = GetLeftCol (leftCol);
|
|
|
+ Assert.Equal (leftCol, _textView.LeftColumn);
|
|
|
+ }
|
|
|
+
|
|
|
+ Application.Top.Remove (_textView);
|
|
|
+ Application.RequestStop ();
|
|
|
+ };
|
|
|
+
|
|
|
+ Application.Run ();
|
|
|
+ }
|
|
|
+
|
|
|
+ private int GetLeftCol (int start)
|
|
|
+ {
|
|
|
+ var lines = _textView.Text.Split (Environment.NewLine);
|
|
|
+ if (lines == null || lines.Length == 0) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ if (start == _textView.LeftColumn) {
|
|
|
+ return start;
|
|
|
+ }
|
|
|
+ if (_textView.LeftColumn == _textView.CurrentColumn) {
|
|
|
+ return _textView.CurrentColumn;
|
|
|
+ }
|
|
|
+ var cCol = _textView.CurrentColumn;
|
|
|
+ var line = lines [_textView.CurrentRow];
|
|
|
+ var lCount = cCol > line.Length - 1 ? line.Length - 1 : cCol;
|
|
|
+ var width = _textView.Frame.Width;
|
|
|
+ var tabWidth = _textView.TabWidth;
|
|
|
+ var sumLength = 0;
|
|
|
+ var col = 0;
|
|
|
+
|
|
|
+ for (int i = lCount; i >= 0; i--) {
|
|
|
+ var r = line [i];
|
|
|
+ sumLength += Rune.ColumnWidth (r);
|
|
|
+ if (r == '\t') {
|
|
|
+ sumLength += tabWidth + 1;
|
|
|
+ }
|
|
|
+ if (sumLength > width) {
|
|
|
+ if (cCol == line.Length) {
|
|
|
+ col++;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ } else if (cCol < line.Length && col > 0 && start < cCol && col == start) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ col = i;
|
|
|
+ }
|
|
|
+
|
|
|
+ return col;
|
|
|
+ }
|
|
|
}
|
|
|
}
|