1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171 |
- namespace Terminal.Gui.InputTests;
- public class EscSeqUtilsTests
- {
- private bool _actionStarted;
- private MouseFlags _arg1;
- private Point _arg2;
- private string _c1Control, _code, _terminating;
- private ConsoleKeyInfo [] _cki;
- private EscSeqRequests _escSeqReqProc;
- private bool _isKeyMouse;
- private bool _isReq;
- private ConsoleKey _key;
- private ConsoleModifiers _mod;
- private List<MouseFlags> _mouseFlags;
- private ConsoleKeyInfo _newConsoleKeyInfo;
- private Point _pos;
- private string [] _values;
- [Fact]
- [AutoInitShutdown]
- public void DecodeEscSeq_Tests ()
- {
- // ESC
- _cki = new ConsoleKeyInfo [] { new ('\u001b', 0, false, false, false) };
- var expectedCki = new ConsoleKeyInfo ('\u001b', ConsoleKey.Escape, false, false, false);
- 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 _isReq,
- ProcessContinuousButtonPressed
- );
- Assert.Null (_escSeqReqProc);
- Assert.Equal (expectedCki, _newConsoleKeyInfo);
- Assert.Equal (ConsoleKey.Escape, _key);
- Assert.Equal (0, (int)_mod);
- Assert.Equal ("ESC", _c1Control);
- Assert.Null (_code);
- Assert.Null (_values);
- Assert.Null (_terminating);
- Assert.False (_isKeyMouse);
- Assert.Equal (new() { 0 }, _mouseFlags);
- Assert.Equal (Point.Empty, _pos);
- Assert.False (_isReq);
- Assert.Equal (0, (int)_arg1);
- Assert.Equal (Point.Empty, _arg2);
- ClearAll ();
- _cki = new ConsoleKeyInfo [] { new ('\u001b', 0, false, false, false), new ('\u0012', 0, false, false, false) };
- expectedCki = new ('\u0012', ConsoleKey.R, false, true, true);
- 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 _isReq,
- ProcessContinuousButtonPressed
- );
- Assert.Null (_escSeqReqProc);
- Assert.Equal (expectedCki, _newConsoleKeyInfo);
- Assert.Equal (ConsoleKey.R, _key);
- Assert.Equal (0, (int)_mod);
- Assert.Equal ("ESC", _c1Control);
- Assert.Null (_code);
- Assert.Null (_values);
- Assert.Equal ("\u0012", _terminating);
- Assert.False (_isKeyMouse);
- Assert.Equal (new() { 0 }, _mouseFlags);
- Assert.Equal (Point.Empty, _pos);
- Assert.False (_isReq);
- Assert.Equal (0, (int)_arg1);
- Assert.Equal (Point.Empty, _arg2);
- ClearAll ();
- _cki = new ConsoleKeyInfo [] { new ('\u001b', 0, false, false, false), new ('r', 0, false, false, false) };
- expectedCki = new ('R', ConsoleKey.R, false, true, false);
- 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 _isReq,
- ProcessContinuousButtonPressed
- );
- Assert.Null (_escSeqReqProc);
- Assert.Equal (expectedCki, _newConsoleKeyInfo);
- Assert.Equal (ConsoleKey.R, _key);
- Assert.Equal (0, (int)_mod);
- Assert.Equal ("ESC", _c1Control);
- Assert.Null (_code);
- Assert.Null (_values);
- Assert.Equal ("r", _terminating);
- Assert.False (_isKeyMouse);
- Assert.Equal (new() { 0 }, _mouseFlags);
- Assert.Equal (Point.Empty, _pos);
- Assert.False (_isReq);
- Assert.Equal (0, (int)_arg1);
- Assert.Equal (Point.Empty, _arg2);
- // SS3
- ClearAll ();
- _cki = new ConsoleKeyInfo []
- {
- new ('\u001b', 0, false, false, false), new ('O', 0, false, false, false), new ('R', 0, false, false, false)
- };
- expectedCki = new ('\0', ConsoleKey.F3, false, false, false);
- 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 _isReq,
- ProcessContinuousButtonPressed
- );
- Assert.Null (_escSeqReqProc);
- Assert.Equal (expectedCki, _newConsoleKeyInfo);
- Assert.Equal (ConsoleKey.F3, _key);
- Assert.Equal (0, (int)_mod);
- Assert.Equal ("SS3", _c1Control);
- Assert.Null (_code);
- Assert.Single (_values);
- Assert.Null (_values [0]);
- Assert.Equal ("R", _terminating);
- Assert.False (_isKeyMouse);
- Assert.Equal (new() { 0 }, _mouseFlags);
- Assert.Equal (Point.Empty, _pos);
- Assert.False (_isReq);
- Assert.Equal (0, (int)_arg1);
- Assert.Equal (Point.Empty, _arg2);
- // CSI
- ClearAll ();
- _cki = new ConsoleKeyInfo []
- {
- new ('\u001b', 0, false, false, false),
- new ('[', 0, false, false, false),
- new ('1', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('2', 0, false, false, false),
- new ('R', 0, false, false, false)
- };
- expectedCki = new ('\0', ConsoleKey.F3, true, false, false);
- 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 _isReq,
- ProcessContinuousButtonPressed
- );
- Assert.Null (_escSeqReqProc);
- Assert.Equal (expectedCki, _newConsoleKeyInfo);
- Assert.Equal (ConsoleKey.F3, _key);
- Assert.Equal (ConsoleModifiers.Shift, _mod);
- Assert.Equal ("CSI", _c1Control);
- Assert.Null (_code);
- Assert.Equal (2, _values.Length);
- Assert.Equal ("1", _values [0]);
- Assert.Equal ("2", _values [^1]);
- Assert.Equal ("R", _terminating);
- Assert.False (_isKeyMouse);
- Assert.Equal (new() { 0 }, _mouseFlags);
- Assert.Equal (Point.Empty, _pos);
- Assert.False (_isReq);
- Assert.Equal (0, (int)_arg1);
- Assert.Equal (Point.Empty, _arg2);
- ClearAll ();
- _cki = new ConsoleKeyInfo []
- {
- new ('\u001b', 0, false, false, false),
- new ('[', 0, false, false, false),
- new ('1', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('3', 0, false, false, false),
- new ('R', 0, false, false, false)
- };
- expectedCki = new ('\0', ConsoleKey.F3, false, true, false);
- 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 _isReq,
- ProcessContinuousButtonPressed
- );
- Assert.Null (_escSeqReqProc);
- Assert.Equal (expectedCki, _newConsoleKeyInfo);
- Assert.Equal (ConsoleKey.F3, _key);
- Assert.Equal (ConsoleModifiers.Alt, _mod);
- Assert.Equal ("CSI", _c1Control);
- Assert.Null (_code);
- Assert.Equal (2, _values.Length);
- Assert.Equal ("1", _values [0]);
- Assert.Equal ("3", _values [^1]);
- Assert.Equal ("R", _terminating);
- Assert.False (_isKeyMouse);
- Assert.Equal (new() { 0 }, _mouseFlags);
- Assert.Equal (Point.Empty, _pos);
- Assert.False (_isReq);
- Assert.Equal (0, (int)_arg1);
- Assert.Equal (Point.Empty, _arg2);
- ClearAll ();
- _cki = new ConsoleKeyInfo []
- {
- new ('\u001b', 0, false, false, false),
- new ('[', 0, false, false, false),
- new ('1', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('4', 0, false, false, false),
- new ('R', 0, false, false, false)
- };
- expectedCki = new ('\0', ConsoleKey.F3, true, true, false);
- 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 _isReq,
- ProcessContinuousButtonPressed
- );
- Assert.Null (_escSeqReqProc);
- Assert.Equal (expectedCki, _newConsoleKeyInfo);
- Assert.Equal (ConsoleKey.F3, _key);
- Assert.Equal (ConsoleModifiers.Shift | ConsoleModifiers.Alt, _mod);
- Assert.Equal ("CSI", _c1Control);
- Assert.Null (_code);
- Assert.Equal (2, _values.Length);
- Assert.Equal ("1", _values [0]);
- Assert.Equal ("4", _values [^1]);
- Assert.Equal ("R", _terminating);
- Assert.False (_isKeyMouse);
- Assert.Equal (new() { 0 }, _mouseFlags);
- Assert.Equal (Point.Empty, _pos);
- Assert.False (_isReq);
- Assert.Equal (0, (int)_arg1);
- Assert.Equal (Point.Empty, _arg2);
- ClearAll ();
- _cki = new ConsoleKeyInfo []
- {
- new ('\u001b', 0, false, false, false),
- new ('[', 0, false, false, false),
- new ('1', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('5', 0, false, false, false),
- new ('R', 0, false, false, false)
- };
- expectedCki = new ('\0', ConsoleKey.F3, false, false, true);
- 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 _isReq,
- ProcessContinuousButtonPressed
- );
- Assert.Null (_escSeqReqProc);
- Assert.Equal (expectedCki, _newConsoleKeyInfo);
- Assert.Equal (ConsoleKey.F3, _key);
- Assert.Equal (ConsoleModifiers.Control, _mod);
- Assert.Equal ("CSI", _c1Control);
- Assert.Null (_code);
- Assert.Equal (2, _values.Length);
- Assert.Equal ("1", _values [0]);
- Assert.Equal ("5", _values [^1]);
- Assert.Equal ("R", _terminating);
- Assert.False (_isKeyMouse);
- Assert.Equal (new() { 0 }, _mouseFlags);
- Assert.Equal (Point.Empty, _pos);
- Assert.False (_isReq);
- Assert.Equal (0, (int)_arg1);
- Assert.Equal (Point.Empty, _arg2);
- ClearAll ();
- _cki = new ConsoleKeyInfo []
- {
- new ('\u001b', 0, false, false, false),
- new ('[', 0, false, false, false),
- new ('1', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('6', 0, false, false, false),
- new ('R', 0, false, false, false)
- };
- expectedCki = new ('\0', ConsoleKey.F3, true, false, true);
- 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 _isReq,
- ProcessContinuousButtonPressed
- );
- Assert.Null (_escSeqReqProc);
- Assert.Equal (expectedCki, _newConsoleKeyInfo);
- Assert.Equal (ConsoleKey.F3, _key);
- Assert.Equal (ConsoleModifiers.Shift | ConsoleModifiers.Control, _mod);
- Assert.Equal ("CSI", _c1Control);
- Assert.Null (_code);
- Assert.Equal (2, _values.Length);
- Assert.Equal ("1", _values [0]);
- Assert.Equal ("6", _values [^1]);
- Assert.Equal ("R", _terminating);
- Assert.False (_isKeyMouse);
- Assert.Equal (new() { 0 }, _mouseFlags);
- Assert.Equal (Point.Empty, _pos);
- Assert.False (_isReq);
- Assert.Equal (0, (int)_arg1);
- Assert.Equal (Point.Empty, _arg2);
- ClearAll ();
- _cki = new ConsoleKeyInfo []
- {
- new ('\u001b', 0, false, false, false),
- new ('[', 0, false, false, false),
- new ('1', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('7', 0, false, false, false),
- new ('R', 0, false, false, false)
- };
- expectedCki = new ('\0', ConsoleKey.F3, false, true, true);
- 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 _isReq,
- ProcessContinuousButtonPressed
- );
- Assert.Null (_escSeqReqProc);
- Assert.Equal (expectedCki, _newConsoleKeyInfo);
- Assert.Equal (ConsoleKey.F3, _key);
- Assert.Equal (ConsoleModifiers.Alt | ConsoleModifiers.Control, _mod);
- Assert.Equal ("CSI", _c1Control);
- Assert.Null (_code);
- Assert.Equal (2, _values.Length);
- Assert.Equal ("1", _values [0]);
- Assert.Equal ("7", _values [^1]);
- Assert.Equal ("R", _terminating);
- Assert.False (_isKeyMouse);
- Assert.Equal (new() { 0 }, _mouseFlags);
- Assert.Equal (Point.Empty, _pos);
- Assert.False (_isReq);
- Assert.Equal (0, (int)_arg1);
- Assert.Equal (Point.Empty, _arg2);
- ClearAll ();
- _cki = new ConsoleKeyInfo []
- {
- new ('\u001b', 0, false, false, false),
- new ('[', 0, false, false, false),
- new ('1', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('8', 0, false, false, false),
- new ('R', 0, false, false, false)
- };
- expectedCki = new ('\0', ConsoleKey.F3, true, true, true);
- 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 _isReq,
- ProcessContinuousButtonPressed
- );
- Assert.Null (_escSeqReqProc);
- Assert.Equal (expectedCki, _newConsoleKeyInfo);
- Assert.Equal (ConsoleKey.F3, _key);
- Assert.Equal (ConsoleModifiers.Shift | ConsoleModifiers.Alt | ConsoleModifiers.Control, _mod);
- Assert.Equal ("CSI", _c1Control);
- Assert.Null (_code);
- Assert.Equal (2, _values.Length);
- Assert.Equal ("1", _values [0]);
- Assert.Equal ("8", _values [^1]);
- Assert.Equal ("R", _terminating);
- Assert.False (_isKeyMouse);
- Assert.Equal (new() { 0 }, _mouseFlags);
- Assert.Equal (Point.Empty, _pos);
- Assert.False (_isReq);
- Assert.Equal (0, (int)_arg1);
- Assert.Equal (Point.Empty, _arg2);
- ClearAll ();
- _cki = new ConsoleKeyInfo []
- {
- new ('\u001b', 0, false, false, false),
- new ('[', 0, false, false, false),
- new ('<', 0, false, false, false),
- new ('0', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('2', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('3', 0, false, false, false),
- new ('M', 0, false, false, false)
- };
- expectedCki = default (ConsoleKeyInfo);
- 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 _isReq,
- ProcessContinuousButtonPressed
- );
- Assert.Null (_escSeqReqProc);
- Assert.Equal (expectedCki, _newConsoleKeyInfo);
- Assert.Equal (0, (int)_key);
- Assert.Equal (0, (int)_mod);
- Assert.Equal ("CSI", _c1Control);
- Assert.Equal ("<", _code);
- Assert.Equal (3, _values.Length);
- Assert.Equal ("0", _values [0]);
- Assert.Equal ("2", _values [1]);
- Assert.Equal ("3", _values [^1]);
- Assert.Equal ("M", _terminating);
- Assert.True (_isKeyMouse);
- Assert.Equal (new() { MouseFlags.Button1Pressed }, _mouseFlags);
- Assert.Equal (new (1, 2), _pos);
- Assert.False (_isReq);
- Assert.Equal (0, (int)_arg1);
- Assert.Equal (Point.Empty, _arg2);
- ClearAll ();
- _cki = new ConsoleKeyInfo []
- {
- new ('\u001b', 0, false, false, false),
- new ('[', 0, false, false, false),
- new ('<', 0, false, false, false),
- new ('0', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('2', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('3', 0, false, false, false),
- new ('m', 0, false, false, false)
- };
- expectedCki = default (ConsoleKeyInfo);
- 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 _isReq,
- ProcessContinuousButtonPressed
- );
- Assert.Null (_escSeqReqProc);
- Assert.Equal (expectedCki, _newConsoleKeyInfo);
- Assert.Equal (0, (int)_key);
- Assert.Equal (0, (int)_mod);
- Assert.Equal ("CSI", _c1Control);
- Assert.Equal ("<", _code);
- Assert.Equal (3, _values.Length);
- Assert.Equal ("0", _values [0]);
- Assert.Equal ("2", _values [1]);
- Assert.Equal ("3", _values [^1]);
- Assert.Equal ("m", _terminating);
- Assert.True (_isKeyMouse);
- Assert.Equal (2, _mouseFlags.Count);
- Assert.Equal (
- new() { MouseFlags.Button1Released, MouseFlags.Button1Clicked },
- _mouseFlags
- );
- Assert.Equal (new (1, 2), _pos);
- Assert.False (_isReq);
- Assert.Equal (0, (int)_arg1);
- Assert.Equal (Point.Empty, _arg2);
- ClearAll ();
- _cki = new ConsoleKeyInfo []
- {
- new ('\u001b', 0, false, false, false),
- new ('[', 0, false, false, false),
- new ('<', 0, false, false, false),
- new ('0', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('2', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('3', 0, false, false, false),
- new ('M', 0, false, false, false)
- };
- expectedCki = default (ConsoleKeyInfo);
- 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 _isReq,
- ProcessContinuousButtonPressed
- );
- Assert.Null (_escSeqReqProc);
- Assert.Equal (expectedCki, _newConsoleKeyInfo);
- Assert.Equal (0, (int)_key);
- Assert.Equal (0, (int)_mod);
- Assert.Equal ("CSI", _c1Control);
- Assert.Equal ("<", _code);
- Assert.Equal (3, _values.Length);
- Assert.Equal ("0", _values [0]);
- Assert.Equal ("2", _values [1]);
- Assert.Equal ("3", _values [^1]);
- Assert.Equal ("M", _terminating);
- Assert.True (_isKeyMouse);
- Assert.Equal (new() { MouseFlags.Button1DoubleClicked }, _mouseFlags);
- Assert.Equal (new (1, 2), _pos);
- Assert.False (_isReq);
- ClearAll ();
- _cki = new ConsoleKeyInfo []
- {
- new ('\u001b', 0, false, false, false),
- new ('[', 0, false, false, false),
- new ('<', 0, false, false, false),
- new ('0', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('2', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('3', 0, false, false, false),
- new ('M', 0, false, false, false)
- };
- expectedCki = default (ConsoleKeyInfo);
- 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 _isReq,
- ProcessContinuousButtonPressed
- );
- Assert.Null (_escSeqReqProc);
- Assert.Equal (expectedCki, _newConsoleKeyInfo);
- Assert.Equal (0, (int)_key);
- Assert.Equal (0, (int)_mod);
- Assert.Equal ("CSI", _c1Control);
- Assert.Equal ("<", _code);
- Assert.Equal (3, _values.Length);
- Assert.Equal ("0", _values [0]);
- Assert.Equal ("2", _values [1]);
- Assert.Equal ("3", _values [^1]);
- Assert.Equal ("M", _terminating);
- Assert.True (_isKeyMouse);
- Assert.Equal (new() { MouseFlags.Button1TripleClicked }, _mouseFlags);
- Assert.Equal (new (1, 2), _pos);
- Assert.False (_isReq);
- var view = new View { Width = Dim.Fill (), Height = Dim.Fill (), WantContinuousButtonPressed = true };
- var top = new Toplevel ();
- top.Add (view);
- Application.Begin (top);
- Application.OnMouseEvent (new() { Position = new (0, 0), Flags = 0 });
- ClearAll ();
- _cki = new ConsoleKeyInfo []
- {
- new ('\u001b', 0, false, false, false),
- new ('[', 0, false, false, false),
- new ('<', 0, false, false, false),
- new ('0', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('2', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('3', 0, false, false, false),
- new ('M', 0, false, false, false)
- };
- expectedCki = default (ConsoleKeyInfo);
- 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 _isReq,
- ProcessContinuousButtonPressed
- );
- Assert.Null (_escSeqReqProc);
- Assert.Equal (expectedCki, _newConsoleKeyInfo);
- Assert.Equal (0, (int)_key);
- Assert.Equal (0, (int)_mod);
- Assert.Equal ("CSI", _c1Control);
- Assert.Equal ("<", _code);
- Assert.Equal (3, _values.Length);
- Assert.Equal ("0", _values [0]);
- Assert.Equal ("2", _values [1]);
- Assert.Equal ("3", _values [^1]);
- Assert.Equal ("M", _terminating);
- Assert.True (_isKeyMouse);
- Assert.Equal (new() { MouseFlags.Button1Pressed }, _mouseFlags);
- Assert.Equal (new (1, 2), _pos);
- Assert.False (_isReq);
- Application.Iteration += (s, a) =>
- {
- if (_actionStarted)
- {
- // set Application.WantContinuousButtonPressedView to null
- view.WantContinuousButtonPressed = false;
- Application.OnMouseEvent (new() { Position = new (0, 0), Flags = 0 });
- Application.RequestStop ();
- }
- };
- Application.Run (top);
- top.Dispose ();
- Assert.Null (Application.WantContinuousButtonPressedView);
- Assert.Equal (MouseFlags.Button1Pressed, _arg1);
- Assert.Equal (new (1, 2), _arg2);
- ClearAll ();
- _cki = new ConsoleKeyInfo []
- {
- new ('\u001b', 0, false, false, false),
- new ('[', 0, false, false, false),
- new ('<', 0, false, false, false),
- new ('0', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('2', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('3', 0, false, false, false),
- new ('m', 0, false, false, false)
- };
- expectedCki = default (ConsoleKeyInfo);
- 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 _isReq,
- ProcessContinuousButtonPressed
- );
- Assert.Null (_escSeqReqProc);
- Assert.Equal (expectedCki, _newConsoleKeyInfo);
- Assert.Equal (0, (int)_key);
- Assert.Equal (0, (int)_mod);
- Assert.Equal ("CSI", _c1Control);
- Assert.Equal ("<", _code);
- Assert.Equal (3, _values.Length);
- Assert.Equal ("0", _values [0]);
- Assert.Equal ("2", _values [1]);
- Assert.Equal ("3", _values [^1]);
- Assert.Equal ("m", _terminating);
- Assert.True (_isKeyMouse);
- Assert.Equal (new() { MouseFlags.Button1Released }, _mouseFlags);
- Assert.Equal (new (1, 2), _pos);
- Assert.False (_isReq);
- Assert.Equal (0, (int)_arg1);
- Assert.Equal (Point.Empty, _arg2);
- ClearAll ();
- Assert.Null (_escSeqReqProc);
- _escSeqReqProc = new ();
- _escSeqReqProc.Add ("t");
- _cki = new ConsoleKeyInfo []
- {
- 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),
- 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 (ConsoleKeyInfo);
- Assert.Single (_escSeqReqProc.Statuses);
- Assert.Equal ("t", _escSeqReqProc.Statuses [^1].Terminator);
- 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 _isReq,
- ProcessContinuousButtonPressed
- );
- Assert.Empty (_escSeqReqProc.Statuses);
- Assert.Equal (expectedCki, _newConsoleKeyInfo);
- Assert.Equal (0, (int)_key);
- Assert.Equal (0, (int)_mod);
- Assert.Equal ("CSI", _c1Control);
- Assert.Null (_code);
- Assert.Equal (3, _values.Length);
- Assert.Equal ("8", _values [0]);
- Assert.Equal ("10", _values [1]);
- Assert.Equal ("20", _values [^1]);
- Assert.Equal ("t", _terminating);
- Assert.False (_isKeyMouse);
- Assert.Equal (new() { 0 }, _mouseFlags);
- Assert.Equal (Point.Empty, _pos);
- Assert.True (_isReq);
- Assert.Equal (0, (int)_arg1);
- Assert.Equal (Point.Empty, _arg2);
- }
- [Fact]
- public void Defaults_Values ()
- {
- Assert.Equal ('\x1b', EscSeqUtils.KeyEsc);
- Assert.Equal ("\x1b[", EscSeqUtils.CSI);
- Assert.Equal ("\x1b[?1003h", EscSeqUtils.CSI_EnableAnyEventMouse);
- Assert.Equal ("\x1b[?1006h", EscSeqUtils.CSI_EnableSgrExtModeMouse);
- Assert.Equal ("\x1b[?1015h", EscSeqUtils.CSI_EnableUrxvtExtModeMouse);
- Assert.Equal ("\x1b[?1003l", EscSeqUtils.CSI_DisableAnyEventMouse);
- Assert.Equal ("\x1b[?1006l", EscSeqUtils.CSI_DisableSgrExtModeMouse);
- Assert.Equal ("\x1b[?1015l", EscSeqUtils.CSI_DisableUrxvtExtModeMouse);
- Assert.Equal ("\x1b[?1003h\x1b[?1015h\u001b[?1006h", EscSeqUtils.CSI_EnableMouseEvents);
- Assert.Equal ("\x1b[?1003l\x1b[?1015l\u001b[?1006l", EscSeqUtils.CSI_DisableMouseEvents);
- }
- [Fact]
- public void GetC1ControlChar_Tests ()
- {
- Assert.Equal ("IND", EscSeqUtils.GetC1ControlChar ('D'));
- Assert.Equal ("NEL", EscSeqUtils.GetC1ControlChar ('E'));
- Assert.Equal ("HTS", EscSeqUtils.GetC1ControlChar ('H'));
- Assert.Equal ("RI", EscSeqUtils.GetC1ControlChar ('M'));
- Assert.Equal ("SS2", EscSeqUtils.GetC1ControlChar ('N'));
- Assert.Equal ("SS3", EscSeqUtils.GetC1ControlChar ('O'));
- Assert.Equal ("DCS", EscSeqUtils.GetC1ControlChar ('P'));
- Assert.Equal ("SPA", EscSeqUtils.GetC1ControlChar ('V'));
- Assert.Equal ("EPA", EscSeqUtils.GetC1ControlChar ('W'));
- Assert.Equal ("SOS", EscSeqUtils.GetC1ControlChar ('X'));
- Assert.Equal ("DECID", EscSeqUtils.GetC1ControlChar ('Z'));
- Assert.Equal ("CSI", EscSeqUtils.GetC1ControlChar ('['));
- Assert.Equal ("ST", EscSeqUtils.GetC1ControlChar ('\\'));
- Assert.Equal ("OSC", EscSeqUtils.GetC1ControlChar (']'));
- Assert.Equal ("PM", EscSeqUtils.GetC1ControlChar ('^'));
- Assert.Equal ("APC", EscSeqUtils.GetC1ControlChar ('_'));
- Assert.Equal ("", EscSeqUtils.GetC1ControlChar ('\0'));
- }
- [Fact]
- public void GetConsoleInputKey_ConsoleKeyInfo ()
- {
- var cki = new ConsoleKeyInfo ('r', 0, false, false, false);
- var expectedCki = new ConsoleKeyInfo ('r', 0, false, false, false);
- Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
- cki = new ('r', 0, true, false, false);
- expectedCki = new ('r', 0, true, false, false);
- Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
- cki = new ('r', 0, false, true, false);
- expectedCki = new ('r', 0, false, true, false);
- Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
- cki = new ('r', 0, false, false, true);
- expectedCki = new ('r', 0, false, false, true);
- Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
- cki = new ('r', 0, true, true, false);
- expectedCki = new ('r', 0, true, true, false);
- Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
- cki = new ('r', 0, false, true, true);
- expectedCki = new ('r', 0, false, true, true);
- Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
- cki = new ('r', 0, true, true, true);
- expectedCki = new ('r', 0, true, true, true);
- Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
- cki = new ('\u0012', 0, false, false, false);
- expectedCki = new ('R', 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);
- Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
- cki = new ('\r', 0, false, false, false);
- expectedCki = new ('\r', ConsoleKey.Enter, false, false, false);
- Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
- cki = new ('\u007f', 0, false, false, false);
- expectedCki = new ('\u007f', ConsoleKey.Backspace, false, false, false);
- Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
- cki = new ('R', 0, false, false, false);
- expectedCki = new ('R', 0, false, false, false);
- Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
- }
- [Fact]
- public void GetConsoleKey_Tests ()
- {
- ConsoleModifiers mod = 0;
- Assert.Equal (ConsoleKey.UpArrow, EscSeqUtils.GetConsoleKey ('A', "", ref mod));
- Assert.Equal (ConsoleKey.DownArrow, EscSeqUtils.GetConsoleKey ('B', "", ref mod));
- Assert.Equal (_key = ConsoleKey.RightArrow, EscSeqUtils.GetConsoleKey ('C', "", ref mod));
- Assert.Equal (ConsoleKey.LeftArrow, EscSeqUtils.GetConsoleKey ('D', "", ref mod));
- Assert.Equal (ConsoleKey.End, EscSeqUtils.GetConsoleKey ('F', "", ref mod));
- Assert.Equal (ConsoleKey.Home, EscSeqUtils.GetConsoleKey ('H', "", ref mod));
- Assert.Equal (ConsoleKey.F1, EscSeqUtils.GetConsoleKey ('P', "", ref mod));
- Assert.Equal (ConsoleKey.F2, EscSeqUtils.GetConsoleKey ('Q', "", ref mod));
- Assert.Equal (ConsoleKey.F3, EscSeqUtils.GetConsoleKey ('R', "", ref mod));
- Assert.Equal (ConsoleKey.F4, EscSeqUtils.GetConsoleKey ('S', "", ref mod));
- Assert.Equal (ConsoleKey.Tab, EscSeqUtils.GetConsoleKey ('Z', "", ref mod));
- Assert.Equal (ConsoleModifiers.Shift, mod);
- Assert.Equal (0, (int)EscSeqUtils.GetConsoleKey ('\0', "", ref mod));
- Assert.Equal (ConsoleKey.Insert, EscSeqUtils.GetConsoleKey ('~', "2", ref mod));
- Assert.Equal (ConsoleKey.Delete, EscSeqUtils.GetConsoleKey ('~', "3", ref mod));
- Assert.Equal (ConsoleKey.PageUp, EscSeqUtils.GetConsoleKey ('~', "5", ref mod));
- Assert.Equal (ConsoleKey.PageDown, EscSeqUtils.GetConsoleKey ('~', "6", ref mod));
- Assert.Equal (ConsoleKey.F5, EscSeqUtils.GetConsoleKey ('~', "15", ref mod));
- Assert.Equal (ConsoleKey.F6, EscSeqUtils.GetConsoleKey ('~', "17", ref mod));
- Assert.Equal (ConsoleKey.F7, EscSeqUtils.GetConsoleKey ('~', "18", ref mod));
- Assert.Equal (ConsoleKey.F8, EscSeqUtils.GetConsoleKey ('~', "19", ref mod));
- Assert.Equal (ConsoleKey.F9, EscSeqUtils.GetConsoleKey ('~', "20", ref mod));
- Assert.Equal (ConsoleKey.F10, EscSeqUtils.GetConsoleKey ('~', "21", ref mod));
- Assert.Equal (ConsoleKey.F11, EscSeqUtils.GetConsoleKey ('~', "23", ref mod));
- Assert.Equal (ConsoleKey.F12, EscSeqUtils.GetConsoleKey ('~', "24", ref mod));
- Assert.Equal (0, (int)EscSeqUtils.GetConsoleKey ('~', "", ref mod));
- }
- [Fact]
- public void GetConsoleModifiers_Tests ()
- {
- Assert.Equal (ConsoleModifiers.Shift, EscSeqUtils.GetConsoleModifiers ("2"));
- Assert.Equal (ConsoleModifiers.Alt, EscSeqUtils.GetConsoleModifiers ("3"));
- Assert.Equal (ConsoleModifiers.Shift | ConsoleModifiers.Alt, EscSeqUtils.GetConsoleModifiers ("4"));
- Assert.Equal (ConsoleModifiers.Control, EscSeqUtils.GetConsoleModifiers ("5"));
- Assert.Equal (ConsoleModifiers.Shift | ConsoleModifiers.Control, EscSeqUtils.GetConsoleModifiers ("6"));
- Assert.Equal (ConsoleModifiers.Alt | ConsoleModifiers.Control, EscSeqUtils.GetConsoleModifiers ("7"));
- Assert.Equal (
- ConsoleModifiers.Shift | ConsoleModifiers.Alt | ConsoleModifiers.Control,
- EscSeqUtils.GetConsoleModifiers ("8")
- );
- Assert.Equal (0, (int)EscSeqUtils.GetConsoleModifiers (""));
- }
- [Fact]
- public void GetEscapeResult_Tests ()
- {
- char [] kChars = { '\u001b', '[', '5', ';', '1', '0', 'r' };
- (_c1Control, _code, _values, _terminating) = EscSeqUtils.GetEscapeResult (kChars);
- Assert.Equal ("CSI", _c1Control);
- Assert.Null (_code);
- Assert.Equal (2, _values.Length);
- Assert.Equal ("5", _values [0]);
- Assert.Equal ("10", _values [^1]);
- Assert.Equal ("r", _terminating);
- }
- [Fact]
- public void GetKeyCharArray_Tests ()
- {
- ConsoleKeyInfo [] cki =
- {
- new ('\u001b', 0, false, false, false),
- new ('[', 0, false, false, false),
- new ('5', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('1', 0, false, false, false),
- new ('0', 0, false, false, false),
- new ('r', 0, false, false, false)
- };
- Assert.Equal (new [] { '\u001b', '[', '5', ';', '1', '0', 'r' }, EscSeqUtils.GetKeyCharArray (cki));
- }
- [Fact]
- [AutoInitShutdown]
- public void GetMouse_Tests ()
- {
- ConsoleKeyInfo [] cki =
- {
- new ('\u001b', 0, false, false, false),
- new ('[', 0, false, false, false),
- new ('<', 0, false, false, false),
- new ('0', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('2', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('3', 0, false, false, false),
- new ('M', 0, false, false, false)
- };
- EscSeqUtils.GetMouse (cki, out List<MouseFlags> mouseFlags, out Point pos, ProcessContinuousButtonPressed);
- Assert.Equal (new() { MouseFlags.Button1Pressed }, mouseFlags);
- Assert.Equal (new (1, 2), pos);
- cki = new ConsoleKeyInfo []
- {
- new ('\u001b', 0, false, false, false),
- new ('[', 0, false, false, false),
- new ('<', 0, false, false, false),
- new ('0', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('2', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('3', 0, false, false, false),
- new ('m', 0, false, false, false)
- };
- EscSeqUtils.GetMouse (cki, out mouseFlags, out pos, ProcessContinuousButtonPressed);
- Assert.Equal (2, mouseFlags.Count);
- Assert.Equal (
- new() { MouseFlags.Button1Released, MouseFlags.Button1Clicked },
- mouseFlags
- );
- Assert.Equal (new (1, 2), pos);
- cki = new ConsoleKeyInfo []
- {
- new ('\u001b', 0, false, false, false),
- new ('[', 0, false, false, false),
- new ('<', 0, false, false, false),
- new ('0', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('2', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('3', 0, false, false, false),
- new ('M', 0, false, false, false)
- };
- EscSeqUtils.GetMouse (cki, out mouseFlags, out pos, ProcessContinuousButtonPressed);
- Assert.Equal (new() { MouseFlags.Button1DoubleClicked }, mouseFlags);
- Assert.Equal (new (1, 2), pos);
- cki = new ConsoleKeyInfo []
- {
- new ('\u001b', 0, false, false, false),
- new ('[', 0, false, false, false),
- new ('<', 0, false, false, false),
- new ('0', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('2', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('3', 0, false, false, false),
- new ('M', 0, false, false, false)
- };
- EscSeqUtils.GetMouse (cki, out mouseFlags, out pos, ProcessContinuousButtonPressed);
- Assert.Equal (new() { MouseFlags.Button1TripleClicked }, mouseFlags);
- Assert.Equal (new (1, 2), pos);
- cki = new ConsoleKeyInfo []
- {
- new ('\u001b', 0, false, false, false),
- new ('[', 0, false, false, false),
- new ('<', 0, false, false, false),
- new ('0', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('2', 0, false, false, false),
- new (';', 0, false, false, false),
- new ('3', 0, false, false, false),
- new ('m', 0, false, false, false)
- };
- EscSeqUtils.GetMouse (cki, out mouseFlags, out pos, ProcessContinuousButtonPressed);
- Assert.Equal (new() { MouseFlags.Button1Released }, mouseFlags);
- Assert.Equal (new (1, 2), pos);
- }
- [Fact]
- public void ResizeArray_ConsoleKeyInfo ()
- {
- ConsoleKeyInfo [] expectedCkInfos = null;
- var cki = new ConsoleKeyInfo ('\u001b', ConsoleKey.Escape, false, false, false);
- expectedCkInfos = EscSeqUtils.ResizeArray (cki, expectedCkInfos);
- Assert.Single (expectedCkInfos);
- Assert.Equal (cki, expectedCkInfos [0]);
- }
- private void ClearAll ()
- {
- _escSeqReqProc = default (EscSeqRequests);
- _newConsoleKeyInfo = default (ConsoleKeyInfo);
- _key = default (ConsoleKey);
- _cki = default (ConsoleKeyInfo []);
- _mod = default (ConsoleModifiers);
- _c1Control = default (string);
- _code = default (string);
- _terminating = default (string);
- _values = default (string []);
- _isKeyMouse = default (bool);
- _isReq = default (bool);
- _mouseFlags = default (List<MouseFlags>);
- _pos = default (Point);
- _arg1 = default (MouseFlags);
- _arg2 = default (Point);
- }
- private void ProcessContinuousButtonPressed (MouseFlags arg1, Point arg2)
- {
- _arg1 = arg1;
- _arg2 = arg2;
- _actionStarted = true;
- }
- }
|