EscSeqUtilsTests.cs 49 KB

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