|
@@ -23,7 +23,7 @@ public class EscSeqUtilsTests
|
|
|
|
|
|
[Fact]
|
|
|
[AutoInitShutdown]
|
|
|
- public void DecodeEscSeq_Tests ()
|
|
|
+ public void DecodeEscSeq_Multiple_Tests ()
|
|
|
{
|
|
|
// ESC
|
|
|
_cki = new ConsoleKeyInfo [] { new ('\u001b', 0, false, false, false) };
|
|
@@ -83,7 +83,7 @@ public class EscSeqUtilsTests
|
|
|
Assert.Null (_escSeqReqProc);
|
|
|
Assert.Equal (expectedCki, _newConsoleKeyInfo);
|
|
|
Assert.Equal (ConsoleKey.R, _key);
|
|
|
- Assert.Equal (0, (int)_mod);
|
|
|
+ Assert.Equal (ConsoleModifiers.Alt | ConsoleModifiers.Control, _mod);
|
|
|
Assert.Equal ("ESC", _c1Control);
|
|
|
Assert.Null (_code);
|
|
|
Assert.Null (_values);
|
|
@@ -97,7 +97,7 @@ public class EscSeqUtilsTests
|
|
|
|
|
|
ClearAll ();
|
|
|
_cki = new ConsoleKeyInfo [] { new ('\u001b', 0, false, false, false), new ('r', 0, false, false, false) };
|
|
|
- expectedCki = new ('R', ConsoleKey.R, false, true, false);
|
|
|
+ expectedCki = new ('r', ConsoleKey.R, false, true, false);
|
|
|
|
|
|
EscSeqUtils.DecodeEscSeq (
|
|
|
_escSeqReqProc,
|
|
@@ -118,7 +118,7 @@ public class EscSeqUtilsTests
|
|
|
Assert.Null (_escSeqReqProc);
|
|
|
Assert.Equal (expectedCki, _newConsoleKeyInfo);
|
|
|
Assert.Equal (ConsoleKey.R, _key);
|
|
|
- Assert.Equal (0, (int)_mod);
|
|
|
+ Assert.Equal (ConsoleModifiers.Alt, _mod);
|
|
|
Assert.Equal ("ESC", _c1Control);
|
|
|
Assert.Null (_code);
|
|
|
Assert.Null (_values);
|
|
@@ -877,6 +877,260 @@ public class EscSeqUtilsTests
|
|
|
Assert.NotNull (_seqReqStatus);
|
|
|
Assert.Equal (0, (int)_arg1);
|
|
|
Assert.Equal (Point.Empty, _arg2);
|
|
|
+
|
|
|
+ ClearAll ();
|
|
|
+ }
|
|
|
+
|
|
|
+ [Theory]
|
|
|
+ [InlineData ('A', ConsoleKey.A, true, true, false, "ESC", '\u001b', 'A')]
|
|
|
+ [InlineData ('a', ConsoleKey.A, false, true, false, "ESC", '\u001b', 'a')]
|
|
|
+ [InlineData ('\0', ConsoleKey.Spacebar, false, true, true, "ESC", '\u001b', '\0')]
|
|
|
+ [InlineData (' ', ConsoleKey.Spacebar, true, true, false, "ESC", '\u001b', ' ')]
|
|
|
+ [InlineData ('\n', ConsoleKey.Enter, false, true, true, "ESC", '\u001b', '\n')]
|
|
|
+ [InlineData ('\r', ConsoleKey.Enter, true, true, false, "ESC", '\u001b', '\r')]
|
|
|
+ public void DecodeEscSeq_More_Multiple_Tests (
|
|
|
+ char keyChar,
|
|
|
+ ConsoleKey consoleKey,
|
|
|
+ bool shift,
|
|
|
+ bool alt,
|
|
|
+ bool control,
|
|
|
+ string c1Control,
|
|
|
+ params char [] kChars
|
|
|
+ )
|
|
|
+ {
|
|
|
+ _cki = new ConsoleKeyInfo [kChars.Length];
|
|
|
+
|
|
|
+ for (var i = 0; i < kChars.Length; i++)
|
|
|
+ {
|
|
|
+ char kChar = kChars [i];
|
|
|
+ _cki [i] = new (kChar, 0, false, false, false);
|
|
|
+ }
|
|
|
+
|
|
|
+ var expectedCki = new ConsoleKeyInfo (keyChar, consoleKey, shift, alt, control);
|
|
|
+
|
|
|
+ EscSeqUtils.DecodeEscSeq (
|
|
|
+ _escSeqReqProc,
|
|
|
+ ref _newConsoleKeyInfo,
|
|
|
+ ref _key,
|
|
|
+ _cki,
|
|
|
+ ref _mod,
|
|
|
+ out _c1Control,
|
|
|
+ out _code,
|
|
|
+ out _values,
|
|
|
+ out _terminating,
|
|
|
+ out _isKeyMouse,
|
|
|
+ out _mouseFlags,
|
|
|
+ out _pos,
|
|
|
+ out _seqReqStatus,
|
|
|
+ ProcessContinuousButtonPressed
|
|
|
+ );
|
|
|
+ Assert.Null (_escSeqReqProc);
|
|
|
+ Assert.Equal (expectedCki, _newConsoleKeyInfo);
|
|
|
+ Assert.Equal (consoleKey, _key);
|
|
|
+
|
|
|
+ ConsoleModifiers mods = new ();
|
|
|
+
|
|
|
+ if (shift)
|
|
|
+ {
|
|
|
+ mods = ConsoleModifiers.Shift;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (alt)
|
|
|
+ {
|
|
|
+ mods |= ConsoleModifiers.Alt;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (control)
|
|
|
+ {
|
|
|
+ mods |= ConsoleModifiers.Control;
|
|
|
+ }
|
|
|
+
|
|
|
+ Assert.Equal (mods, _mod);
|
|
|
+ Assert.Equal (c1Control, _c1Control);
|
|
|
+ Assert.Null (_code);
|
|
|
+ Assert.Null (_values);
|
|
|
+ Assert.Equal (keyChar.ToString (), _terminating);
|
|
|
+ Assert.False (_isKeyMouse);
|
|
|
+ Assert.Equal (new () { 0 }, _mouseFlags);
|
|
|
+ Assert.Equal (Point.Empty, _pos);
|
|
|
+ Assert.Null (_seqReqStatus);
|
|
|
+ Assert.Equal (0, (int)_arg1);
|
|
|
+ Assert.Equal (Point.Empty, _arg2);
|
|
|
+
|
|
|
+ ClearAll ();
|
|
|
+ }
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void DecodeEscSeq_IncompleteCKInfos ()
|
|
|
+ {
|
|
|
+ // This is simulated response from a CSI_ReportTerminalSizeInChars
|
|
|
+ _cki =
|
|
|
+ [
|
|
|
+ new ('\u001b', 0, false, false, false),
|
|
|
+ new ('[', 0, false, false, false),
|
|
|
+ new ('8', 0, false, false, false),
|
|
|
+ new (';', 0, false, false, false),
|
|
|
+ new ('1', 0, false, false, false),
|
|
|
+ ];
|
|
|
+
|
|
|
+ ConsoleKeyInfo expectedCki = default;
|
|
|
+
|
|
|
+ EscSeqUtils.DecodeEscSeq (
|
|
|
+ _escSeqReqProc,
|
|
|
+ ref _newConsoleKeyInfo,
|
|
|
+ ref _key,
|
|
|
+ _cki,
|
|
|
+ ref _mod,
|
|
|
+ out _c1Control,
|
|
|
+ out _code,
|
|
|
+ out _values,
|
|
|
+ out _terminating,
|
|
|
+ out _isKeyMouse,
|
|
|
+ out _mouseFlags,
|
|
|
+ out _pos,
|
|
|
+ out _seqReqStatus,
|
|
|
+ ProcessContinuousButtonPressed
|
|
|
+ );
|
|
|
+ Assert.Null (_escSeqReqProc);
|
|
|
+ Assert.Equal (expectedCki, _newConsoleKeyInfo);
|
|
|
+ Assert.Equal (ConsoleKey.None, _key);
|
|
|
+ Assert.Equal (ConsoleModifiers.None, _mod);
|
|
|
+ Assert.Equal ("CSI", _c1Control);
|
|
|
+ Assert.Null (_code);
|
|
|
+ Assert.Equal (2, _values.Length);
|
|
|
+ Assert.Equal ("", _terminating);
|
|
|
+ Assert.False (_isKeyMouse);
|
|
|
+ Assert.Equal ([0], _mouseFlags);
|
|
|
+ Assert.Equal (Point.Empty, _pos);
|
|
|
+ Assert.Null (_seqReqStatus);
|
|
|
+ Assert.Equal (0, (int)_arg1);
|
|
|
+ Assert.Equal (Point.Empty, _arg2);
|
|
|
+ Assert.Equal (_cki, EscSeqUtils.IncompleteCkInfos);
|
|
|
+
|
|
|
+ _cki = EscSeqUtils.InsertArray (
|
|
|
+ EscSeqUtils.IncompleteCkInfos,
|
|
|
+ [
|
|
|
+ new ('0', 0, false, false, false),
|
|
|
+ new (';', 0, false, false, false),
|
|
|
+ new ('2', 0, false, false, false),
|
|
|
+ new ('0', 0, false, false, false),
|
|
|
+ new ('t', 0, false, false, false)
|
|
|
+ ]);
|
|
|
+
|
|
|
+ expectedCki = default;
|
|
|
+
|
|
|
+ EscSeqUtils.DecodeEscSeq (
|
|
|
+ _escSeqReqProc,
|
|
|
+ ref _newConsoleKeyInfo,
|
|
|
+ ref _key,
|
|
|
+ _cki,
|
|
|
+ ref _mod,
|
|
|
+ out _c1Control,
|
|
|
+ out _code,
|
|
|
+ out _values,
|
|
|
+ out _terminating,
|
|
|
+ out _isKeyMouse,
|
|
|
+ out _mouseFlags,
|
|
|
+ out _pos,
|
|
|
+ out _seqReqStatus,
|
|
|
+ ProcessContinuousButtonPressed
|
|
|
+ );
|
|
|
+ Assert.Null (_escSeqReqProc);
|
|
|
+ Assert.Equal (expectedCki, _newConsoleKeyInfo);
|
|
|
+ Assert.Equal (ConsoleKey.None, _key);
|
|
|
+
|
|
|
+ Assert.Equal (ConsoleModifiers.None, _mod);
|
|
|
+ Assert.Equal ("CSI", _c1Control);
|
|
|
+ Assert.Null (_code);
|
|
|
+ Assert.Equal (3, _values.Length);
|
|
|
+ Assert.Equal ("t", _terminating);
|
|
|
+ Assert.False (_isKeyMouse);
|
|
|
+ Assert.Equal ([0], _mouseFlags);
|
|
|
+ Assert.Equal (Point.Empty, _pos);
|
|
|
+ Assert.Null (_seqReqStatus);
|
|
|
+ Assert.Equal (0, (int)_arg1);
|
|
|
+ Assert.Equal (Point.Empty, _arg2);
|
|
|
+ Assert.NotEqual (_cki, EscSeqUtils.IncompleteCkInfos);
|
|
|
+ Assert.Contains (EscSeqUtils.ToString (EscSeqUtils.IncompleteCkInfos), EscSeqUtils.ToString (_cki));
|
|
|
+
|
|
|
+ ClearAll ();
|
|
|
+ }
|
|
|
+
|
|
|
+ [Theory]
|
|
|
+ [InlineData ('\u001B', ConsoleKey.Escape, false, false, false)]
|
|
|
+ [InlineData ('\r', ConsoleKey.Enter, false, false, false)]
|
|
|
+ [InlineData ('1', ConsoleKey.D1, false, false, false)]
|
|
|
+ [InlineData ('!', ConsoleKey.None, false, false, false)]
|
|
|
+ [InlineData ('a', ConsoleKey.A, false, false, false)]
|
|
|
+ [InlineData ('A', ConsoleKey.A, true, false, false)]
|
|
|
+ [InlineData ('\u0001', ConsoleKey.A, false, false, true)]
|
|
|
+ [InlineData ('\0', ConsoleKey.Spacebar, false, false, true)]
|
|
|
+ [InlineData ('\n', ConsoleKey.Enter, false, false, true)]
|
|
|
+ [InlineData ('\t', ConsoleKey.Tab, false, false, false)]
|
|
|
+ public void DecodeEscSeq_Single_Tests (char keyChar, ConsoleKey consoleKey, bool shift, bool alt, bool control)
|
|
|
+ {
|
|
|
+ _cki = [new (keyChar, 0, false, false, false)];
|
|
|
+ var expectedCki = new ConsoleKeyInfo (keyChar, consoleKey, shift, alt, control);
|
|
|
+
|
|
|
+ EscSeqUtils.DecodeEscSeq (
|
|
|
+ _escSeqReqProc,
|
|
|
+ ref _newConsoleKeyInfo,
|
|
|
+ ref _key,
|
|
|
+ _cki,
|
|
|
+ ref _mod,
|
|
|
+ out _c1Control,
|
|
|
+ out _code,
|
|
|
+ out _values,
|
|
|
+ out _terminating,
|
|
|
+ out _isKeyMouse,
|
|
|
+ out _mouseFlags,
|
|
|
+ out _pos,
|
|
|
+ out _seqReqStatus,
|
|
|
+ ProcessContinuousButtonPressed
|
|
|
+ );
|
|
|
+ Assert.Null (_escSeqReqProc);
|
|
|
+ Assert.Equal (expectedCki, _newConsoleKeyInfo);
|
|
|
+ Assert.Equal (consoleKey, _key);
|
|
|
+
|
|
|
+ ConsoleModifiers mods = new ();
|
|
|
+
|
|
|
+ if (shift)
|
|
|
+ {
|
|
|
+ mods = ConsoleModifiers.Shift;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (alt)
|
|
|
+ {
|
|
|
+ mods |= ConsoleModifiers.Alt;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (control)
|
|
|
+ {
|
|
|
+ mods |= ConsoleModifiers.Control;
|
|
|
+ }
|
|
|
+
|
|
|
+ Assert.Equal (mods, _mod);
|
|
|
+
|
|
|
+ if (keyChar == '\u001B')
|
|
|
+ {
|
|
|
+ Assert.Equal ("ESC", _c1Control);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Assert.Null (_c1Control);
|
|
|
+ }
|
|
|
+
|
|
|
+ Assert.Null (_code);
|
|
|
+ Assert.Null (_values);
|
|
|
+ Assert.Null (_terminating);
|
|
|
+ Assert.False (_isKeyMouse);
|
|
|
+ Assert.Equal (new () { 0 }, _mouseFlags);
|
|
|
+ Assert.Equal (Point.Empty, _pos);
|
|
|
+ Assert.Null (_seqReqStatus);
|
|
|
+ Assert.Equal (0, (int)_arg1);
|
|
|
+ Assert.Equal (Point.Empty, _arg2);
|
|
|
+
|
|
|
+ ClearAll ();
|
|
|
}
|
|
|
|
|
|
[Fact]
|
|
@@ -920,39 +1174,39 @@ public class EscSeqUtilsTests
|
|
|
public void GetConsoleInputKey_ConsoleKeyInfo ()
|
|
|
{
|
|
|
var cki = new ConsoleKeyInfo ('r', 0, false, false, false);
|
|
|
- var expectedCki = new ConsoleKeyInfo ('r', 0, false, false, false);
|
|
|
+ var expectedCki = new ConsoleKeyInfo ('r', ConsoleKey.R, false, false, false);
|
|
|
Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
|
|
|
|
|
|
cki = new ('r', 0, true, false, false);
|
|
|
- expectedCki = new ('r', 0, true, false, false);
|
|
|
+ expectedCki = new ('r', ConsoleKey.R, true, false, false);
|
|
|
Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
|
|
|
|
|
|
cki = new ('r', 0, false, true, false);
|
|
|
- expectedCki = new ('r', 0, false, true, false);
|
|
|
+ expectedCki = new ('r', ConsoleKey.R, false, true, false);
|
|
|
Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
|
|
|
|
|
|
cki = new ('r', 0, false, false, true);
|
|
|
- expectedCki = new ('r', 0, false, false, true);
|
|
|
+ expectedCki = new ('r', ConsoleKey.R, false, false, true);
|
|
|
Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
|
|
|
|
|
|
cki = new ('r', 0, true, true, false);
|
|
|
- expectedCki = new ('r', 0, true, true, false);
|
|
|
+ expectedCki = new ('r', ConsoleKey.R, true, true, false);
|
|
|
Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
|
|
|
|
|
|
cki = new ('r', 0, false, true, true);
|
|
|
- expectedCki = new ('r', 0, false, true, true);
|
|
|
+ expectedCki = new ('r', ConsoleKey.R, false, true, true);
|
|
|
Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
|
|
|
|
|
|
cki = new ('r', 0, true, true, true);
|
|
|
- expectedCki = new ('r', 0, true, true, true);
|
|
|
+ expectedCki = new ('r', ConsoleKey.R, true, true, true);
|
|
|
Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
|
|
|
|
|
|
cki = new ('\u0012', 0, false, false, false);
|
|
|
- expectedCki = new ('R', ConsoleKey.R, false, false, true);
|
|
|
+ expectedCki = new ('\u0012', ConsoleKey.R, false, false, true);
|
|
|
Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
|
|
|
|
|
|
cki = new ('\0', (ConsoleKey)64, false, false, true);
|
|
|
- expectedCki = new (' ', ConsoleKey.Spacebar, false, false, true);
|
|
|
+ expectedCki = new ('\0', ConsoleKey.Spacebar, false, false, true);
|
|
|
Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
|
|
|
|
|
|
cki = new ('\r', 0, false, false, false);
|
|
@@ -964,7 +1218,7 @@ public class EscSeqUtilsTests
|
|
|
Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
|
|
|
|
|
|
cki = new ('R', 0, false, false, false);
|
|
|
- expectedCki = new ('R', 0, false, false, false);
|
|
|
+ expectedCki = new ('R', ConsoleKey.R, true, false, false);
|
|
|
Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
|
|
|
}
|
|
|
|
|
@@ -999,18 +1253,19 @@ public class EscSeqUtilsTests
|
|
|
Assert.Equal (ConsoleKey.F11, EscSeqUtils.GetConsoleKey ('~', "23", ref mod, ref keyChar));
|
|
|
Assert.Equal (ConsoleKey.F12, EscSeqUtils.GetConsoleKey ('~', "24", ref mod, ref keyChar));
|
|
|
Assert.Equal (0, (int)EscSeqUtils.GetConsoleKey ('~', "", ref mod, ref keyChar));
|
|
|
- Assert.Equal (ConsoleKey.Add, EscSeqUtils.GetConsoleKey ('l', "", ref mod, ref keyChar));
|
|
|
- Assert.Equal (ConsoleKey.Subtract, EscSeqUtils.GetConsoleKey ('m', "", ref mod, ref keyChar));
|
|
|
- Assert.Equal (ConsoleKey.Insert, EscSeqUtils.GetConsoleKey ('p', "", ref mod, ref keyChar));
|
|
|
- Assert.Equal (ConsoleKey.End, EscSeqUtils.GetConsoleKey ('q', "", ref mod, ref keyChar));
|
|
|
- Assert.Equal (ConsoleKey.DownArrow, EscSeqUtils.GetConsoleKey ('r', "", ref mod, ref keyChar));
|
|
|
- Assert.Equal (ConsoleKey.PageDown, EscSeqUtils.GetConsoleKey ('s', "", ref mod, ref keyChar));
|
|
|
- Assert.Equal (ConsoleKey.LeftArrow, EscSeqUtils.GetConsoleKey ('t', "", ref mod, ref keyChar));
|
|
|
- Assert.Equal (ConsoleKey.Clear, EscSeqUtils.GetConsoleKey ('u', "", ref mod, ref keyChar));
|
|
|
- Assert.Equal (ConsoleKey.RightArrow, EscSeqUtils.GetConsoleKey ('v', "", ref mod, ref keyChar));
|
|
|
- Assert.Equal (ConsoleKey.Home, EscSeqUtils.GetConsoleKey ('w', "", ref mod, ref keyChar));
|
|
|
- Assert.Equal (ConsoleKey.UpArrow, EscSeqUtils.GetConsoleKey ('x', "", ref mod, ref keyChar));
|
|
|
- Assert.Equal (ConsoleKey.PageUp, EscSeqUtils.GetConsoleKey ('y', "", ref mod, ref keyChar));
|
|
|
+ // These terminators are used by macOS on a numeric keypad without keys modifiers
|
|
|
+ Assert.Equal (ConsoleKey.Add, EscSeqUtils.GetConsoleKey ('l', null, ref mod, ref keyChar));
|
|
|
+ Assert.Equal (ConsoleKey.Subtract, EscSeqUtils.GetConsoleKey ('m', null, ref mod, ref keyChar));
|
|
|
+ Assert.Equal (ConsoleKey.Insert, EscSeqUtils.GetConsoleKey ('p', null, ref mod, ref keyChar));
|
|
|
+ Assert.Equal (ConsoleKey.End, EscSeqUtils.GetConsoleKey ('q', null, ref mod, ref keyChar));
|
|
|
+ Assert.Equal (ConsoleKey.DownArrow, EscSeqUtils.GetConsoleKey ('r', null, ref mod, ref keyChar));
|
|
|
+ Assert.Equal (ConsoleKey.PageDown, EscSeqUtils.GetConsoleKey ('s', null, ref mod, ref keyChar));
|
|
|
+ Assert.Equal (ConsoleKey.LeftArrow, EscSeqUtils.GetConsoleKey ('t', null, ref mod, ref keyChar));
|
|
|
+ Assert.Equal (ConsoleKey.Clear, EscSeqUtils.GetConsoleKey ('u', null, ref mod, ref keyChar));
|
|
|
+ Assert.Equal (ConsoleKey.RightArrow, EscSeqUtils.GetConsoleKey ('v', null, ref mod, ref keyChar));
|
|
|
+ Assert.Equal (ConsoleKey.Home, EscSeqUtils.GetConsoleKey ('w', null, ref mod, ref keyChar));
|
|
|
+ Assert.Equal (ConsoleKey.UpArrow, EscSeqUtils.GetConsoleKey ('x', null, ref mod, ref keyChar));
|
|
|
+ Assert.Equal (ConsoleKey.PageUp, EscSeqUtils.GetConsoleKey ('y', null, ref mod, ref keyChar));
|
|
|
}
|
|
|
|
|
|
[Fact]
|
|
@@ -1031,9 +1286,9 @@ public class EscSeqUtilsTests
|
|
|
}
|
|
|
|
|
|
[Fact]
|
|
|
- public void GetEscapeResult_Tests ()
|
|
|
+ public void GetEscapeResult_Multiple_Tests ()
|
|
|
{
|
|
|
- char [] kChars = { '\u001b', '[', '5', ';', '1', '0', 'r' };
|
|
|
+ char [] kChars = ['\u001b', '[', '5', ';', '1', '0', 'r'];
|
|
|
(_c1Control, _code, _values, _terminating) = EscSeqUtils.GetEscapeResult (kChars);
|
|
|
Assert.Equal ("CSI", _c1Control);
|
|
|
Assert.Null (_code);
|
|
@@ -1043,6 +1298,31 @@ public class EscSeqUtilsTests
|
|
|
Assert.Equal ("r", _terminating);
|
|
|
}
|
|
|
|
|
|
+ [Theory]
|
|
|
+ [InlineData ('\u001B')]
|
|
|
+ [InlineData (['\r'])]
|
|
|
+ [InlineData (['1'])]
|
|
|
+ [InlineData (['!'])]
|
|
|
+ [InlineData (['a'])]
|
|
|
+ [InlineData (['A'])]
|
|
|
+ public void GetEscapeResult_Single_Tests (params char [] kChars)
|
|
|
+ {
|
|
|
+ (_c1Control, _code, _values, _terminating) = EscSeqUtils.GetEscapeResult (kChars);
|
|
|
+
|
|
|
+ if (kChars [0] == '\u001B')
|
|
|
+ {
|
|
|
+ Assert.Equal ("ESC", _c1Control);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Assert.Null (_c1Control);
|
|
|
+ }
|
|
|
+
|
|
|
+ Assert.Null (_code);
|
|
|
+ Assert.Null (_values);
|
|
|
+ Assert.Null (_terminating);
|
|
|
+ }
|
|
|
+
|
|
|
[Fact]
|
|
|
public void GetKeyCharArray_Tests ()
|
|
|
{
|
|
@@ -1160,6 +1440,73 @@ public class EscSeqUtilsTests
|
|
|
Assert.Equal (cki, expectedCkInfos [0]);
|
|
|
}
|
|
|
|
|
|
+ [Fact]
|
|
|
+ public void SplitEscapeRawString_Multiple_Tests ()
|
|
|
+ {
|
|
|
+ string rawData =
|
|
|
+ "\r[<35;50;1m[<35;49;1m[<35;47;1m[<35;46;1m[<35;45;2m[<35;44;2m[<35;43;3m[<35;42;3m[<35;41;4m[<35;40;5m[<35;39;6m[<35;49;1m[<35;48;2m[<0;33;6M[<0;33;6mOC\r";
|
|
|
+
|
|
|
+ List<string> splitList = EscSeqUtils.SplitEscapeRawString (rawData);
|
|
|
+ Assert.Equal (18, splitList.Count);
|
|
|
+ Assert.Equal ("\r", splitList [0]);
|
|
|
+ Assert.Equal ("\u001b[<35;50;1m", splitList [1]);
|
|
|
+ Assert.Equal ("\u001b[<35;49;1m", splitList [2]);
|
|
|
+ Assert.Equal ("\u001b[<35;47;1m", splitList [3]);
|
|
|
+ Assert.Equal ("\u001b[<35;46;1m", splitList [4]);
|
|
|
+ Assert.Equal ("\u001b[<35;45;2m", splitList [5]);
|
|
|
+ Assert.Equal ("\u001b[<35;44;2m", splitList [6]);
|
|
|
+ Assert.Equal ("\u001b[<35;43;3m", splitList [7]);
|
|
|
+ Assert.Equal ("\u001b[<35;42;3m", splitList [8]);
|
|
|
+ Assert.Equal ("\u001b[<35;41;4m", splitList [9]);
|
|
|
+ Assert.Equal ("\u001b[<35;40;5m", splitList [10]);
|
|
|
+ Assert.Equal ("\u001b[<35;39;6m", splitList [11]);
|
|
|
+ Assert.Equal ("\u001b[<35;49;1m", splitList [12]);
|
|
|
+ Assert.Equal ("\u001b[<35;48;2m", splitList [13]);
|
|
|
+ Assert.Equal ("\u001b[<0;33;6M", splitList [14]);
|
|
|
+ Assert.Equal ("\u001b[<0;33;6m", splitList [15]);
|
|
|
+ Assert.Equal ("\u001bOC", splitList [16]);
|
|
|
+ Assert.Equal ("\r", splitList [^1]);
|
|
|
+ }
|
|
|
+
|
|
|
+ [Theory]
|
|
|
+ [InlineData ("[<35;50;1m")]
|
|
|
+ [InlineData ("\r")]
|
|
|
+ [InlineData ("1")]
|
|
|
+ [InlineData ("!")]
|
|
|
+ [InlineData ("a")]
|
|
|
+ [InlineData ("A")]
|
|
|
+ public void SplitEscapeRawString_Single_Tests (string rawData)
|
|
|
+ {
|
|
|
+ List<string> splitList = EscSeqUtils.SplitEscapeRawString (rawData);
|
|
|
+ Assert.Single (splitList);
|
|
|
+ Assert.Equal (rawData, splitList [0]);
|
|
|
+ }
|
|
|
+
|
|
|
+ [Theory]
|
|
|
+ [InlineData (null, null, null, null)]
|
|
|
+ [InlineData ("\u001b[8;1", null, null, "\u001b[8;1")]
|
|
|
+ [InlineData (null, "\u001b[8;1", 5, "\u001b[8;1")]
|
|
|
+ [InlineData ("\u001b[8;1", null, 5, "\u001b[8;1")]
|
|
|
+ [InlineData ("\u001b[8;1", "0;20t", -1, "\u001b[8;10;20t")]
|
|
|
+ [InlineData ("\u001b[8;1", "0;20t", 0, "\u001b[8;10;20t")]
|
|
|
+ [InlineData ("0;20t", "\u001b[8;1", 5, "\u001b[8;10;20t")]
|
|
|
+ [InlineData ("0;20t", "\u001b[8;1", 3, "\u001b[80;20t;1")]
|
|
|
+ public void InsertArray_Tests (string toInsert, string current, int? index, string expected)
|
|
|
+ {
|
|
|
+ ConsoleKeyInfo [] toIns = EscSeqUtils.ToConsoleKeyInfoArray (toInsert);
|
|
|
+ ConsoleKeyInfo [] cki = EscSeqUtils.ToConsoleKeyInfoArray (current);
|
|
|
+ ConsoleKeyInfo [] result = EscSeqUtils.ToConsoleKeyInfoArray (expected);
|
|
|
+
|
|
|
+ if (index is null)
|
|
|
+ {
|
|
|
+ Assert.Equal (result, EscSeqUtils.InsertArray (toIns, cki));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Assert.Equal (result, EscSeqUtils.InsertArray (toIns, cki, (int)index));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private void ClearAll ()
|
|
|
{
|
|
|
_escSeqReqProc = default (EscSeqRequests);
|