EscSeqUtilsTests.cs 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Runtime.InteropServices;
  5. using Xunit;
  6. namespace Terminal.Gui.InputTests {
  7. public class EscSeqUtilsTests {
  8. [Fact]
  9. public void Defaults_Values ()
  10. {
  11. Assert.Equal ('\x1b', EscSeqUtils.KeyEsc);
  12. Assert.Equal ("\x1b[", EscSeqUtils.CSI);
  13. Assert.Equal ("\x1b[?1003h", EscSeqUtils.CSI_EnableAnyEventMouse);
  14. Assert.Equal ("\x1b[?1006h", EscSeqUtils.CSI_EnableSgrExtModeMouse);
  15. Assert.Equal ("\x1b[?1015h", EscSeqUtils.CSI_EnableUrxvtExtModeMouse);
  16. Assert.Equal ("\x1b[?1003l", EscSeqUtils.CSI_DisableAnyEventMouse);
  17. Assert.Equal ("\x1b[?1006l", EscSeqUtils.CSI_DisableSgrExtModeMouse);
  18. Assert.Equal ("\x1b[?1015l", EscSeqUtils.CSI_DisableUrxvtExtModeMouse);
  19. Assert.Equal ("\x1b[?1003h\x1b[?1015h\u001b[?1006h", EscSeqUtils.CSI_EnableMouseEvents);
  20. Assert.Equal ("\x1b[?1003l\x1b[?1015l\u001b[?1006l", EscSeqUtils.CSI_DisableMouseEvents);
  21. }
  22. [Fact]
  23. public void GetConsoleInputKey_ConsoleKeyInfo ()
  24. {
  25. var cki = new ConsoleKeyInfo ('r', 0, false, false, false);
  26. var expectedCki = new ConsoleKeyInfo ('r', 0, false, false, false);
  27. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  28. cki = new ConsoleKeyInfo ('r', 0, true, false, false);
  29. expectedCki = new ConsoleKeyInfo ('r', 0, true, false, false);
  30. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  31. cki = new ConsoleKeyInfo ('r', 0, false, true, false);
  32. expectedCki = new ConsoleKeyInfo ('r', 0, false, true, false);
  33. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  34. cki = new ConsoleKeyInfo ('r', 0, false, false, true);
  35. expectedCki = new ConsoleKeyInfo ('r', 0, false, false, true);
  36. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  37. cki = new ConsoleKeyInfo ('r', 0, true, true, false);
  38. expectedCki = new ConsoleKeyInfo ('r', 0, true, true, false);
  39. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  40. cki = new ConsoleKeyInfo ('r', 0, false, true, true);
  41. expectedCki = new ConsoleKeyInfo ('r', 0, false, true, true);
  42. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  43. cki = new ConsoleKeyInfo ('r', 0, true, true, true);
  44. expectedCki = new ConsoleKeyInfo ('r', 0, true, true, true);
  45. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  46. cki = new ConsoleKeyInfo ('\u0012', 0, false, false, false);
  47. expectedCki = new ConsoleKeyInfo ('R', ConsoleKey.R, false, false, true);
  48. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  49. cki = new ConsoleKeyInfo ('\0', (ConsoleKey)64, false, false, true);
  50. expectedCki = new ConsoleKeyInfo (' ', ConsoleKey.Spacebar, false, false, true);
  51. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  52. cki = new ConsoleKeyInfo ('\r', 0, false, false, false);
  53. expectedCki = new ConsoleKeyInfo ('\r', ConsoleKey.Enter, false, false, false);
  54. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  55. cki = new ConsoleKeyInfo ('\u007f', 0, false, false, false);
  56. expectedCki = new ConsoleKeyInfo ('\u007f', ConsoleKey.Backspace, false, false, false);
  57. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  58. cki = new ConsoleKeyInfo ('R', 0, false, false, false);
  59. expectedCki = new ConsoleKeyInfo ('R', 0, false, false, false);
  60. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  61. }
  62. [Fact]
  63. public void ResizeArray_ConsoleKeyInfo ()
  64. {
  65. ConsoleKeyInfo [] expectedCkInfos = null;
  66. var cki = new ConsoleKeyInfo ('\u001b', ConsoleKey.Escape, false, false, false);
  67. expectedCkInfos = EscSeqUtils.ResizeArray (cki, expectedCkInfos);
  68. Assert.Single (expectedCkInfos);
  69. Assert.Equal (cki, expectedCkInfos [0]);
  70. }
  71. private EscSeqRequests escSeqReqProc;
  72. private ConsoleKeyInfo newConsoleKeyInfo;
  73. private ConsoleKey key;
  74. private ConsoleKeyInfo [] cki;
  75. private ConsoleModifiers mod;
  76. private string c1Control, code, terminating;
  77. private string [] values;
  78. private bool isKeyMouse;
  79. private bool isReq;
  80. private List<MouseFlags> mouseFlags;
  81. Point pos;
  82. private MouseFlags arg1;
  83. private Point arg2;
  84. private bool actionStarted;
  85. [Fact, AutoInitShutdown]
  86. public void DecodeEscSeq_Tests ()
  87. {
  88. // ESC
  89. cki = new ConsoleKeyInfo [] { new ConsoleKeyInfo ('\u001b', 0, false, false, false) };
  90. var expectedCki = new ConsoleKeyInfo ('\u001b', ConsoleKey.Escape, false, false, false);
  91. 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);
  92. Assert.Null (escSeqReqProc);
  93. Assert.Equal (expectedCki, newConsoleKeyInfo);
  94. Assert.Equal (ConsoleKey.Escape, key);
  95. Assert.Equal (0, (int)mod);
  96. Assert.Equal ("ESC", c1Control);
  97. Assert.Null (code);
  98. Assert.Null (values);
  99. Assert.Null (terminating);
  100. Assert.False (isKeyMouse);
  101. Assert.Equal (new List<MouseFlags> () { 0 }, mouseFlags);
  102. Assert.Equal (Point.Empty, pos);
  103. Assert.False (isReq);
  104. Assert.Equal (0, (int)arg1);
  105. Assert.Equal (Point.Empty, arg2);
  106. ClearAll ();
  107. cki = new ConsoleKeyInfo [] {
  108. new ConsoleKeyInfo ('\u001b', 0, false, false, false),
  109. new ConsoleKeyInfo ('\u0012', 0, false, false, false)
  110. };
  111. expectedCki = new ConsoleKeyInfo ('\u0012', ConsoleKey.R, false, true, true);
  112. 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);
  113. Assert.Null (escSeqReqProc);
  114. Assert.Equal (expectedCki, newConsoleKeyInfo);
  115. Assert.Equal (ConsoleKey.R, key);
  116. Assert.Equal (0, (int)mod);
  117. Assert.Equal ("ESC", c1Control);
  118. Assert.Null (code);
  119. Assert.Null (values);
  120. Assert.Equal ("\u0012", terminating);
  121. Assert.False (isKeyMouse);
  122. Assert.Equal (new List<MouseFlags> () { 0 }, mouseFlags);
  123. Assert.Equal (Point.Empty, pos);
  124. Assert.False (isReq);
  125. Assert.Equal (0, (int)arg1);
  126. Assert.Equal (Point.Empty, arg2);
  127. ClearAll ();
  128. cki = new ConsoleKeyInfo [] {
  129. new ConsoleKeyInfo ('\u001b', 0, false, false, false),
  130. new ConsoleKeyInfo ('r', 0, false, false, false)
  131. };
  132. expectedCki = new ConsoleKeyInfo ('R', ConsoleKey.R, false, true, false);
  133. 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);
  134. Assert.Null (escSeqReqProc);
  135. Assert.Equal (expectedCki, newConsoleKeyInfo);
  136. Assert.Equal (ConsoleKey.R, key);
  137. Assert.Equal (0, (int)mod);
  138. Assert.Equal ("ESC", c1Control);
  139. Assert.Null (code);
  140. Assert.Null (values);
  141. Assert.Equal ("r", terminating);
  142. Assert.False (isKeyMouse);
  143. Assert.Equal (new List<MouseFlags> () { 0 }, mouseFlags);
  144. Assert.Equal (Point.Empty, pos);
  145. Assert.False (isReq);
  146. Assert.Equal (0, (int)arg1);
  147. Assert.Equal (Point.Empty, arg2);
  148. // SS3
  149. ClearAll ();
  150. cki = new ConsoleKeyInfo [] {
  151. new ConsoleKeyInfo ('\u001b', 0, false, false, false),
  152. new ConsoleKeyInfo ('O', 0, false, false, false),
  153. new ConsoleKeyInfo ('R', 0, false, false, false)
  154. };
  155. expectedCki = new ConsoleKeyInfo ('\0', ConsoleKey.F3, false, false, false);
  156. 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);
  157. Assert.Null (escSeqReqProc);
  158. Assert.Equal (expectedCki, newConsoleKeyInfo);
  159. Assert.Equal (ConsoleKey.F3, key);
  160. Assert.Equal (0, (int)mod);
  161. Assert.Equal ("SS3", c1Control);
  162. Assert.Null (code);
  163. Assert.Single (values);
  164. Assert.Null (values [0]);
  165. Assert.Equal ("R", terminating);
  166. Assert.False (isKeyMouse);
  167. Assert.Equal (new List<MouseFlags> () { 0 }, mouseFlags);
  168. Assert.Equal (Point.Empty, pos);
  169. Assert.False (isReq);
  170. Assert.Equal (0, (int)arg1);
  171. Assert.Equal (Point.Empty, arg2);
  172. // CSI
  173. ClearAll ();
  174. cki = new ConsoleKeyInfo [] {
  175. new ConsoleKeyInfo ('\u001b', 0, false, false, false),
  176. new ConsoleKeyInfo ('[', 0, false, false, false),
  177. new ConsoleKeyInfo ('1', 0, false, false, false),
  178. new ConsoleKeyInfo (';', 0, false, false, false),
  179. new ConsoleKeyInfo ('2', 0, false, false, false),
  180. new ConsoleKeyInfo ('R', 0, false, false, false)
  181. };
  182. expectedCki = new ConsoleKeyInfo ('\0', ConsoleKey.F3, true, false, false);
  183. 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);
  184. Assert.Null (escSeqReqProc);
  185. Assert.Equal (expectedCki, newConsoleKeyInfo);
  186. Assert.Equal (ConsoleKey.F3, key);
  187. Assert.Equal (ConsoleModifiers.Shift, mod);
  188. Assert.Equal ("CSI", c1Control);
  189. Assert.Null (code);
  190. Assert.Equal (2, values.Length);
  191. Assert.Equal ("1", values [0]);
  192. Assert.Equal ("2", values [^1]);
  193. Assert.Equal ("R", terminating);
  194. Assert.False (isKeyMouse);
  195. Assert.Equal (new List<MouseFlags> () { 0 }, mouseFlags);
  196. Assert.Equal (Point.Empty, pos);
  197. Assert.False (isReq);
  198. Assert.Equal (0, (int)arg1);
  199. Assert.Equal (Point.Empty, arg2);
  200. ClearAll ();
  201. cki = new ConsoleKeyInfo [] {
  202. new ConsoleKeyInfo ('\u001b', 0, false, false, false),
  203. new ConsoleKeyInfo ('[', 0, false, false, false),
  204. new ConsoleKeyInfo ('1', 0, false, false, false),
  205. new ConsoleKeyInfo (';', 0, false, false, false),
  206. new ConsoleKeyInfo ('3', 0, false, false, false),
  207. new ConsoleKeyInfo ('R', 0, false, false, false)
  208. };
  209. expectedCki = new ConsoleKeyInfo ('\0', ConsoleKey.F3, false, true, false);
  210. 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);
  211. Assert.Null (escSeqReqProc);
  212. Assert.Equal (expectedCki, newConsoleKeyInfo);
  213. Assert.Equal (ConsoleKey.F3, key);
  214. Assert.Equal (ConsoleModifiers.Alt, mod);
  215. Assert.Equal ("CSI", c1Control);
  216. Assert.Null (code);
  217. Assert.Equal (2, values.Length);
  218. Assert.Equal ("1", values [0]);
  219. Assert.Equal ("3", values [^1]);
  220. Assert.Equal ("R", terminating);
  221. Assert.False (isKeyMouse);
  222. Assert.Equal (new List<MouseFlags> () { 0 }, mouseFlags);
  223. Assert.Equal (Point.Empty, pos);
  224. Assert.False (isReq);
  225. Assert.Equal (0, (int)arg1);
  226. Assert.Equal (Point.Empty, arg2);
  227. ClearAll ();
  228. cki = new ConsoleKeyInfo [] {
  229. new ConsoleKeyInfo ('\u001b', 0, false, false, false),
  230. new ConsoleKeyInfo ('[', 0, false, false, false),
  231. new ConsoleKeyInfo ('1', 0, false, false, false),
  232. new ConsoleKeyInfo (';', 0, false, false, false),
  233. new ConsoleKeyInfo ('4', 0, false, false, false),
  234. new ConsoleKeyInfo ('R', 0, false, false, false)
  235. };
  236. expectedCki = new ConsoleKeyInfo ('\0', ConsoleKey.F3, true, true, false);
  237. 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);
  238. Assert.Null (escSeqReqProc);
  239. Assert.Equal (expectedCki, newConsoleKeyInfo);
  240. Assert.Equal (ConsoleKey.F3, key);
  241. Assert.Equal (ConsoleModifiers.Shift | ConsoleModifiers.Alt, mod);
  242. Assert.Equal ("CSI", c1Control);
  243. Assert.Null (code);
  244. Assert.Equal (2, values.Length);
  245. Assert.Equal ("1", values [0]);
  246. Assert.Equal ("4", values [^1]);
  247. Assert.Equal ("R", terminating);
  248. Assert.False (isKeyMouse);
  249. Assert.Equal (new List<MouseFlags> () { 0 }, mouseFlags);
  250. Assert.Equal (Point.Empty, pos);
  251. Assert.False (isReq);
  252. Assert.Equal (0, (int)arg1);
  253. Assert.Equal (Point.Empty, arg2);
  254. ClearAll ();
  255. cki = new ConsoleKeyInfo [] {
  256. new ConsoleKeyInfo ('\u001b', 0, false, false, false),
  257. new ConsoleKeyInfo ('[', 0, false, false, false),
  258. new ConsoleKeyInfo ('1', 0, false, false, false),
  259. new ConsoleKeyInfo (';', 0, false, false, false),
  260. new ConsoleKeyInfo ('5', 0, false, false, false),
  261. new ConsoleKeyInfo ('R', 0, false, false, false)
  262. };
  263. expectedCki = new ConsoleKeyInfo ('\0', ConsoleKey.F3, false, false, true);
  264. 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);
  265. Assert.Null (escSeqReqProc);
  266. Assert.Equal (expectedCki, newConsoleKeyInfo);
  267. Assert.Equal (ConsoleKey.F3, key);
  268. Assert.Equal (ConsoleModifiers.Control, mod);
  269. Assert.Equal ("CSI", c1Control);
  270. Assert.Null (code);
  271. Assert.Equal (2, values.Length);
  272. Assert.Equal ("1", values [0]);
  273. Assert.Equal ("5", values [^1]);
  274. Assert.Equal ("R", terminating);
  275. Assert.False (isKeyMouse);
  276. Assert.Equal (new List<MouseFlags> () { 0 }, mouseFlags);
  277. Assert.Equal (Point.Empty, pos);
  278. Assert.False (isReq);
  279. Assert.Equal (0, (int)arg1);
  280. Assert.Equal (Point.Empty, arg2);
  281. ClearAll ();
  282. cki = new ConsoleKeyInfo [] {
  283. new ConsoleKeyInfo ('\u001b', 0, false, false, false),
  284. new ConsoleKeyInfo ('[', 0, false, false, false),
  285. new ConsoleKeyInfo ('1', 0, false, false, false),
  286. new ConsoleKeyInfo (';', 0, false, false, false),
  287. new ConsoleKeyInfo ('6', 0, false, false, false),
  288. new ConsoleKeyInfo ('R', 0, false, false, false)
  289. };
  290. expectedCki = new ConsoleKeyInfo ('\0', ConsoleKey.F3, true, false, true);
  291. 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);
  292. Assert.Null (escSeqReqProc);
  293. Assert.Equal (expectedCki, newConsoleKeyInfo);
  294. Assert.Equal (ConsoleKey.F3, key);
  295. Assert.Equal (ConsoleModifiers.Shift | ConsoleModifiers.Control, mod);
  296. Assert.Equal ("CSI", c1Control);
  297. Assert.Null (code);
  298. Assert.Equal (2, values.Length);
  299. Assert.Equal ("1", values [0]);
  300. Assert.Equal ("6", values [^1]);
  301. Assert.Equal ("R", terminating);
  302. Assert.False (isKeyMouse);
  303. Assert.Equal (new List<MouseFlags> () { 0 }, mouseFlags);
  304. Assert.Equal (Point.Empty, pos);
  305. Assert.False (isReq);
  306. Assert.Equal (0, (int)arg1);
  307. Assert.Equal (Point.Empty, arg2);
  308. ClearAll ();
  309. cki = new ConsoleKeyInfo [] {
  310. new ConsoleKeyInfo ('\u001b', 0, false, false, false),
  311. new ConsoleKeyInfo ('[', 0, false, false, false),
  312. new ConsoleKeyInfo ('1', 0, false, false, false),
  313. new ConsoleKeyInfo (';', 0, false, false, false),
  314. new ConsoleKeyInfo ('7', 0, false, false, false),
  315. new ConsoleKeyInfo ('R', 0, false, false, false)
  316. };
  317. expectedCki = new ConsoleKeyInfo ('\0', ConsoleKey.F3, false, true, true);
  318. 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);
  319. Assert.Null (escSeqReqProc);
  320. Assert.Equal (expectedCki, newConsoleKeyInfo);
  321. Assert.Equal (ConsoleKey.F3, key);
  322. Assert.Equal (ConsoleModifiers.Alt | ConsoleModifiers.Control, mod);
  323. Assert.Equal ("CSI", c1Control);
  324. Assert.Null (code);
  325. Assert.Equal (2, values.Length);
  326. Assert.Equal ("1", values [0]);
  327. Assert.Equal ("7", values [^1]);
  328. Assert.Equal ("R", terminating);
  329. Assert.False (isKeyMouse);
  330. Assert.Equal (new List<MouseFlags> () { 0 }, mouseFlags);
  331. Assert.Equal (Point.Empty, pos);
  332. Assert.False (isReq);
  333. Assert.Equal (0, (int)arg1);
  334. Assert.Equal (Point.Empty, arg2);
  335. ClearAll ();
  336. cki = new ConsoleKeyInfo [] {
  337. new ConsoleKeyInfo ('\u001b', 0, false, false, false),
  338. new ConsoleKeyInfo ('[', 0, false, false, false),
  339. new ConsoleKeyInfo ('1', 0, false, false, false),
  340. new ConsoleKeyInfo (';', 0, false, false, false),
  341. new ConsoleKeyInfo ('8', 0, false, false, false),
  342. new ConsoleKeyInfo ('R', 0, false, false, false)
  343. };
  344. expectedCki = new ConsoleKeyInfo ('\0', ConsoleKey.F3, true, true, true);
  345. 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);
  346. Assert.Null (escSeqReqProc);
  347. Assert.Equal (expectedCki, newConsoleKeyInfo);
  348. Assert.Equal (ConsoleKey.F3, key);
  349. Assert.Equal (ConsoleModifiers.Shift | ConsoleModifiers.Alt | ConsoleModifiers.Control, mod);
  350. Assert.Equal ("CSI", c1Control);
  351. Assert.Null (code);
  352. Assert.Equal (2, values.Length);
  353. Assert.Equal ("1", values [0]);
  354. Assert.Equal ("8", values [^1]);
  355. Assert.Equal ("R", terminating);
  356. Assert.False (isKeyMouse);
  357. Assert.Equal (new List<MouseFlags> () { 0 }, mouseFlags);
  358. Assert.Equal (Point.Empty, pos);
  359. Assert.False (isReq);
  360. Assert.Equal (0, (int)arg1);
  361. Assert.Equal (Point.Empty, arg2);
  362. ClearAll ();
  363. cki = new ConsoleKeyInfo [] {
  364. new ConsoleKeyInfo ('\u001b', 0, false, false, false),
  365. new ConsoleKeyInfo ('[', 0, false, false, false),
  366. new ConsoleKeyInfo ('<', 0, false, false, false),
  367. new ConsoleKeyInfo ('0', 0, false, false, false),
  368. new ConsoleKeyInfo (';', 0, false, false, false),
  369. new ConsoleKeyInfo ('2', 0, false, false, false),
  370. new ConsoleKeyInfo (';', 0, false, false, false),
  371. new ConsoleKeyInfo ('3', 0, false, false, false),
  372. new ConsoleKeyInfo ('M', 0, false, false, false)
  373. };
  374. expectedCki = default;
  375. 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);
  376. Assert.Null (escSeqReqProc);
  377. Assert.Equal (expectedCki, newConsoleKeyInfo);
  378. Assert.Equal (0, (int)key);
  379. Assert.Equal (0, (int)mod);
  380. Assert.Equal ("CSI", c1Control);
  381. Assert.Equal ("<", code);
  382. Assert.Equal (3, values.Length);
  383. Assert.Equal ("0", values [0]);
  384. Assert.Equal ("2", values [1]);
  385. Assert.Equal ("3", values [^1]);
  386. Assert.Equal ("M", terminating);
  387. Assert.True (isKeyMouse);
  388. Assert.Equal (new List<MouseFlags> () { MouseFlags.Button1Pressed }, mouseFlags);
  389. Assert.Equal (new Point (1, 2), pos);
  390. Assert.False (isReq);
  391. Assert.Equal (0, (int)arg1);
  392. Assert.Equal (Point.Empty, arg2);
  393. ClearAll ();
  394. cki = new ConsoleKeyInfo [] {
  395. new ConsoleKeyInfo ('\u001b', 0, false, false, false),
  396. new ConsoleKeyInfo ('[', 0, false, false, false),
  397. new ConsoleKeyInfo ('<', 0, false, false, false),
  398. new ConsoleKeyInfo ('0', 0, false, false, false),
  399. new ConsoleKeyInfo (';', 0, false, false, false),
  400. new ConsoleKeyInfo ('2', 0, false, false, false),
  401. new ConsoleKeyInfo (';', 0, false, false, false),
  402. new ConsoleKeyInfo ('3', 0, false, false, false),
  403. new ConsoleKeyInfo ('m', 0, false, false, false)
  404. };
  405. expectedCki = default;
  406. 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);
  407. Assert.Null (escSeqReqProc);
  408. Assert.Equal (expectedCki, newConsoleKeyInfo);
  409. Assert.Equal (0, (int)key);
  410. Assert.Equal (0, (int)mod);
  411. Assert.Equal ("CSI", c1Control);
  412. Assert.Equal ("<", code);
  413. Assert.Equal (3, values.Length);
  414. Assert.Equal ("0", values [0]);
  415. Assert.Equal ("2", values [1]);
  416. Assert.Equal ("3", values [^1]);
  417. Assert.Equal ("m", terminating);
  418. Assert.True (isKeyMouse);
  419. Assert.Equal (2, mouseFlags.Count);
  420. Assert.Equal (new List<MouseFlags> () { MouseFlags.Button1Released, MouseFlags.Button1Clicked }, mouseFlags);
  421. Assert.Equal (new Point (1, 2), pos);
  422. Assert.False (isReq);
  423. Assert.Equal (0, (int)arg1);
  424. Assert.Equal (Point.Empty, arg2);
  425. ClearAll ();
  426. cki = new ConsoleKeyInfo [] {
  427. new ConsoleKeyInfo ('\u001b', 0, false, false, false),
  428. new ConsoleKeyInfo ('[', 0, false, false, false),
  429. new ConsoleKeyInfo ('<', 0, false, false, false),
  430. new ConsoleKeyInfo ('0', 0, false, false, false),
  431. new ConsoleKeyInfo (';', 0, false, false, false),
  432. new ConsoleKeyInfo ('2', 0, false, false, false),
  433. new ConsoleKeyInfo (';', 0, false, false, false),
  434. new ConsoleKeyInfo ('3', 0, false, false, false),
  435. new ConsoleKeyInfo ('M', 0, false, false, false)
  436. };
  437. expectedCki = default;
  438. 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);
  439. Assert.Null (escSeqReqProc);
  440. Assert.Equal (expectedCki, newConsoleKeyInfo);
  441. Assert.Equal (0, (int)key);
  442. Assert.Equal (0, (int)mod);
  443. Assert.Equal ("CSI", c1Control);
  444. Assert.Equal ("<", code);
  445. Assert.Equal (3, values.Length);
  446. Assert.Equal ("0", values [0]);
  447. Assert.Equal ("2", values [1]);
  448. Assert.Equal ("3", values [^1]);
  449. Assert.Equal ("M", terminating);
  450. Assert.True (isKeyMouse);
  451. Assert.Equal (new List<MouseFlags> () { MouseFlags.Button1DoubleClicked }, mouseFlags);
  452. Assert.Equal (new Point (1, 2), pos);
  453. Assert.False (isReq);
  454. ClearAll ();
  455. cki = new ConsoleKeyInfo [] {
  456. new ConsoleKeyInfo ('\u001b', 0, false, false, false),
  457. new ConsoleKeyInfo ('[', 0, false, false, false),
  458. new ConsoleKeyInfo ('<', 0, false, false, false),
  459. new ConsoleKeyInfo ('0', 0, false, false, false),
  460. new ConsoleKeyInfo (';', 0, false, false, false),
  461. new ConsoleKeyInfo ('2', 0, false, false, false),
  462. new ConsoleKeyInfo (';', 0, false, false, false),
  463. new ConsoleKeyInfo ('3', 0, false, false, false),
  464. new ConsoleKeyInfo ('M', 0, false, false, false)
  465. };
  466. expectedCki = default;
  467. 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);
  468. Assert.Null (escSeqReqProc);
  469. Assert.Equal (expectedCki, newConsoleKeyInfo);
  470. Assert.Equal (0, (int)key);
  471. Assert.Equal (0, (int)mod);
  472. Assert.Equal ("CSI", c1Control);
  473. Assert.Equal ("<", code);
  474. Assert.Equal (3, values.Length);
  475. Assert.Equal ("0", values [0]);
  476. Assert.Equal ("2", values [1]);
  477. Assert.Equal ("3", values [^1]);
  478. Assert.Equal ("M", terminating);
  479. Assert.True (isKeyMouse);
  480. Assert.Equal (new List<MouseFlags> () { MouseFlags.Button1TripleClicked }, mouseFlags);
  481. Assert.Equal (new Point (1, 2), pos);
  482. Assert.False (isReq);
  483. var view = new View () {
  484. Width = Dim.Fill (),
  485. Height = Dim.Fill (),
  486. WantContinuousButtonPressed = true
  487. };
  488. Application.Top.Add (view);
  489. Application.Begin (Application.Top);
  490. Application.OnMouseEvent (new MouseEventEventArgs (new MouseEvent () {
  491. X = 0,
  492. Y = 0,
  493. Flags = 0
  494. }));
  495. ClearAll ();
  496. cki = new ConsoleKeyInfo [] {
  497. new ConsoleKeyInfo ('\u001b', 0, false, false, false),
  498. new ConsoleKeyInfo ('[', 0, false, false, false),
  499. new ConsoleKeyInfo ('<', 0, false, false, false),
  500. new ConsoleKeyInfo ('0', 0, false, false, false),
  501. new ConsoleKeyInfo (';', 0, false, false, false),
  502. new ConsoleKeyInfo ('2', 0, false, false, false),
  503. new ConsoleKeyInfo (';', 0, false, false, false),
  504. new ConsoleKeyInfo ('3', 0, false, false, false),
  505. new ConsoleKeyInfo ('M', 0, false, false, false)
  506. };
  507. expectedCki = default;
  508. 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);
  509. Assert.Null (escSeqReqProc);
  510. Assert.Equal (expectedCki, newConsoleKeyInfo);
  511. Assert.Equal (0, (int)key);
  512. Assert.Equal (0, (int)mod);
  513. Assert.Equal ("CSI", c1Control);
  514. Assert.Equal ("<", code);
  515. Assert.Equal (3, values.Length);
  516. Assert.Equal ("0", values [0]);
  517. Assert.Equal ("2", values [1]);
  518. Assert.Equal ("3", values [^1]);
  519. Assert.Equal ("M", terminating);
  520. Assert.True (isKeyMouse);
  521. Assert.Equal (new List<MouseFlags> () { MouseFlags.Button1Pressed }, mouseFlags);
  522. Assert.Equal (new Point (1, 2), pos);
  523. Assert.False (isReq);
  524. Application.Iteration += (s, a) => {
  525. if (actionStarted) {
  526. // set Application.WantContinuousButtonPressedView to null
  527. view.WantContinuousButtonPressed = false;
  528. Application.OnMouseEvent (new MouseEventEventArgs (new MouseEvent () {
  529. X = 0,
  530. Y = 0,
  531. Flags = 0
  532. }));
  533. Application.RequestStop ();
  534. }
  535. };
  536. Application.Run ();
  537. Assert.Null (Application.WantContinuousButtonPressedView);
  538. Assert.Equal (MouseFlags.Button1Pressed, arg1);
  539. Assert.Equal (new Point (1, 2), arg2);
  540. ClearAll ();
  541. cki = new ConsoleKeyInfo [] {
  542. new ConsoleKeyInfo ('\u001b', 0, false, false, false),
  543. new ConsoleKeyInfo ('[', 0, false, false, false),
  544. new ConsoleKeyInfo ('<', 0, false, false, false),
  545. new ConsoleKeyInfo ('0', 0, false, false, false),
  546. new ConsoleKeyInfo (';', 0, false, false, false),
  547. new ConsoleKeyInfo ('2', 0, false, false, false),
  548. new ConsoleKeyInfo (';', 0, false, false, false),
  549. new ConsoleKeyInfo ('3', 0, false, false, false),
  550. new ConsoleKeyInfo ('m', 0, false, false, false)
  551. };
  552. expectedCki = default;
  553. 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);
  554. Assert.Null (escSeqReqProc);
  555. Assert.Equal (expectedCki, newConsoleKeyInfo);
  556. Assert.Equal (0, (int)key);
  557. Assert.Equal (0, (int)mod);
  558. Assert.Equal ("CSI", c1Control);
  559. Assert.Equal ("<", code);
  560. Assert.Equal (3, values.Length);
  561. Assert.Equal ("0", values [0]);
  562. Assert.Equal ("2", values [1]);
  563. Assert.Equal ("3", values [^1]);
  564. Assert.Equal ("m", terminating);
  565. Assert.True (isKeyMouse);
  566. Assert.Equal (new List<MouseFlags> () { MouseFlags.Button1Released }, mouseFlags);
  567. Assert.Equal (new Point (1, 2), pos);
  568. Assert.False (isReq);
  569. Assert.Equal (0, (int)arg1);
  570. Assert.Equal (Point.Empty, arg2);
  571. ClearAll ();
  572. Assert.Null (escSeqReqProc);
  573. escSeqReqProc = new EscSeqRequests ();
  574. escSeqReqProc.Add ("t");
  575. cki = new ConsoleKeyInfo [] {
  576. new ConsoleKeyInfo ('\u001b', 0, false, false, false),
  577. new ConsoleKeyInfo ('[', 0, false, false, false),
  578. new ConsoleKeyInfo ('8', 0, false, false, false),
  579. new ConsoleKeyInfo (';', 0, false, false, false),
  580. new ConsoleKeyInfo ('1', 0, false, false, false),
  581. new ConsoleKeyInfo ('0', 0, false, false, false),
  582. new ConsoleKeyInfo (';', 0, false, false, false),
  583. new ConsoleKeyInfo ('2', 0, false, false, false),
  584. new ConsoleKeyInfo ('0', 0, false, false, false),
  585. new ConsoleKeyInfo ('t', 0, false, false, false)
  586. };
  587. expectedCki = default;
  588. Assert.Single (escSeqReqProc.Statuses);
  589. Assert.Equal ("t", escSeqReqProc.Statuses [^1].Terminator);
  590. 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);
  591. Assert.Empty (escSeqReqProc.Statuses);
  592. Assert.Equal (expectedCki, newConsoleKeyInfo);
  593. Assert.Equal (0, (int)key);
  594. Assert.Equal (0, (int)mod);
  595. Assert.Equal ("CSI", c1Control);
  596. Assert.Null (code);
  597. Assert.Equal (3, values.Length);
  598. Assert.Equal ("8", values [0]);
  599. Assert.Equal ("10", values [1]);
  600. Assert.Equal ("20", values [^1]);
  601. Assert.Equal ("t", terminating);
  602. Assert.False (isKeyMouse);
  603. Assert.Equal (new List<MouseFlags> () { 0 }, mouseFlags);
  604. Assert.Equal (Point.Empty, pos);
  605. Assert.True (isReq);
  606. Assert.Equal (0, (int)arg1);
  607. Assert.Equal (Point.Empty, arg2);
  608. }
  609. private void ClearAll ()
  610. {
  611. escSeqReqProc = default;
  612. newConsoleKeyInfo = default;
  613. key = default;
  614. cki = default;
  615. mod = default;
  616. c1Control = default;
  617. code = default;
  618. terminating = default;
  619. values = default;
  620. isKeyMouse = default;
  621. isReq = default;
  622. mouseFlags = default;
  623. pos = default;
  624. arg1 = default;
  625. arg2 = default;
  626. }
  627. private void ProcessContinuousButtonPressed (MouseFlags arg1, Point arg2)
  628. {
  629. this.arg1 = arg1;
  630. this.arg2 = arg2;
  631. actionStarted = true;
  632. }
  633. [Fact]
  634. public void GetEscapeResult_Tests ()
  635. {
  636. char [] kChars = new char [] { '\u001b', '[', '5', ';', '1', '0', 'r' };
  637. (c1Control, code, values, terminating) = EscSeqUtils.GetEscapeResult (kChars);
  638. Assert.Equal ("CSI", c1Control);
  639. Assert.Null (code);
  640. Assert.Equal (2, values.Length);
  641. Assert.Equal ("5", values [0]);
  642. Assert.Equal ("10", values [^1]);
  643. Assert.Equal ("r", terminating);
  644. }
  645. [Fact]
  646. public void GetC1ControlChar_Tests ()
  647. {
  648. Assert.Equal ("IND", EscSeqUtils.GetC1ControlChar ('D'));
  649. Assert.Equal ("NEL", EscSeqUtils.GetC1ControlChar ('E'));
  650. Assert.Equal ("HTS", EscSeqUtils.GetC1ControlChar ('H'));
  651. Assert.Equal ("RI", EscSeqUtils.GetC1ControlChar ('M'));
  652. Assert.Equal ("SS2", EscSeqUtils.GetC1ControlChar ('N'));
  653. Assert.Equal ("SS3", EscSeqUtils.GetC1ControlChar ('O'));
  654. Assert.Equal ("DCS", EscSeqUtils.GetC1ControlChar ('P'));
  655. Assert.Equal ("SPA", EscSeqUtils.GetC1ControlChar ('V'));
  656. Assert.Equal ("EPA", EscSeqUtils.GetC1ControlChar ('W'));
  657. Assert.Equal ("SOS", EscSeqUtils.GetC1ControlChar ('X'));
  658. Assert.Equal ("DECID", EscSeqUtils.GetC1ControlChar ('Z'));
  659. Assert.Equal ("CSI", EscSeqUtils.GetC1ControlChar ('['));
  660. Assert.Equal ("ST", EscSeqUtils.GetC1ControlChar ('\\'));
  661. Assert.Equal ("OSC", EscSeqUtils.GetC1ControlChar (']'));
  662. Assert.Equal ("PM", EscSeqUtils.GetC1ControlChar ('^'));
  663. Assert.Equal ("APC", EscSeqUtils.GetC1ControlChar ('_'));
  664. Assert.Equal ("", EscSeqUtils.GetC1ControlChar ('\0'));
  665. }
  666. [Fact]
  667. public void GetConsoleModifiers_Tests ()
  668. {
  669. Assert.Equal (ConsoleModifiers.Shift, EscSeqUtils.GetConsoleModifiers ("2"));
  670. Assert.Equal (ConsoleModifiers.Alt, EscSeqUtils.GetConsoleModifiers ("3"));
  671. Assert.Equal (ConsoleModifiers.Shift | ConsoleModifiers.Alt, EscSeqUtils.GetConsoleModifiers ("4"));
  672. Assert.Equal (ConsoleModifiers.Control, EscSeqUtils.GetConsoleModifiers ("5"));
  673. Assert.Equal (ConsoleModifiers.Shift | ConsoleModifiers.Control, EscSeqUtils.GetConsoleModifiers ("6"));
  674. Assert.Equal (ConsoleModifiers.Alt | ConsoleModifiers.Control, EscSeqUtils.GetConsoleModifiers ("7"));
  675. Assert.Equal (ConsoleModifiers.Shift | ConsoleModifiers.Alt | ConsoleModifiers.Control, EscSeqUtils.GetConsoleModifiers ("8"));
  676. Assert.Equal (0, (int)EscSeqUtils.GetConsoleModifiers (""));
  677. }
  678. [Fact]
  679. public void GetConsoleKey_Tests ()
  680. {
  681. ConsoleModifiers mod = 0;
  682. Assert.Equal (ConsoleKey.UpArrow, EscSeqUtils.GetConsoleKey ('A', "", ref mod));
  683. Assert.Equal (ConsoleKey.DownArrow, EscSeqUtils.GetConsoleKey ('B', "", ref mod));
  684. Assert.Equal (key = ConsoleKey.RightArrow, EscSeqUtils.GetConsoleKey ('C', "", ref mod));
  685. Assert.Equal (ConsoleKey.LeftArrow, EscSeqUtils.GetConsoleKey ('D', "", ref mod));
  686. Assert.Equal (ConsoleKey.End, EscSeqUtils.GetConsoleKey ('F', "", ref mod));
  687. Assert.Equal (ConsoleKey.Home, EscSeqUtils.GetConsoleKey ('H', "", ref mod));
  688. Assert.Equal (ConsoleKey.F1, EscSeqUtils.GetConsoleKey ('P', "", ref mod));
  689. Assert.Equal (ConsoleKey.F2, EscSeqUtils.GetConsoleKey ('Q', "", ref mod));
  690. Assert.Equal (ConsoleKey.F3, EscSeqUtils.GetConsoleKey ('R', "", ref mod));
  691. Assert.Equal (ConsoleKey.F4, EscSeqUtils.GetConsoleKey ('S', "", ref mod));
  692. Assert.Equal (ConsoleKey.Tab, EscSeqUtils.GetConsoleKey ('Z', "", ref mod));
  693. Assert.Equal (ConsoleModifiers.Shift, mod);
  694. Assert.Equal (0, (int)EscSeqUtils.GetConsoleKey ('\0', "", ref mod));
  695. Assert.Equal (ConsoleKey.Insert, EscSeqUtils.GetConsoleKey ('~', "2", ref mod));
  696. Assert.Equal (ConsoleKey.Delete, EscSeqUtils.GetConsoleKey ('~', "3", ref mod));
  697. Assert.Equal (ConsoleKey.PageUp, EscSeqUtils.GetConsoleKey ('~', "5", ref mod));
  698. Assert.Equal (ConsoleKey.PageDown, EscSeqUtils.GetConsoleKey ('~', "6", ref mod));
  699. Assert.Equal (ConsoleKey.F5, EscSeqUtils.GetConsoleKey ('~', "15", ref mod));
  700. Assert.Equal (ConsoleKey.F6, EscSeqUtils.GetConsoleKey ('~', "17", ref mod));
  701. Assert.Equal (ConsoleKey.F7, EscSeqUtils.GetConsoleKey ('~', "18", ref mod));
  702. Assert.Equal (ConsoleKey.F8, EscSeqUtils.GetConsoleKey ('~', "19", ref mod));
  703. Assert.Equal (ConsoleKey.F9, EscSeqUtils.GetConsoleKey ('~', "20", ref mod));
  704. Assert.Equal (ConsoleKey.F10, EscSeqUtils.GetConsoleKey ('~', "21", ref mod));
  705. Assert.Equal (ConsoleKey.F11, EscSeqUtils.GetConsoleKey ('~', "23", ref mod));
  706. Assert.Equal (ConsoleKey.F12, EscSeqUtils.GetConsoleKey ('~', "24", ref mod));
  707. Assert.Equal (0, (int)EscSeqUtils.GetConsoleKey ('~', "", ref mod));
  708. }
  709. [Fact]
  710. public void GetKeyCharArray_Tests ()
  711. {
  712. var cki = new ConsoleKeyInfo [] {
  713. new ConsoleKeyInfo('\u001b', 0, false, false, false),
  714. new ConsoleKeyInfo('[', 0, false, false, false),
  715. new ConsoleKeyInfo('5', 0, false, false, false),
  716. new ConsoleKeyInfo(';', 0, false, false, false),
  717. new ConsoleKeyInfo('1', 0, false, false, false),
  718. new ConsoleKeyInfo('0', 0, false, false, false),
  719. new ConsoleKeyInfo('r', 0, false, false, false),
  720. };
  721. Assert.Equal (new char [] { '\u001b', '[', '5', ';', '1', '0', 'r' }, EscSeqUtils.GetKeyCharArray (cki));
  722. }
  723. [Fact, AutoInitShutdown]
  724. public void GetMouse_Tests ()
  725. {
  726. var cki = new ConsoleKeyInfo [] {
  727. new ConsoleKeyInfo ('\u001b', 0, false, false, false),
  728. new ConsoleKeyInfo ('[', 0, false, false, false),
  729. new ConsoleKeyInfo ('<', 0, false, false, false),
  730. new ConsoleKeyInfo ('0', 0, false, false, false),
  731. new ConsoleKeyInfo (';', 0, false, false, false),
  732. new ConsoleKeyInfo ('2', 0, false, false, false),
  733. new ConsoleKeyInfo (';', 0, false, false, false),
  734. new ConsoleKeyInfo ('3', 0, false, false, false),
  735. new ConsoleKeyInfo ('M', 0, false, false, false)
  736. };
  737. EscSeqUtils.GetMouse (cki, out List<MouseFlags> mouseFlags, out Point pos, ProcessContinuousButtonPressed);
  738. Assert.Equal (new List<MouseFlags> () { MouseFlags.Button1Pressed }, mouseFlags);
  739. Assert.Equal (new Point (1, 2), pos);
  740. cki = new ConsoleKeyInfo [] {
  741. new ConsoleKeyInfo ('\u001b', 0, false, false, false),
  742. new ConsoleKeyInfo ('[', 0, false, false, false),
  743. new ConsoleKeyInfo ('<', 0, false, false, false),
  744. new ConsoleKeyInfo ('0', 0, false, false, false),
  745. new ConsoleKeyInfo (';', 0, false, false, false),
  746. new ConsoleKeyInfo ('2', 0, false, false, false),
  747. new ConsoleKeyInfo (';', 0, false, false, false),
  748. new ConsoleKeyInfo ('3', 0, false, false, false),
  749. new ConsoleKeyInfo ('m', 0, false, false, false)
  750. };
  751. EscSeqUtils.GetMouse (cki, out mouseFlags, out pos, ProcessContinuousButtonPressed);
  752. Assert.Equal (2, mouseFlags.Count);
  753. Assert.Equal (new List<MouseFlags> () { MouseFlags.Button1Released, MouseFlags.Button1Clicked }, mouseFlags);
  754. Assert.Equal (new Point (1, 2), pos);
  755. cki = new ConsoleKeyInfo [] {
  756. new ConsoleKeyInfo ('\u001b', 0, false, false, false),
  757. new ConsoleKeyInfo ('[', 0, false, false, false),
  758. new ConsoleKeyInfo ('<', 0, false, false, false),
  759. new ConsoleKeyInfo ('0', 0, false, false, false),
  760. new ConsoleKeyInfo (';', 0, false, false, false),
  761. new ConsoleKeyInfo ('2', 0, false, false, false),
  762. new ConsoleKeyInfo (';', 0, false, false, false),
  763. new ConsoleKeyInfo ('3', 0, false, false, false),
  764. new ConsoleKeyInfo ('M', 0, false, false, false)
  765. };
  766. EscSeqUtils.GetMouse (cki, out mouseFlags, out pos, ProcessContinuousButtonPressed);
  767. Assert.Equal (new List<MouseFlags> () { MouseFlags.Button1DoubleClicked }, mouseFlags);
  768. Assert.Equal (new Point (1, 2), pos);
  769. cki = new ConsoleKeyInfo [] {
  770. new ConsoleKeyInfo ('\u001b', 0, false, false, false),
  771. new ConsoleKeyInfo ('[', 0, false, false, false),
  772. new ConsoleKeyInfo ('<', 0, false, false, false),
  773. new ConsoleKeyInfo ('0', 0, false, false, false),
  774. new ConsoleKeyInfo (';', 0, false, false, false),
  775. new ConsoleKeyInfo ('2', 0, false, false, false),
  776. new ConsoleKeyInfo (';', 0, false, false, false),
  777. new ConsoleKeyInfo ('3', 0, false, false, false),
  778. new ConsoleKeyInfo ('M', 0, false, false, false)
  779. };
  780. EscSeqUtils.GetMouse (cki, out mouseFlags, out pos, ProcessContinuousButtonPressed);
  781. Assert.Equal (new List<MouseFlags> () { MouseFlags.Button1TripleClicked }, mouseFlags);
  782. Assert.Equal (new Point (1, 2), pos);
  783. cki = new ConsoleKeyInfo [] {
  784. new ConsoleKeyInfo ('\u001b', 0, false, false, false),
  785. new ConsoleKeyInfo ('[', 0, false, false, false),
  786. new ConsoleKeyInfo ('<', 0, false, false, false),
  787. new ConsoleKeyInfo ('0', 0, false, false, false),
  788. new ConsoleKeyInfo (';', 0, false, false, false),
  789. new ConsoleKeyInfo ('2', 0, false, false, false),
  790. new ConsoleKeyInfo (';', 0, false, false, false),
  791. new ConsoleKeyInfo ('3', 0, false, false, false),
  792. new ConsoleKeyInfo ('m', 0, false, false, false)
  793. };
  794. EscSeqUtils.GetMouse (cki, out mouseFlags, out pos, ProcessContinuousButtonPressed);
  795. Assert.Equal (new List<MouseFlags> () { MouseFlags.Button1Released }, mouseFlags);
  796. Assert.Equal (new Point (1, 2), pos);
  797. }
  798. [Fact]
  799. public void GetParentProcess_Tests ()
  800. {
  801. if (RuntimeInformation.IsOSPlatform (OSPlatform.Windows)) {
  802. Assert.NotNull (EscSeqUtils.GetParentProcess (Process.GetCurrentProcess ()));
  803. } else {
  804. Assert.Null (EscSeqUtils.GetParentProcess (Process.GetCurrentProcess ()));
  805. }
  806. }
  807. }
  808. }