EscSeqUtilsTests.cs 48 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171
  1. namespace Terminal.Gui.InputTests;
  2. public class EscSeqUtilsTests
  3. {
  4. private bool _actionStarted;
  5. private MouseFlags _arg1;
  6. private Point _arg2;
  7. private string _c1Control, _code, _terminating;
  8. private ConsoleKeyInfo [] _cki;
  9. private EscSeqRequests _escSeqReqProc;
  10. private bool _isKeyMouse;
  11. private bool _isReq;
  12. private ConsoleKey _key;
  13. private ConsoleModifiers _mod;
  14. private List<MouseFlags> _mouseFlags;
  15. private ConsoleKeyInfo _newConsoleKeyInfo;
  16. private Point _pos;
  17. private string [] _values;
  18. [Fact]
  19. [AutoInitShutdown]
  20. public void DecodeEscSeq_Tests ()
  21. {
  22. // ESC
  23. _cki = new ConsoleKeyInfo [] { new ('\u001b', 0, false, false, false) };
  24. var expectedCki = new ConsoleKeyInfo ('\u001b', ConsoleKey.Escape, false, false, false);
  25. EscSeqUtils.DecodeEscSeq (
  26. _escSeqReqProc,
  27. ref _newConsoleKeyInfo,
  28. ref _key,
  29. _cki,
  30. ref _mod,
  31. out _c1Control,
  32. out _code,
  33. out _values,
  34. out _terminating,
  35. out _isKeyMouse,
  36. out _mouseFlags,
  37. out _pos,
  38. out _isReq,
  39. ProcessContinuousButtonPressed
  40. );
  41. Assert.Null (_escSeqReqProc);
  42. Assert.Equal (expectedCki, _newConsoleKeyInfo);
  43. Assert.Equal (ConsoleKey.Escape, _key);
  44. Assert.Equal (0, (int)_mod);
  45. Assert.Equal ("ESC", _c1Control);
  46. Assert.Null (_code);
  47. Assert.Null (_values);
  48. Assert.Null (_terminating);
  49. Assert.False (_isKeyMouse);
  50. Assert.Equal (new() { 0 }, _mouseFlags);
  51. Assert.Equal (Point.Empty, _pos);
  52. Assert.False (_isReq);
  53. Assert.Equal (0, (int)_arg1);
  54. Assert.Equal (Point.Empty, _arg2);
  55. ClearAll ();
  56. _cki = new ConsoleKeyInfo [] { new ('\u001b', 0, false, false, false), new ('\u0012', 0, false, false, false) };
  57. expectedCki = new ('\u0012', ConsoleKey.R, false, true, true);
  58. EscSeqUtils.DecodeEscSeq (
  59. _escSeqReqProc,
  60. ref _newConsoleKeyInfo,
  61. ref _key,
  62. _cki,
  63. ref _mod,
  64. out _c1Control,
  65. out _code,
  66. out _values,
  67. out _terminating,
  68. out _isKeyMouse,
  69. out _mouseFlags,
  70. out _pos,
  71. out _isReq,
  72. ProcessContinuousButtonPressed
  73. );
  74. Assert.Null (_escSeqReqProc);
  75. Assert.Equal (expectedCki, _newConsoleKeyInfo);
  76. Assert.Equal (ConsoleKey.R, _key);
  77. Assert.Equal (0, (int)_mod);
  78. Assert.Equal ("ESC", _c1Control);
  79. Assert.Null (_code);
  80. Assert.Null (_values);
  81. Assert.Equal ("\u0012", _terminating);
  82. Assert.False (_isKeyMouse);
  83. Assert.Equal (new() { 0 }, _mouseFlags);
  84. Assert.Equal (Point.Empty, _pos);
  85. Assert.False (_isReq);
  86. Assert.Equal (0, (int)_arg1);
  87. Assert.Equal (Point.Empty, _arg2);
  88. ClearAll ();
  89. _cki = new ConsoleKeyInfo [] { new ('\u001b', 0, false, false, false), new ('r', 0, false, false, false) };
  90. expectedCki = new ('R', ConsoleKey.R, false, true, false);
  91. EscSeqUtils.DecodeEscSeq (
  92. _escSeqReqProc,
  93. ref _newConsoleKeyInfo,
  94. ref _key,
  95. _cki,
  96. ref _mod,
  97. out _c1Control,
  98. out _code,
  99. out _values,
  100. out _terminating,
  101. out _isKeyMouse,
  102. out _mouseFlags,
  103. out _pos,
  104. out _isReq,
  105. ProcessContinuousButtonPressed
  106. );
  107. Assert.Null (_escSeqReqProc);
  108. Assert.Equal (expectedCki, _newConsoleKeyInfo);
  109. Assert.Equal (ConsoleKey.R, _key);
  110. Assert.Equal (0, (int)_mod);
  111. Assert.Equal ("ESC", _c1Control);
  112. Assert.Null (_code);
  113. Assert.Null (_values);
  114. Assert.Equal ("r", _terminating);
  115. Assert.False (_isKeyMouse);
  116. Assert.Equal (new() { 0 }, _mouseFlags);
  117. Assert.Equal (Point.Empty, _pos);
  118. Assert.False (_isReq);
  119. Assert.Equal (0, (int)_arg1);
  120. Assert.Equal (Point.Empty, _arg2);
  121. // SS3
  122. ClearAll ();
  123. _cki = new ConsoleKeyInfo []
  124. {
  125. new ('\u001b', 0, false, false, false), new ('O', 0, false, false, false), new ('R', 0, false, false, false)
  126. };
  127. expectedCki = new ('\0', ConsoleKey.F3, false, false, false);
  128. EscSeqUtils.DecodeEscSeq (
  129. _escSeqReqProc,
  130. ref _newConsoleKeyInfo,
  131. ref _key,
  132. _cki,
  133. ref _mod,
  134. out _c1Control,
  135. out _code,
  136. out _values,
  137. out _terminating,
  138. out _isKeyMouse,
  139. out _mouseFlags,
  140. out _pos,
  141. out _isReq,
  142. ProcessContinuousButtonPressed
  143. );
  144. Assert.Null (_escSeqReqProc);
  145. Assert.Equal (expectedCki, _newConsoleKeyInfo);
  146. Assert.Equal (ConsoleKey.F3, _key);
  147. Assert.Equal (0, (int)_mod);
  148. Assert.Equal ("SS3", _c1Control);
  149. Assert.Null (_code);
  150. Assert.Single (_values);
  151. Assert.Null (_values [0]);
  152. Assert.Equal ("R", _terminating);
  153. Assert.False (_isKeyMouse);
  154. Assert.Equal (new() { 0 }, _mouseFlags);
  155. Assert.Equal (Point.Empty, _pos);
  156. Assert.False (_isReq);
  157. Assert.Equal (0, (int)_arg1);
  158. Assert.Equal (Point.Empty, _arg2);
  159. // CSI
  160. ClearAll ();
  161. _cki = new ConsoleKeyInfo []
  162. {
  163. new ('\u001b', 0, false, false, false),
  164. new ('[', 0, false, false, false),
  165. new ('1', 0, false, false, false),
  166. new (';', 0, false, false, false),
  167. new ('2', 0, false, false, false),
  168. new ('R', 0, false, false, false)
  169. };
  170. expectedCki = new ('\0', ConsoleKey.F3, true, false, false);
  171. EscSeqUtils.DecodeEscSeq (
  172. _escSeqReqProc,
  173. ref _newConsoleKeyInfo,
  174. ref _key,
  175. _cki,
  176. ref _mod,
  177. out _c1Control,
  178. out _code,
  179. out _values,
  180. out _terminating,
  181. out _isKeyMouse,
  182. out _mouseFlags,
  183. out _pos,
  184. out _isReq,
  185. ProcessContinuousButtonPressed
  186. );
  187. Assert.Null (_escSeqReqProc);
  188. Assert.Equal (expectedCki, _newConsoleKeyInfo);
  189. Assert.Equal (ConsoleKey.F3, _key);
  190. Assert.Equal (ConsoleModifiers.Shift, _mod);
  191. Assert.Equal ("CSI", _c1Control);
  192. Assert.Null (_code);
  193. Assert.Equal (2, _values.Length);
  194. Assert.Equal ("1", _values [0]);
  195. Assert.Equal ("2", _values [^1]);
  196. Assert.Equal ("R", _terminating);
  197. Assert.False (_isKeyMouse);
  198. Assert.Equal (new() { 0 }, _mouseFlags);
  199. Assert.Equal (Point.Empty, _pos);
  200. Assert.False (_isReq);
  201. Assert.Equal (0, (int)_arg1);
  202. Assert.Equal (Point.Empty, _arg2);
  203. ClearAll ();
  204. _cki = new ConsoleKeyInfo []
  205. {
  206. new ('\u001b', 0, false, false, false),
  207. new ('[', 0, false, false, false),
  208. new ('1', 0, false, false, false),
  209. new (';', 0, false, false, false),
  210. new ('3', 0, false, false, false),
  211. new ('R', 0, false, false, false)
  212. };
  213. expectedCki = new ('\0', ConsoleKey.F3, false, true, false);
  214. EscSeqUtils.DecodeEscSeq (
  215. _escSeqReqProc,
  216. ref _newConsoleKeyInfo,
  217. ref _key,
  218. _cki,
  219. ref _mod,
  220. out _c1Control,
  221. out _code,
  222. out _values,
  223. out _terminating,
  224. out _isKeyMouse,
  225. out _mouseFlags,
  226. out _pos,
  227. out _isReq,
  228. ProcessContinuousButtonPressed
  229. );
  230. Assert.Null (_escSeqReqProc);
  231. Assert.Equal (expectedCki, _newConsoleKeyInfo);
  232. Assert.Equal (ConsoleKey.F3, _key);
  233. Assert.Equal (ConsoleModifiers.Alt, _mod);
  234. Assert.Equal ("CSI", _c1Control);
  235. Assert.Null (_code);
  236. Assert.Equal (2, _values.Length);
  237. Assert.Equal ("1", _values [0]);
  238. Assert.Equal ("3", _values [^1]);
  239. Assert.Equal ("R", _terminating);
  240. Assert.False (_isKeyMouse);
  241. Assert.Equal (new() { 0 }, _mouseFlags);
  242. Assert.Equal (Point.Empty, _pos);
  243. Assert.False (_isReq);
  244. Assert.Equal (0, (int)_arg1);
  245. Assert.Equal (Point.Empty, _arg2);
  246. ClearAll ();
  247. _cki = new ConsoleKeyInfo []
  248. {
  249. new ('\u001b', 0, false, false, false),
  250. new ('[', 0, false, false, false),
  251. new ('1', 0, false, false, false),
  252. new (';', 0, false, false, false),
  253. new ('4', 0, false, false, false),
  254. new ('R', 0, false, false, false)
  255. };
  256. expectedCki = new ('\0', ConsoleKey.F3, true, true, false);
  257. EscSeqUtils.DecodeEscSeq (
  258. _escSeqReqProc,
  259. ref _newConsoleKeyInfo,
  260. ref _key,
  261. _cki,
  262. ref _mod,
  263. out _c1Control,
  264. out _code,
  265. out _values,
  266. out _terminating,
  267. out _isKeyMouse,
  268. out _mouseFlags,
  269. out _pos,
  270. out _isReq,
  271. ProcessContinuousButtonPressed
  272. );
  273. Assert.Null (_escSeqReqProc);
  274. Assert.Equal (expectedCki, _newConsoleKeyInfo);
  275. Assert.Equal (ConsoleKey.F3, _key);
  276. Assert.Equal (ConsoleModifiers.Shift | ConsoleModifiers.Alt, _mod);
  277. Assert.Equal ("CSI", _c1Control);
  278. Assert.Null (_code);
  279. Assert.Equal (2, _values.Length);
  280. Assert.Equal ("1", _values [0]);
  281. Assert.Equal ("4", _values [^1]);
  282. Assert.Equal ("R", _terminating);
  283. Assert.False (_isKeyMouse);
  284. Assert.Equal (new() { 0 }, _mouseFlags);
  285. Assert.Equal (Point.Empty, _pos);
  286. Assert.False (_isReq);
  287. Assert.Equal (0, (int)_arg1);
  288. Assert.Equal (Point.Empty, _arg2);
  289. ClearAll ();
  290. _cki = new ConsoleKeyInfo []
  291. {
  292. new ('\u001b', 0, false, false, false),
  293. new ('[', 0, false, false, false),
  294. new ('1', 0, false, false, false),
  295. new (';', 0, false, false, false),
  296. new ('5', 0, false, false, false),
  297. new ('R', 0, false, false, false)
  298. };
  299. expectedCki = new ('\0', ConsoleKey.F3, false, false, true);
  300. EscSeqUtils.DecodeEscSeq (
  301. _escSeqReqProc,
  302. ref _newConsoleKeyInfo,
  303. ref _key,
  304. _cki,
  305. ref _mod,
  306. out _c1Control,
  307. out _code,
  308. out _values,
  309. out _terminating,
  310. out _isKeyMouse,
  311. out _mouseFlags,
  312. out _pos,
  313. out _isReq,
  314. ProcessContinuousButtonPressed
  315. );
  316. Assert.Null (_escSeqReqProc);
  317. Assert.Equal (expectedCki, _newConsoleKeyInfo);
  318. Assert.Equal (ConsoleKey.F3, _key);
  319. Assert.Equal (ConsoleModifiers.Control, _mod);
  320. Assert.Equal ("CSI", _c1Control);
  321. Assert.Null (_code);
  322. Assert.Equal (2, _values.Length);
  323. Assert.Equal ("1", _values [0]);
  324. Assert.Equal ("5", _values [^1]);
  325. Assert.Equal ("R", _terminating);
  326. Assert.False (_isKeyMouse);
  327. Assert.Equal (new() { 0 }, _mouseFlags);
  328. Assert.Equal (Point.Empty, _pos);
  329. Assert.False (_isReq);
  330. Assert.Equal (0, (int)_arg1);
  331. Assert.Equal (Point.Empty, _arg2);
  332. ClearAll ();
  333. _cki = new ConsoleKeyInfo []
  334. {
  335. new ('\u001b', 0, false, false, false),
  336. new ('[', 0, false, false, false),
  337. new ('1', 0, false, false, false),
  338. new (';', 0, false, false, false),
  339. new ('6', 0, false, false, false),
  340. new ('R', 0, false, false, false)
  341. };
  342. expectedCki = new ('\0', ConsoleKey.F3, true, false, true);
  343. EscSeqUtils.DecodeEscSeq (
  344. _escSeqReqProc,
  345. ref _newConsoleKeyInfo,
  346. ref _key,
  347. _cki,
  348. ref _mod,
  349. out _c1Control,
  350. out _code,
  351. out _values,
  352. out _terminating,
  353. out _isKeyMouse,
  354. out _mouseFlags,
  355. out _pos,
  356. out _isReq,
  357. ProcessContinuousButtonPressed
  358. );
  359. Assert.Null (_escSeqReqProc);
  360. Assert.Equal (expectedCki, _newConsoleKeyInfo);
  361. Assert.Equal (ConsoleKey.F3, _key);
  362. Assert.Equal (ConsoleModifiers.Shift | ConsoleModifiers.Control, _mod);
  363. Assert.Equal ("CSI", _c1Control);
  364. Assert.Null (_code);
  365. Assert.Equal (2, _values.Length);
  366. Assert.Equal ("1", _values [0]);
  367. Assert.Equal ("6", _values [^1]);
  368. Assert.Equal ("R", _terminating);
  369. Assert.False (_isKeyMouse);
  370. Assert.Equal (new() { 0 }, _mouseFlags);
  371. Assert.Equal (Point.Empty, _pos);
  372. Assert.False (_isReq);
  373. Assert.Equal (0, (int)_arg1);
  374. Assert.Equal (Point.Empty, _arg2);
  375. ClearAll ();
  376. _cki = new ConsoleKeyInfo []
  377. {
  378. new ('\u001b', 0, false, false, false),
  379. new ('[', 0, false, false, false),
  380. new ('1', 0, false, false, false),
  381. new (';', 0, false, false, false),
  382. new ('7', 0, false, false, false),
  383. new ('R', 0, false, false, false)
  384. };
  385. expectedCki = new ('\0', ConsoleKey.F3, false, true, true);
  386. EscSeqUtils.DecodeEscSeq (
  387. _escSeqReqProc,
  388. ref _newConsoleKeyInfo,
  389. ref _key,
  390. _cki,
  391. ref _mod,
  392. out _c1Control,
  393. out _code,
  394. out _values,
  395. out _terminating,
  396. out _isKeyMouse,
  397. out _mouseFlags,
  398. out _pos,
  399. out _isReq,
  400. ProcessContinuousButtonPressed
  401. );
  402. Assert.Null (_escSeqReqProc);
  403. Assert.Equal (expectedCki, _newConsoleKeyInfo);
  404. Assert.Equal (ConsoleKey.F3, _key);
  405. Assert.Equal (ConsoleModifiers.Alt | ConsoleModifiers.Control, _mod);
  406. Assert.Equal ("CSI", _c1Control);
  407. Assert.Null (_code);
  408. Assert.Equal (2, _values.Length);
  409. Assert.Equal ("1", _values [0]);
  410. Assert.Equal ("7", _values [^1]);
  411. Assert.Equal ("R", _terminating);
  412. Assert.False (_isKeyMouse);
  413. Assert.Equal (new() { 0 }, _mouseFlags);
  414. Assert.Equal (Point.Empty, _pos);
  415. Assert.False (_isReq);
  416. Assert.Equal (0, (int)_arg1);
  417. Assert.Equal (Point.Empty, _arg2);
  418. ClearAll ();
  419. _cki = new ConsoleKeyInfo []
  420. {
  421. new ('\u001b', 0, false, false, false),
  422. new ('[', 0, false, false, false),
  423. new ('1', 0, false, false, false),
  424. new (';', 0, false, false, false),
  425. new ('8', 0, false, false, false),
  426. new ('R', 0, false, false, false)
  427. };
  428. expectedCki = new ('\0', ConsoleKey.F3, true, true, true);
  429. EscSeqUtils.DecodeEscSeq (
  430. _escSeqReqProc,
  431. ref _newConsoleKeyInfo,
  432. ref _key,
  433. _cki,
  434. ref _mod,
  435. out _c1Control,
  436. out _code,
  437. out _values,
  438. out _terminating,
  439. out _isKeyMouse,
  440. out _mouseFlags,
  441. out _pos,
  442. out _isReq,
  443. ProcessContinuousButtonPressed
  444. );
  445. Assert.Null (_escSeqReqProc);
  446. Assert.Equal (expectedCki, _newConsoleKeyInfo);
  447. Assert.Equal (ConsoleKey.F3, _key);
  448. Assert.Equal (ConsoleModifiers.Shift | ConsoleModifiers.Alt | ConsoleModifiers.Control, _mod);
  449. Assert.Equal ("CSI", _c1Control);
  450. Assert.Null (_code);
  451. Assert.Equal (2, _values.Length);
  452. Assert.Equal ("1", _values [0]);
  453. Assert.Equal ("8", _values [^1]);
  454. Assert.Equal ("R", _terminating);
  455. Assert.False (_isKeyMouse);
  456. Assert.Equal (new() { 0 }, _mouseFlags);
  457. Assert.Equal (Point.Empty, _pos);
  458. Assert.False (_isReq);
  459. Assert.Equal (0, (int)_arg1);
  460. Assert.Equal (Point.Empty, _arg2);
  461. ClearAll ();
  462. _cki = new ConsoleKeyInfo []
  463. {
  464. new ('\u001b', 0, false, false, false),
  465. new ('[', 0, false, false, false),
  466. new ('<', 0, false, false, false),
  467. new ('0', 0, false, false, false),
  468. new (';', 0, false, false, false),
  469. new ('2', 0, false, false, false),
  470. new (';', 0, false, false, false),
  471. new ('3', 0, false, false, false),
  472. new ('M', 0, false, false, false)
  473. };
  474. expectedCki = default (ConsoleKeyInfo);
  475. EscSeqUtils.DecodeEscSeq (
  476. _escSeqReqProc,
  477. ref _newConsoleKeyInfo,
  478. ref _key,
  479. _cki,
  480. ref _mod,
  481. out _c1Control,
  482. out _code,
  483. out _values,
  484. out _terminating,
  485. out _isKeyMouse,
  486. out _mouseFlags,
  487. out _pos,
  488. out _isReq,
  489. ProcessContinuousButtonPressed
  490. );
  491. Assert.Null (_escSeqReqProc);
  492. Assert.Equal (expectedCki, _newConsoleKeyInfo);
  493. Assert.Equal (0, (int)_key);
  494. Assert.Equal (0, (int)_mod);
  495. Assert.Equal ("CSI", _c1Control);
  496. Assert.Equal ("<", _code);
  497. Assert.Equal (3, _values.Length);
  498. Assert.Equal ("0", _values [0]);
  499. Assert.Equal ("2", _values [1]);
  500. Assert.Equal ("3", _values [^1]);
  501. Assert.Equal ("M", _terminating);
  502. Assert.True (_isKeyMouse);
  503. Assert.Equal (new() { MouseFlags.Button1Pressed }, _mouseFlags);
  504. Assert.Equal (new (1, 2), _pos);
  505. Assert.False (_isReq);
  506. Assert.Equal (0, (int)_arg1);
  507. Assert.Equal (Point.Empty, _arg2);
  508. ClearAll ();
  509. _cki = new ConsoleKeyInfo []
  510. {
  511. new ('\u001b', 0, false, false, false),
  512. new ('[', 0, false, false, false),
  513. new ('<', 0, false, false, false),
  514. new ('0', 0, false, false, false),
  515. new (';', 0, false, false, false),
  516. new ('2', 0, false, false, false),
  517. new (';', 0, false, false, false),
  518. new ('3', 0, false, false, false),
  519. new ('m', 0, false, false, false)
  520. };
  521. expectedCki = default (ConsoleKeyInfo);
  522. EscSeqUtils.DecodeEscSeq (
  523. _escSeqReqProc,
  524. ref _newConsoleKeyInfo,
  525. ref _key,
  526. _cki,
  527. ref _mod,
  528. out _c1Control,
  529. out _code,
  530. out _values,
  531. out _terminating,
  532. out _isKeyMouse,
  533. out _mouseFlags,
  534. out _pos,
  535. out _isReq,
  536. ProcessContinuousButtonPressed
  537. );
  538. Assert.Null (_escSeqReqProc);
  539. Assert.Equal (expectedCki, _newConsoleKeyInfo);
  540. Assert.Equal (0, (int)_key);
  541. Assert.Equal (0, (int)_mod);
  542. Assert.Equal ("CSI", _c1Control);
  543. Assert.Equal ("<", _code);
  544. Assert.Equal (3, _values.Length);
  545. Assert.Equal ("0", _values [0]);
  546. Assert.Equal ("2", _values [1]);
  547. Assert.Equal ("3", _values [^1]);
  548. Assert.Equal ("m", _terminating);
  549. Assert.True (_isKeyMouse);
  550. Assert.Equal (2, _mouseFlags.Count);
  551. Assert.Equal (
  552. new() { MouseFlags.Button1Released, MouseFlags.Button1Clicked },
  553. _mouseFlags
  554. );
  555. Assert.Equal (new (1, 2), _pos);
  556. Assert.False (_isReq);
  557. Assert.Equal (0, (int)_arg1);
  558. Assert.Equal (Point.Empty, _arg2);
  559. ClearAll ();
  560. _cki = new ConsoleKeyInfo []
  561. {
  562. new ('\u001b', 0, false, false, false),
  563. new ('[', 0, false, false, false),
  564. new ('<', 0, false, false, false),
  565. new ('0', 0, false, false, false),
  566. new (';', 0, false, false, false),
  567. new ('2', 0, false, false, false),
  568. new (';', 0, false, false, false),
  569. new ('3', 0, false, false, false),
  570. new ('M', 0, false, false, false)
  571. };
  572. expectedCki = default (ConsoleKeyInfo);
  573. EscSeqUtils.DecodeEscSeq (
  574. _escSeqReqProc,
  575. ref _newConsoleKeyInfo,
  576. ref _key,
  577. _cki,
  578. ref _mod,
  579. out _c1Control,
  580. out _code,
  581. out _values,
  582. out _terminating,
  583. out _isKeyMouse,
  584. out _mouseFlags,
  585. out _pos,
  586. out _isReq,
  587. ProcessContinuousButtonPressed
  588. );
  589. Assert.Null (_escSeqReqProc);
  590. Assert.Equal (expectedCki, _newConsoleKeyInfo);
  591. Assert.Equal (0, (int)_key);
  592. Assert.Equal (0, (int)_mod);
  593. Assert.Equal ("CSI", _c1Control);
  594. Assert.Equal ("<", _code);
  595. Assert.Equal (3, _values.Length);
  596. Assert.Equal ("0", _values [0]);
  597. Assert.Equal ("2", _values [1]);
  598. Assert.Equal ("3", _values [^1]);
  599. Assert.Equal ("M", _terminating);
  600. Assert.True (_isKeyMouse);
  601. Assert.Equal (new() { MouseFlags.Button1DoubleClicked }, _mouseFlags);
  602. Assert.Equal (new (1, 2), _pos);
  603. Assert.False (_isReq);
  604. ClearAll ();
  605. _cki = new ConsoleKeyInfo []
  606. {
  607. new ('\u001b', 0, false, false, false),
  608. new ('[', 0, false, false, false),
  609. new ('<', 0, false, false, false),
  610. new ('0', 0, false, false, false),
  611. new (';', 0, false, false, false),
  612. new ('2', 0, false, false, false),
  613. new (';', 0, false, false, false),
  614. new ('3', 0, false, false, false),
  615. new ('M', 0, false, false, false)
  616. };
  617. expectedCki = default (ConsoleKeyInfo);
  618. EscSeqUtils.DecodeEscSeq (
  619. _escSeqReqProc,
  620. ref _newConsoleKeyInfo,
  621. ref _key,
  622. _cki,
  623. ref _mod,
  624. out _c1Control,
  625. out _code,
  626. out _values,
  627. out _terminating,
  628. out _isKeyMouse,
  629. out _mouseFlags,
  630. out _pos,
  631. out _isReq,
  632. ProcessContinuousButtonPressed
  633. );
  634. Assert.Null (_escSeqReqProc);
  635. Assert.Equal (expectedCki, _newConsoleKeyInfo);
  636. Assert.Equal (0, (int)_key);
  637. Assert.Equal (0, (int)_mod);
  638. Assert.Equal ("CSI", _c1Control);
  639. Assert.Equal ("<", _code);
  640. Assert.Equal (3, _values.Length);
  641. Assert.Equal ("0", _values [0]);
  642. Assert.Equal ("2", _values [1]);
  643. Assert.Equal ("3", _values [^1]);
  644. Assert.Equal ("M", _terminating);
  645. Assert.True (_isKeyMouse);
  646. Assert.Equal (new() { MouseFlags.Button1TripleClicked }, _mouseFlags);
  647. Assert.Equal (new (1, 2), _pos);
  648. Assert.False (_isReq);
  649. var view = new View { Width = Dim.Fill (), Height = Dim.Fill (), WantContinuousButtonPressed = true };
  650. var top = new Toplevel ();
  651. top.Add (view);
  652. Application.Begin (top);
  653. Application.OnMouseEvent (new() { Position = new (0, 0), Flags = 0 });
  654. ClearAll ();
  655. _cki = new ConsoleKeyInfo []
  656. {
  657. new ('\u001b', 0, false, false, false),
  658. new ('[', 0, false, false, false),
  659. new ('<', 0, false, false, false),
  660. new ('0', 0, false, false, false),
  661. new (';', 0, false, false, false),
  662. new ('2', 0, false, false, false),
  663. new (';', 0, false, false, false),
  664. new ('3', 0, false, false, false),
  665. new ('M', 0, false, false, false)
  666. };
  667. expectedCki = default (ConsoleKeyInfo);
  668. EscSeqUtils.DecodeEscSeq (
  669. _escSeqReqProc,
  670. ref _newConsoleKeyInfo,
  671. ref _key,
  672. _cki,
  673. ref _mod,
  674. out _c1Control,
  675. out _code,
  676. out _values,
  677. out _terminating,
  678. out _isKeyMouse,
  679. out _mouseFlags,
  680. out _pos,
  681. out _isReq,
  682. ProcessContinuousButtonPressed
  683. );
  684. Assert.Null (_escSeqReqProc);
  685. Assert.Equal (expectedCki, _newConsoleKeyInfo);
  686. Assert.Equal (0, (int)_key);
  687. Assert.Equal (0, (int)_mod);
  688. Assert.Equal ("CSI", _c1Control);
  689. Assert.Equal ("<", _code);
  690. Assert.Equal (3, _values.Length);
  691. Assert.Equal ("0", _values [0]);
  692. Assert.Equal ("2", _values [1]);
  693. Assert.Equal ("3", _values [^1]);
  694. Assert.Equal ("M", _terminating);
  695. Assert.True (_isKeyMouse);
  696. Assert.Equal (new() { MouseFlags.Button1Pressed }, _mouseFlags);
  697. Assert.Equal (new (1, 2), _pos);
  698. Assert.False (_isReq);
  699. Application.Iteration += (s, a) =>
  700. {
  701. if (_actionStarted)
  702. {
  703. // set Application.WantContinuousButtonPressedView to null
  704. view.WantContinuousButtonPressed = false;
  705. Application.OnMouseEvent (new() { Position = new (0, 0), Flags = 0 });
  706. Application.RequestStop ();
  707. }
  708. };
  709. Application.Run (top);
  710. top.Dispose ();
  711. Assert.Null (Application.WantContinuousButtonPressedView);
  712. Assert.Equal (MouseFlags.Button1Pressed, _arg1);
  713. Assert.Equal (new (1, 2), _arg2);
  714. ClearAll ();
  715. _cki = new ConsoleKeyInfo []
  716. {
  717. new ('\u001b', 0, false, false, false),
  718. new ('[', 0, false, false, false),
  719. new ('<', 0, false, false, false),
  720. new ('0', 0, false, false, false),
  721. new (';', 0, false, false, false),
  722. new ('2', 0, false, false, false),
  723. new (';', 0, false, false, false),
  724. new ('3', 0, false, false, false),
  725. new ('m', 0, false, false, false)
  726. };
  727. expectedCki = default (ConsoleKeyInfo);
  728. EscSeqUtils.DecodeEscSeq (
  729. _escSeqReqProc,
  730. ref _newConsoleKeyInfo,
  731. ref _key,
  732. _cki,
  733. ref _mod,
  734. out _c1Control,
  735. out _code,
  736. out _values,
  737. out _terminating,
  738. out _isKeyMouse,
  739. out _mouseFlags,
  740. out _pos,
  741. out _isReq,
  742. ProcessContinuousButtonPressed
  743. );
  744. Assert.Null (_escSeqReqProc);
  745. Assert.Equal (expectedCki, _newConsoleKeyInfo);
  746. Assert.Equal (0, (int)_key);
  747. Assert.Equal (0, (int)_mod);
  748. Assert.Equal ("CSI", _c1Control);
  749. Assert.Equal ("<", _code);
  750. Assert.Equal (3, _values.Length);
  751. Assert.Equal ("0", _values [0]);
  752. Assert.Equal ("2", _values [1]);
  753. Assert.Equal ("3", _values [^1]);
  754. Assert.Equal ("m", _terminating);
  755. Assert.True (_isKeyMouse);
  756. Assert.Equal (new() { MouseFlags.Button1Released }, _mouseFlags);
  757. Assert.Equal (new (1, 2), _pos);
  758. Assert.False (_isReq);
  759. Assert.Equal (0, (int)_arg1);
  760. Assert.Equal (Point.Empty, _arg2);
  761. ClearAll ();
  762. Assert.Null (_escSeqReqProc);
  763. _escSeqReqProc = new ();
  764. _escSeqReqProc.Add ("t");
  765. _cki = new ConsoleKeyInfo []
  766. {
  767. new ('\u001b', 0, false, false, false),
  768. new ('[', 0, false, false, false),
  769. new ('8', 0, false, false, false),
  770. new (';', 0, false, false, false),
  771. new ('1', 0, false, false, false),
  772. new ('0', 0, false, false, false),
  773. new (';', 0, false, false, false),
  774. new ('2', 0, false, false, false),
  775. new ('0', 0, false, false, false),
  776. new ('t', 0, false, false, false)
  777. };
  778. expectedCki = default (ConsoleKeyInfo);
  779. Assert.Single (_escSeqReqProc.Statuses);
  780. Assert.Equal ("t", _escSeqReqProc.Statuses [^1].Terminator);
  781. EscSeqUtils.DecodeEscSeq (
  782. _escSeqReqProc,
  783. ref _newConsoleKeyInfo,
  784. ref _key,
  785. _cki,
  786. ref _mod,
  787. out _c1Control,
  788. out _code,
  789. out _values,
  790. out _terminating,
  791. out _isKeyMouse,
  792. out _mouseFlags,
  793. out _pos,
  794. out _isReq,
  795. ProcessContinuousButtonPressed
  796. );
  797. Assert.Empty (_escSeqReqProc.Statuses);
  798. Assert.Equal (expectedCki, _newConsoleKeyInfo);
  799. Assert.Equal (0, (int)_key);
  800. Assert.Equal (0, (int)_mod);
  801. Assert.Equal ("CSI", _c1Control);
  802. Assert.Null (_code);
  803. Assert.Equal (3, _values.Length);
  804. Assert.Equal ("8", _values [0]);
  805. Assert.Equal ("10", _values [1]);
  806. Assert.Equal ("20", _values [^1]);
  807. Assert.Equal ("t", _terminating);
  808. Assert.False (_isKeyMouse);
  809. Assert.Equal (new() { 0 }, _mouseFlags);
  810. Assert.Equal (Point.Empty, _pos);
  811. Assert.True (_isReq);
  812. Assert.Equal (0, (int)_arg1);
  813. Assert.Equal (Point.Empty, _arg2);
  814. }
  815. [Fact]
  816. public void Defaults_Values ()
  817. {
  818. Assert.Equal ('\x1b', EscSeqUtils.KeyEsc);
  819. Assert.Equal ("\x1b[", EscSeqUtils.CSI);
  820. Assert.Equal ("\x1b[?1003h", EscSeqUtils.CSI_EnableAnyEventMouse);
  821. Assert.Equal ("\x1b[?1006h", EscSeqUtils.CSI_EnableSgrExtModeMouse);
  822. Assert.Equal ("\x1b[?1015h", EscSeqUtils.CSI_EnableUrxvtExtModeMouse);
  823. Assert.Equal ("\x1b[?1003l", EscSeqUtils.CSI_DisableAnyEventMouse);
  824. Assert.Equal ("\x1b[?1006l", EscSeqUtils.CSI_DisableSgrExtModeMouse);
  825. Assert.Equal ("\x1b[?1015l", EscSeqUtils.CSI_DisableUrxvtExtModeMouse);
  826. Assert.Equal ("\x1b[?1003h\x1b[?1015h\u001b[?1006h", EscSeqUtils.CSI_EnableMouseEvents);
  827. Assert.Equal ("\x1b[?1003l\x1b[?1015l\u001b[?1006l", EscSeqUtils.CSI_DisableMouseEvents);
  828. }
  829. [Fact]
  830. public void GetC1ControlChar_Tests ()
  831. {
  832. Assert.Equal ("IND", EscSeqUtils.GetC1ControlChar ('D'));
  833. Assert.Equal ("NEL", EscSeqUtils.GetC1ControlChar ('E'));
  834. Assert.Equal ("HTS", EscSeqUtils.GetC1ControlChar ('H'));
  835. Assert.Equal ("RI", EscSeqUtils.GetC1ControlChar ('M'));
  836. Assert.Equal ("SS2", EscSeqUtils.GetC1ControlChar ('N'));
  837. Assert.Equal ("SS3", EscSeqUtils.GetC1ControlChar ('O'));
  838. Assert.Equal ("DCS", EscSeqUtils.GetC1ControlChar ('P'));
  839. Assert.Equal ("SPA", EscSeqUtils.GetC1ControlChar ('V'));
  840. Assert.Equal ("EPA", EscSeqUtils.GetC1ControlChar ('W'));
  841. Assert.Equal ("SOS", EscSeqUtils.GetC1ControlChar ('X'));
  842. Assert.Equal ("DECID", EscSeqUtils.GetC1ControlChar ('Z'));
  843. Assert.Equal ("CSI", EscSeqUtils.GetC1ControlChar ('['));
  844. Assert.Equal ("ST", EscSeqUtils.GetC1ControlChar ('\\'));
  845. Assert.Equal ("OSC", EscSeqUtils.GetC1ControlChar (']'));
  846. Assert.Equal ("PM", EscSeqUtils.GetC1ControlChar ('^'));
  847. Assert.Equal ("APC", EscSeqUtils.GetC1ControlChar ('_'));
  848. Assert.Equal ("", EscSeqUtils.GetC1ControlChar ('\0'));
  849. }
  850. [Fact]
  851. public void GetConsoleInputKey_ConsoleKeyInfo ()
  852. {
  853. var cki = new ConsoleKeyInfo ('r', 0, false, false, false);
  854. var expectedCki = new ConsoleKeyInfo ('r', 0, false, false, false);
  855. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  856. cki = new ('r', 0, true, false, false);
  857. expectedCki = new ('r', 0, true, false, false);
  858. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  859. cki = new ('r', 0, false, true, false);
  860. expectedCki = new ('r', 0, false, true, false);
  861. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  862. cki = new ('r', 0, false, false, true);
  863. expectedCki = new ('r', 0, false, false, true);
  864. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  865. cki = new ('r', 0, true, true, false);
  866. expectedCki = new ('r', 0, true, true, false);
  867. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  868. cki = new ('r', 0, false, true, true);
  869. expectedCki = new ('r', 0, false, true, true);
  870. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  871. cki = new ('r', 0, true, true, true);
  872. expectedCki = new ('r', 0, true, true, true);
  873. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  874. cki = new ('\u0012', 0, false, false, false);
  875. expectedCki = new ('R', ConsoleKey.R, false, false, true);
  876. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  877. cki = new ('\0', (ConsoleKey)64, false, false, true);
  878. expectedCki = new (' ', ConsoleKey.Spacebar, false, false, true);
  879. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  880. cki = new ('\r', 0, false, false, false);
  881. expectedCki = new ('\r', ConsoleKey.Enter, false, false, false);
  882. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  883. cki = new ('\u007f', 0, false, false, false);
  884. expectedCki = new ('\u007f', ConsoleKey.Backspace, false, false, false);
  885. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  886. cki = new ('R', 0, false, false, false);
  887. expectedCki = new ('R', 0, false, false, false);
  888. Assert.Equal (expectedCki, EscSeqUtils.MapConsoleKeyInfo (cki));
  889. }
  890. [Fact]
  891. public void GetConsoleKey_Tests ()
  892. {
  893. ConsoleModifiers mod = 0;
  894. Assert.Equal (ConsoleKey.UpArrow, EscSeqUtils.GetConsoleKey ('A', "", ref mod));
  895. Assert.Equal (ConsoleKey.DownArrow, EscSeqUtils.GetConsoleKey ('B', "", ref mod));
  896. Assert.Equal (_key = ConsoleKey.RightArrow, EscSeqUtils.GetConsoleKey ('C', "", ref mod));
  897. Assert.Equal (ConsoleKey.LeftArrow, EscSeqUtils.GetConsoleKey ('D', "", ref mod));
  898. Assert.Equal (ConsoleKey.End, EscSeqUtils.GetConsoleKey ('F', "", ref mod));
  899. Assert.Equal (ConsoleKey.Home, EscSeqUtils.GetConsoleKey ('H', "", ref mod));
  900. Assert.Equal (ConsoleKey.F1, EscSeqUtils.GetConsoleKey ('P', "", ref mod));
  901. Assert.Equal (ConsoleKey.F2, EscSeqUtils.GetConsoleKey ('Q', "", ref mod));
  902. Assert.Equal (ConsoleKey.F3, EscSeqUtils.GetConsoleKey ('R', "", ref mod));
  903. Assert.Equal (ConsoleKey.F4, EscSeqUtils.GetConsoleKey ('S', "", ref mod));
  904. Assert.Equal (ConsoleKey.Tab, EscSeqUtils.GetConsoleKey ('Z', "", ref mod));
  905. Assert.Equal (ConsoleModifiers.Shift, mod);
  906. Assert.Equal (0, (int)EscSeqUtils.GetConsoleKey ('\0', "", ref mod));
  907. Assert.Equal (ConsoleKey.Insert, EscSeqUtils.GetConsoleKey ('~', "2", ref mod));
  908. Assert.Equal (ConsoleKey.Delete, EscSeqUtils.GetConsoleKey ('~', "3", ref mod));
  909. Assert.Equal (ConsoleKey.PageUp, EscSeqUtils.GetConsoleKey ('~', "5", ref mod));
  910. Assert.Equal (ConsoleKey.PageDown, EscSeqUtils.GetConsoleKey ('~', "6", ref mod));
  911. Assert.Equal (ConsoleKey.F5, EscSeqUtils.GetConsoleKey ('~', "15", ref mod));
  912. Assert.Equal (ConsoleKey.F6, EscSeqUtils.GetConsoleKey ('~', "17", ref mod));
  913. Assert.Equal (ConsoleKey.F7, EscSeqUtils.GetConsoleKey ('~', "18", ref mod));
  914. Assert.Equal (ConsoleKey.F8, EscSeqUtils.GetConsoleKey ('~', "19", ref mod));
  915. Assert.Equal (ConsoleKey.F9, EscSeqUtils.GetConsoleKey ('~', "20", ref mod));
  916. Assert.Equal (ConsoleKey.F10, EscSeqUtils.GetConsoleKey ('~', "21", ref mod));
  917. Assert.Equal (ConsoleKey.F11, EscSeqUtils.GetConsoleKey ('~', "23", ref mod));
  918. Assert.Equal (ConsoleKey.F12, EscSeqUtils.GetConsoleKey ('~', "24", ref mod));
  919. Assert.Equal (0, (int)EscSeqUtils.GetConsoleKey ('~', "", ref mod));
  920. }
  921. [Fact]
  922. public void GetConsoleModifiers_Tests ()
  923. {
  924. Assert.Equal (ConsoleModifiers.Shift, EscSeqUtils.GetConsoleModifiers ("2"));
  925. Assert.Equal (ConsoleModifiers.Alt, EscSeqUtils.GetConsoleModifiers ("3"));
  926. Assert.Equal (ConsoleModifiers.Shift | ConsoleModifiers.Alt, EscSeqUtils.GetConsoleModifiers ("4"));
  927. Assert.Equal (ConsoleModifiers.Control, EscSeqUtils.GetConsoleModifiers ("5"));
  928. Assert.Equal (ConsoleModifiers.Shift | ConsoleModifiers.Control, EscSeqUtils.GetConsoleModifiers ("6"));
  929. Assert.Equal (ConsoleModifiers.Alt | ConsoleModifiers.Control, EscSeqUtils.GetConsoleModifiers ("7"));
  930. Assert.Equal (
  931. ConsoleModifiers.Shift | ConsoleModifiers.Alt | ConsoleModifiers.Control,
  932. EscSeqUtils.GetConsoleModifiers ("8")
  933. );
  934. Assert.Equal (0, (int)EscSeqUtils.GetConsoleModifiers (""));
  935. }
  936. [Fact]
  937. public void GetEscapeResult_Tests ()
  938. {
  939. char [] kChars = { '\u001b', '[', '5', ';', '1', '0', 'r' };
  940. (_c1Control, _code, _values, _terminating) = EscSeqUtils.GetEscapeResult (kChars);
  941. Assert.Equal ("CSI", _c1Control);
  942. Assert.Null (_code);
  943. Assert.Equal (2, _values.Length);
  944. Assert.Equal ("5", _values [0]);
  945. Assert.Equal ("10", _values [^1]);
  946. Assert.Equal ("r", _terminating);
  947. }
  948. [Fact]
  949. public void GetKeyCharArray_Tests ()
  950. {
  951. ConsoleKeyInfo [] cki =
  952. {
  953. new ('\u001b', 0, false, false, false),
  954. new ('[', 0, false, false, false),
  955. new ('5', 0, false, false, false),
  956. new (';', 0, false, false, false),
  957. new ('1', 0, false, false, false),
  958. new ('0', 0, false, false, false),
  959. new ('r', 0, false, false, false)
  960. };
  961. Assert.Equal (new [] { '\u001b', '[', '5', ';', '1', '0', 'r' }, EscSeqUtils.GetKeyCharArray (cki));
  962. }
  963. [Fact]
  964. [AutoInitShutdown]
  965. public void GetMouse_Tests ()
  966. {
  967. ConsoleKeyInfo [] cki =
  968. {
  969. new ('\u001b', 0, false, false, false),
  970. new ('[', 0, false, false, false),
  971. new ('<', 0, false, false, false),
  972. new ('0', 0, false, false, false),
  973. new (';', 0, false, false, false),
  974. new ('2', 0, false, false, false),
  975. new (';', 0, false, false, false),
  976. new ('3', 0, false, false, false),
  977. new ('M', 0, false, false, false)
  978. };
  979. EscSeqUtils.GetMouse (cki, out List<MouseFlags> mouseFlags, out Point pos, ProcessContinuousButtonPressed);
  980. Assert.Equal (new() { MouseFlags.Button1Pressed }, mouseFlags);
  981. Assert.Equal (new (1, 2), pos);
  982. cki = new ConsoleKeyInfo []
  983. {
  984. new ('\u001b', 0, false, false, false),
  985. new ('[', 0, false, false, false),
  986. new ('<', 0, false, false, false),
  987. new ('0', 0, false, false, false),
  988. new (';', 0, false, false, false),
  989. new ('2', 0, false, false, false),
  990. new (';', 0, false, false, false),
  991. new ('3', 0, false, false, false),
  992. new ('m', 0, false, false, false)
  993. };
  994. EscSeqUtils.GetMouse (cki, out mouseFlags, out pos, ProcessContinuousButtonPressed);
  995. Assert.Equal (2, mouseFlags.Count);
  996. Assert.Equal (
  997. new() { MouseFlags.Button1Released, MouseFlags.Button1Clicked },
  998. mouseFlags
  999. );
  1000. Assert.Equal (new (1, 2), pos);
  1001. cki = new ConsoleKeyInfo []
  1002. {
  1003. new ('\u001b', 0, false, false, false),
  1004. new ('[', 0, false, false, false),
  1005. new ('<', 0, false, false, false),
  1006. new ('0', 0, false, false, false),
  1007. new (';', 0, false, false, false),
  1008. new ('2', 0, false, false, false),
  1009. new (';', 0, false, false, false),
  1010. new ('3', 0, false, false, false),
  1011. new ('M', 0, false, false, false)
  1012. };
  1013. EscSeqUtils.GetMouse (cki, out mouseFlags, out pos, ProcessContinuousButtonPressed);
  1014. Assert.Equal (new() { MouseFlags.Button1DoubleClicked }, mouseFlags);
  1015. Assert.Equal (new (1, 2), pos);
  1016. cki = new ConsoleKeyInfo []
  1017. {
  1018. new ('\u001b', 0, false, false, false),
  1019. new ('[', 0, false, false, false),
  1020. new ('<', 0, false, false, false),
  1021. new ('0', 0, false, false, false),
  1022. new (';', 0, false, false, false),
  1023. new ('2', 0, false, false, false),
  1024. new (';', 0, false, false, false),
  1025. new ('3', 0, false, false, false),
  1026. new ('M', 0, false, false, false)
  1027. };
  1028. EscSeqUtils.GetMouse (cki, out mouseFlags, out pos, ProcessContinuousButtonPressed);
  1029. Assert.Equal (new() { MouseFlags.Button1TripleClicked }, mouseFlags);
  1030. Assert.Equal (new (1, 2), pos);
  1031. cki = new ConsoleKeyInfo []
  1032. {
  1033. new ('\u001b', 0, false, false, false),
  1034. new ('[', 0, false, false, false),
  1035. new ('<', 0, false, false, false),
  1036. new ('0', 0, false, false, false),
  1037. new (';', 0, false, false, false),
  1038. new ('2', 0, false, false, false),
  1039. new (';', 0, false, false, false),
  1040. new ('3', 0, false, false, false),
  1041. new ('m', 0, false, false, false)
  1042. };
  1043. EscSeqUtils.GetMouse (cki, out mouseFlags, out pos, ProcessContinuousButtonPressed);
  1044. Assert.Equal (new() { MouseFlags.Button1Released }, mouseFlags);
  1045. Assert.Equal (new (1, 2), pos);
  1046. }
  1047. [Fact]
  1048. public void ResizeArray_ConsoleKeyInfo ()
  1049. {
  1050. ConsoleKeyInfo [] expectedCkInfos = null;
  1051. var cki = new ConsoleKeyInfo ('\u001b', ConsoleKey.Escape, false, false, false);
  1052. expectedCkInfos = EscSeqUtils.ResizeArray (cki, expectedCkInfos);
  1053. Assert.Single (expectedCkInfos);
  1054. Assert.Equal (cki, expectedCkInfos [0]);
  1055. }
  1056. private void ClearAll ()
  1057. {
  1058. _escSeqReqProc = default (EscSeqRequests);
  1059. _newConsoleKeyInfo = default (ConsoleKeyInfo);
  1060. _key = default (ConsoleKey);
  1061. _cki = default (ConsoleKeyInfo []);
  1062. _mod = default (ConsoleModifiers);
  1063. _c1Control = default (string);
  1064. _code = default (string);
  1065. _terminating = default (string);
  1066. _values = default (string []);
  1067. _isKeyMouse = default (bool);
  1068. _isReq = default (bool);
  1069. _mouseFlags = default (List<MouseFlags>);
  1070. _pos = default (Point);
  1071. _arg1 = default (MouseFlags);
  1072. _arg2 = default (Point);
  1073. }
  1074. private void ProcessContinuousButtonPressed (MouseFlags arg1, Point arg2)
  1075. {
  1076. _arg1 = arg1;
  1077. _arg2 = arg2;
  1078. _actionStarted = true;
  1079. }
  1080. }