TextFieldTests.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667
  1. using Xunit;
  2. namespace Terminal.Gui.Views {
  3. public class TextFieldTests {
  4. private TextField _textField;
  5. public TextFieldTests ()
  6. {
  7. Application.Init (new FakeDriver (), new FakeMainLoop (() => FakeConsole.ReadKey (true)));
  8. // 1 2 3
  9. // 01234567890123456789012345678901=32 (Length)
  10. _textField = new TextField ("TAB to jump between text fields.");
  11. }
  12. [Fact]
  13. public void Changing_SelectedStart_Or_CursorPosition_Update_SelectedLength_And_SelectedText ()
  14. {
  15. _textField.SelectedStart = 2;
  16. Assert.Equal (32, _textField.CursorPosition);
  17. Assert.Equal (30, _textField.SelectedLength);
  18. Assert.Equal ("B to jump between text fields.", _textField.SelectedText);
  19. _textField.CursorPosition = 20;
  20. Assert.Equal (2, _textField.SelectedStart);
  21. Assert.Equal (18, _textField.SelectedLength);
  22. Assert.Equal ("B to jump between ", _textField.SelectedText);
  23. }
  24. [Fact]
  25. public void SelectedStart_With_Value_Less_Than_Minus_One_Changes_To_Minus_One ()
  26. {
  27. _textField.SelectedStart = -2;
  28. Assert.Equal (-1, _textField.SelectedStart);
  29. Assert.Equal (0, _textField.SelectedLength);
  30. Assert.Null (_textField.SelectedText);
  31. }
  32. [Fact]
  33. public void SelectedStart_With_Value_Greater_Than_Text_Length_Changes_To_Text_Length ()
  34. {
  35. _textField.CursorPosition = 2;
  36. _textField.SelectedStart = 33;
  37. Assert.Equal (32, _textField.SelectedStart);
  38. Assert.Equal (30, _textField.SelectedLength);
  39. Assert.Equal ("B to jump between text fields.", _textField.SelectedText);
  40. }
  41. [Fact]
  42. public void SelectedStart_And_CursorPosition_With_Value_Greater_Than_Text_Length_Changes_Both_To_Text_Length ()
  43. {
  44. _textField.CursorPosition = 33;
  45. _textField.SelectedStart = 33;
  46. Assert.Equal (32, _textField.CursorPosition);
  47. Assert.Equal (32, _textField.SelectedStart);
  48. Assert.Equal (0, _textField.SelectedLength);
  49. Assert.Null (_textField.SelectedText);
  50. }
  51. [Fact]
  52. public void SelectedStart_Greater_Than_CursorPosition_All_Selection_Is_Overwritten_On_Typing ()
  53. {
  54. _textField.SelectedStart = 19;
  55. _textField.CursorPosition = 12;
  56. Assert.Equal ("TAB to jump between text fields.", _textField.Text);
  57. _textField.ProcessKey (new KeyEvent ((Key)0x75, new KeyModifiers ())); // u
  58. Assert.Equal ("TAB to jump u text fields.", _textField.Text);
  59. }
  60. [Fact]
  61. public void CursorPosition_With_Value_Less_Than_Zero_Changes_To_Zero ()
  62. {
  63. _textField.CursorPosition = -1;
  64. Assert.Equal (0, _textField.CursorPosition);
  65. Assert.Equal (0, _textField.SelectedLength);
  66. Assert.Null (_textField.SelectedText);
  67. }
  68. [Fact]
  69. public void CursorPosition_With_Value_Greater_Than_Text_Length_Changes_To_Text_Length ()
  70. {
  71. _textField.CursorPosition = 33;
  72. Assert.Equal (32, _textField.CursorPosition);
  73. Assert.Equal (0, _textField.SelectedLength);
  74. Assert.Null (_textField.SelectedText);
  75. }
  76. [Fact]
  77. public void WordForward_With_No_Selection ()
  78. {
  79. _textField.CursorPosition = 0;
  80. var iteration = 0;
  81. while (_textField.CursorPosition < _textField.Text.Length) {
  82. _textField.ProcessKey (new KeyEvent (Key.CursorRight | Key.CtrlMask, new KeyModifiers ()));
  83. switch (iteration) {
  84. case 0:
  85. Assert.Equal (4, _textField.CursorPosition);
  86. Assert.Equal (-1, _textField.SelectedStart);
  87. Assert.Equal (0, _textField.SelectedLength);
  88. Assert.Null (_textField.SelectedText);
  89. break;
  90. case 1:
  91. Assert.Equal (7, _textField.CursorPosition);
  92. Assert.Equal (-1, _textField.SelectedStart);
  93. Assert.Equal (0, _textField.SelectedLength);
  94. Assert.Null (_textField.SelectedText);
  95. break;
  96. case 2:
  97. Assert.Equal (12, _textField.CursorPosition);
  98. Assert.Equal (-1, _textField.SelectedStart);
  99. Assert.Equal (0, _textField.SelectedLength);
  100. Assert.Null (_textField.SelectedText);
  101. break;
  102. case 3:
  103. Assert.Equal (20, _textField.CursorPosition);
  104. Assert.Equal (-1, _textField.SelectedStart);
  105. Assert.Equal (0, _textField.SelectedLength);
  106. Assert.Null (_textField.SelectedText);
  107. break;
  108. case 4:
  109. Assert.Equal (25, _textField.CursorPosition);
  110. Assert.Equal (-1, _textField.SelectedStart);
  111. Assert.Equal (0, _textField.SelectedLength);
  112. Assert.Null (_textField.SelectedText);
  113. break;
  114. case 5:
  115. Assert.Equal (32, _textField.CursorPosition);
  116. Assert.Equal (-1, _textField.SelectedStart);
  117. Assert.Equal (0, _textField.SelectedLength);
  118. Assert.Null (_textField.SelectedText);
  119. break;
  120. }
  121. iteration++;
  122. }
  123. }
  124. [Fact]
  125. public void WordBackward_With_No_Selection ()
  126. {
  127. _textField.CursorPosition = _textField.Text.Length;
  128. var iteration = 0;
  129. while (_textField.CursorPosition > 0) {
  130. _textField.ProcessKey (new KeyEvent (Key.CursorLeft | Key.CtrlMask, new KeyModifiers ()));
  131. switch (iteration) {
  132. case 0:
  133. Assert.Equal (25, _textField.CursorPosition);
  134. Assert.Equal (-1, _textField.SelectedStart);
  135. Assert.Equal (0, _textField.SelectedLength);
  136. Assert.Null (_textField.SelectedText);
  137. break;
  138. case 1:
  139. Assert.Equal (20, _textField.CursorPosition);
  140. Assert.Equal (-1, _textField.SelectedStart);
  141. Assert.Equal (0, _textField.SelectedLength);
  142. Assert.Null (_textField.SelectedText);
  143. break;
  144. case 2:
  145. Assert.Equal (12, _textField.CursorPosition);
  146. Assert.Equal (-1, _textField.SelectedStart);
  147. Assert.Equal (0, _textField.SelectedLength);
  148. Assert.Null (_textField.SelectedText);
  149. break;
  150. case 3:
  151. Assert.Equal (7, _textField.CursorPosition);
  152. Assert.Equal (-1, _textField.SelectedStart);
  153. Assert.Equal (0, _textField.SelectedLength);
  154. Assert.Null (_textField.SelectedText);
  155. break;
  156. case 4:
  157. Assert.Equal (4, _textField.CursorPosition);
  158. Assert.Equal (-1, _textField.SelectedStart);
  159. Assert.Equal (0, _textField.SelectedLength);
  160. Assert.Null (_textField.SelectedText);
  161. break;
  162. case 5:
  163. Assert.Equal (0, _textField.CursorPosition);
  164. Assert.Equal (-1, _textField.SelectedStart);
  165. Assert.Equal (0, _textField.SelectedLength);
  166. Assert.Null (_textField.SelectedText);
  167. break;
  168. }
  169. iteration++;
  170. }
  171. }
  172. [Fact]
  173. public void WordForward_With_Selection ()
  174. {
  175. _textField.CursorPosition = 0;
  176. _textField.SelectedStart = 0;
  177. var iteration = 0;
  178. while (_textField.CursorPosition < _textField.Text.Length) {
  179. _textField.ProcessKey (new KeyEvent (Key.CursorRight | Key.CtrlMask | Key.ShiftMask, new KeyModifiers ()));
  180. switch (iteration) {
  181. case 0:
  182. Assert.Equal (4, _textField.CursorPosition);
  183. Assert.Equal (0, _textField.SelectedStart);
  184. Assert.Equal (4, _textField.SelectedLength);
  185. Assert.Equal ("TAB ", _textField.SelectedText);
  186. break;
  187. case 1:
  188. Assert.Equal (7, _textField.CursorPosition);
  189. Assert.Equal (0, _textField.SelectedStart);
  190. Assert.Equal (7, _textField.SelectedLength);
  191. Assert.Equal ("TAB to ", _textField.SelectedText);
  192. break;
  193. case 2:
  194. Assert.Equal (12, _textField.CursorPosition);
  195. Assert.Equal (0, _textField.SelectedStart);
  196. Assert.Equal (12, _textField.SelectedLength);
  197. Assert.Equal ("TAB to jump ", _textField.SelectedText);
  198. break;
  199. case 3:
  200. Assert.Equal (20, _textField.CursorPosition);
  201. Assert.Equal (0, _textField.SelectedStart);
  202. Assert.Equal (20, _textField.SelectedLength);
  203. Assert.Equal ("TAB to jump between ", _textField.SelectedText);
  204. break;
  205. case 4:
  206. Assert.Equal (25, _textField.CursorPosition);
  207. Assert.Equal (0, _textField.SelectedStart);
  208. Assert.Equal (25, _textField.SelectedLength);
  209. Assert.Equal ("TAB to jump between text ", _textField.SelectedText);
  210. break;
  211. case 5:
  212. Assert.Equal (32, _textField.CursorPosition);
  213. Assert.Equal (0, _textField.SelectedStart);
  214. Assert.Equal (32, _textField.SelectedLength);
  215. Assert.Equal ("TAB to jump between text fields.", _textField.SelectedText);
  216. break;
  217. }
  218. iteration++;
  219. }
  220. }
  221. [Fact]
  222. public void WordBackward_With_Selection ()
  223. {
  224. _textField.CursorPosition = _textField.Text.Length;
  225. _textField.SelectedStart = _textField.Text.Length;
  226. var iteration = 0;
  227. while (_textField.CursorPosition > 0) {
  228. _textField.ProcessKey (new KeyEvent (Key.CursorLeft | Key.CtrlMask | Key.ShiftMask, new KeyModifiers ()));
  229. switch (iteration) {
  230. case 0:
  231. Assert.Equal (25, _textField.CursorPosition);
  232. Assert.Equal (32, _textField.SelectedStart);
  233. Assert.Equal (7, _textField.SelectedLength);
  234. Assert.Equal ("fields.", _textField.SelectedText);
  235. break;
  236. case 1:
  237. Assert.Equal (20, _textField.CursorPosition);
  238. Assert.Equal (32, _textField.SelectedStart);
  239. Assert.Equal (12, _textField.SelectedLength);
  240. Assert.Equal ("text fields.", _textField.SelectedText);
  241. break;
  242. case 2:
  243. Assert.Equal (12, _textField.CursorPosition);
  244. Assert.Equal (32, _textField.SelectedStart);
  245. Assert.Equal (20, _textField.SelectedLength);
  246. Assert.Equal ("between text fields.", _textField.SelectedText);
  247. break;
  248. case 3:
  249. Assert.Equal (7, _textField.CursorPosition);
  250. Assert.Equal (32, _textField.SelectedStart);
  251. Assert.Equal (25, _textField.SelectedLength);
  252. Assert.Equal ("jump between text fields.", _textField.SelectedText);
  253. break;
  254. case 4:
  255. Assert.Equal (4, _textField.CursorPosition);
  256. Assert.Equal (32, _textField.SelectedStart);
  257. Assert.Equal (28, _textField.SelectedLength);
  258. Assert.Equal ("to jump between text fields.", _textField.SelectedText);
  259. break;
  260. case 5:
  261. Assert.Equal (0, _textField.CursorPosition);
  262. Assert.Equal (32, _textField.SelectedStart);
  263. Assert.Equal (32, _textField.SelectedLength);
  264. Assert.Equal ("TAB to jump between text fields.", _textField.SelectedText);
  265. break;
  266. }
  267. iteration++;
  268. }
  269. }
  270. [Fact]
  271. public void WordForward_With_The_Same_Values_For_SelectedStart_And_CursorPosition_And_Not_Starting_At_Beginning_Of_The_Text ()
  272. {
  273. _textField.CursorPosition = 10;
  274. _textField.SelectedStart = 10;
  275. var iteration = 0;
  276. while (_textField.CursorPosition < _textField.Text.Length) {
  277. _textField.ProcessKey (new KeyEvent (Key.CursorRight | Key.CtrlMask | Key.ShiftMask, new KeyModifiers ()));
  278. switch (iteration) {
  279. case 0:
  280. Assert.Equal (12, _textField.CursorPosition);
  281. Assert.Equal (10, _textField.SelectedStart);
  282. Assert.Equal (2, _textField.SelectedLength);
  283. Assert.Equal ("p ", _textField.SelectedText);
  284. break;
  285. case 1:
  286. Assert.Equal (20, _textField.CursorPosition);
  287. Assert.Equal (10, _textField.SelectedStart);
  288. Assert.Equal (10, _textField.SelectedLength);
  289. Assert.Equal ("p between ", _textField.SelectedText);
  290. break;
  291. case 2:
  292. Assert.Equal (25, _textField.CursorPosition);
  293. Assert.Equal (10, _textField.SelectedStart);
  294. Assert.Equal (15, _textField.SelectedLength);
  295. Assert.Equal ("p between text ", _textField.SelectedText);
  296. break;
  297. case 3:
  298. Assert.Equal (32, _textField.CursorPosition);
  299. Assert.Equal (10, _textField.SelectedStart);
  300. Assert.Equal (22, _textField.SelectedLength);
  301. Assert.Equal ("p between text fields.", _textField.SelectedText);
  302. break;
  303. }
  304. iteration++;
  305. }
  306. }
  307. [Fact]
  308. public void WordBackward_With_The_Same_Values_For_SelectedStart_And_CursorPosition_And_Not_Starting_At_Beginning_Of_The_Text ()
  309. {
  310. _textField.CursorPosition = 10;
  311. _textField.SelectedStart = 10;
  312. var iteration = 0;
  313. while (_textField.CursorPosition > 0) {
  314. _textField.ProcessKey (new KeyEvent (Key.CursorLeft | Key.CtrlMask | Key.ShiftMask, new KeyModifiers ()));
  315. switch (iteration) {
  316. case 0:
  317. Assert.Equal (7, _textField.CursorPosition);
  318. Assert.Equal (10, _textField.SelectedStart);
  319. Assert.Equal (3, _textField.SelectedLength);
  320. Assert.Equal ("jum", _textField.SelectedText);
  321. break;
  322. case 1:
  323. Assert.Equal (4, _textField.CursorPosition);
  324. Assert.Equal (10, _textField.SelectedStart);
  325. Assert.Equal (6, _textField.SelectedLength);
  326. Assert.Equal ("to jum", _textField.SelectedText);
  327. break;
  328. case 2:
  329. Assert.Equal (0, _textField.CursorPosition);
  330. Assert.Equal (10, _textField.SelectedStart);
  331. Assert.Equal (10, _textField.SelectedLength);
  332. Assert.Equal ("TAB to jum", _textField.SelectedText);
  333. break;
  334. }
  335. iteration++;
  336. }
  337. }
  338. [Fact]
  339. public void WordForward_With_No_Selection_And_With_More_Than_Only_One_Whitespace_And_With_Only_One_Letter ()
  340. {
  341. // 1 2 3 4 5
  342. // 0123456789012345678901234567890123456789012345678901234=55 (Length)
  343. _textField.Text = "TAB t o jump b etween t ext f ields .";
  344. _textField.CursorPosition = 0;
  345. var iteration = 0;
  346. while (_textField.CursorPosition < _textField.Text.Length) {
  347. _textField.ProcessKey (new KeyEvent (Key.CursorRight | Key.CtrlMask, new KeyModifiers ()));
  348. switch (iteration) {
  349. case 0:
  350. Assert.Equal (6, _textField.CursorPosition);
  351. Assert.Equal (-1, _textField.SelectedStart);
  352. Assert.Equal (0, _textField.SelectedLength);
  353. Assert.Null (_textField.SelectedText);
  354. break;
  355. case 1:
  356. Assert.Equal (9, _textField.CursorPosition);
  357. Assert.Equal (-1, _textField.SelectedStart);
  358. Assert.Equal (0, _textField.SelectedLength);
  359. Assert.Null (_textField.SelectedText);
  360. break;
  361. case 2:
  362. Assert.Equal (12, _textField.CursorPosition);
  363. Assert.Equal (-1, _textField.SelectedStart);
  364. Assert.Equal (0, _textField.SelectedLength);
  365. Assert.Null (_textField.SelectedText);
  366. break;
  367. case 3:
  368. Assert.Equal (25, _textField.CursorPosition);
  369. Assert.Equal (-1, _textField.SelectedStart);
  370. Assert.Equal (0, _textField.SelectedLength);
  371. Assert.Null (_textField.SelectedText);
  372. break;
  373. case 4:
  374. Assert.Equal (28, _textField.CursorPosition);
  375. Assert.Equal (-1, _textField.SelectedStart);
  376. Assert.Equal (0, _textField.SelectedLength);
  377. Assert.Null (_textField.SelectedText);
  378. break;
  379. case 5:
  380. Assert.Equal (38, _textField.CursorPosition);
  381. Assert.Equal (-1, _textField.SelectedStart);
  382. Assert.Equal (0, _textField.SelectedLength);
  383. Assert.Null (_textField.SelectedText);
  384. break;
  385. case 6:
  386. Assert.Equal (40, _textField.CursorPosition);
  387. Assert.Equal (-1, _textField.SelectedStart);
  388. Assert.Equal (0, _textField.SelectedLength);
  389. Assert.Null (_textField.SelectedText);
  390. break;
  391. case 7:
  392. Assert.Equal (46, _textField.CursorPosition);
  393. Assert.Equal (-1, _textField.SelectedStart);
  394. Assert.Equal (0, _textField.SelectedLength);
  395. Assert.Null (_textField.SelectedText);
  396. break;
  397. case 8:
  398. Assert.Equal (48, _textField.CursorPosition);
  399. Assert.Equal (-1, _textField.SelectedStart);
  400. Assert.Equal (0, _textField.SelectedLength);
  401. Assert.Null (_textField.SelectedText);
  402. break;
  403. case 9:
  404. Assert.Equal (55, _textField.CursorPosition);
  405. Assert.Equal (-1, _textField.SelectedStart);
  406. Assert.Equal (0, _textField.SelectedLength);
  407. Assert.Null (_textField.SelectedText);
  408. break;
  409. }
  410. iteration++;
  411. }
  412. }
  413. [Fact]
  414. public void WordBackward_With_No_Selection_And_With_More_Than_Only_One_Whitespace_And_With_Only_One_Letter ()
  415. {
  416. // 1 2 3 4 5
  417. // 0123456789012345678901234567890123456789012345678901234=55 (Length)
  418. _textField.Text = "TAB t o jump b etween t ext f ields .";
  419. _textField.CursorPosition = _textField.Text.Length;
  420. var iteration = 0;
  421. while (_textField.CursorPosition > 0) {
  422. _textField.ProcessKey (new KeyEvent (Key.CursorLeft | Key.CtrlMask, new KeyModifiers ()));
  423. switch (iteration) {
  424. case 0:
  425. Assert.Equal (54, _textField.CursorPosition);
  426. Assert.Equal (-1, _textField.SelectedStart);
  427. Assert.Equal (0, _textField.SelectedLength);
  428. Assert.Null (_textField.SelectedText);
  429. break;
  430. case 1:
  431. Assert.Equal (48, _textField.CursorPosition);
  432. Assert.Equal (-1, _textField.SelectedStart);
  433. Assert.Equal (0, _textField.SelectedLength);
  434. Assert.Null (_textField.SelectedText);
  435. break;
  436. case 2:
  437. Assert.Equal (46, _textField.CursorPosition);
  438. Assert.Equal (-1, _textField.SelectedStart);
  439. Assert.Equal (0, _textField.SelectedLength);
  440. Assert.Null (_textField.SelectedText);
  441. break;
  442. case 3:
  443. Assert.Equal (40, _textField.CursorPosition);
  444. Assert.Equal (-1, _textField.SelectedStart);
  445. Assert.Equal (0, _textField.SelectedLength);
  446. Assert.Null (_textField.SelectedText);
  447. break;
  448. case 4:
  449. Assert.Equal (38, _textField.CursorPosition);
  450. Assert.Equal (-1, _textField.SelectedStart);
  451. Assert.Equal (0, _textField.SelectedLength);
  452. Assert.Null (_textField.SelectedText);
  453. break;
  454. case 5:
  455. Assert.Equal (28, _textField.CursorPosition);
  456. Assert.Equal (-1, _textField.SelectedStart);
  457. Assert.Equal (0, _textField.SelectedLength);
  458. Assert.Null (_textField.SelectedText);
  459. break;
  460. case 6:
  461. Assert.Equal (25, _textField.CursorPosition);
  462. Assert.Equal (-1, _textField.SelectedStart);
  463. Assert.Equal (0, _textField.SelectedLength);
  464. Assert.Null (_textField.SelectedText);
  465. break;
  466. case 7:
  467. Assert.Equal (12, _textField.CursorPosition);
  468. Assert.Equal (-1, _textField.SelectedStart);
  469. Assert.Equal (0, _textField.SelectedLength);
  470. Assert.Null (_textField.SelectedText);
  471. break;
  472. case 8:
  473. Assert.Equal (9, _textField.CursorPosition);
  474. Assert.Equal (-1, _textField.SelectedStart);
  475. Assert.Equal (0, _textField.SelectedLength);
  476. Assert.Null (_textField.SelectedText);
  477. break;
  478. case 9:
  479. Assert.Equal (6, _textField.CursorPosition);
  480. Assert.Equal (-1, _textField.SelectedStart);
  481. Assert.Equal (0, _textField.SelectedLength);
  482. Assert.Null (_textField.SelectedText);
  483. break;
  484. case 10:
  485. Assert.Equal (0, _textField.CursorPosition);
  486. Assert.Equal (-1, _textField.SelectedStart);
  487. Assert.Equal (0, _textField.SelectedLength);
  488. Assert.Null (_textField.SelectedText);
  489. break;
  490. }
  491. iteration++;
  492. }
  493. }
  494. [Fact]
  495. public void Copy_Or_Cut_Null_If_No_Selection ()
  496. {
  497. _textField.SelectedStart = -1;
  498. _textField.Copy ();
  499. Assert.Null (_textField.SelectedText);
  500. _textField.Cut ();
  501. Assert.Null (_textField.SelectedText);
  502. }
  503. [Fact]
  504. public void Copy_Or_Cut_Not_Null_If_Has_Selection ()
  505. {
  506. _textField.SelectedStart = 20;
  507. _textField.CursorPosition = 24;
  508. _textField.Copy ();
  509. Assert.Equal ("text", _textField.SelectedText);
  510. _textField.Cut ();
  511. Assert.Null (_textField.SelectedText);
  512. }
  513. [Fact]
  514. public void Copy_Or_Cut_And_Paste_With_Selection ()
  515. {
  516. _textField.SelectedStart = 20;
  517. _textField.CursorPosition = 24;
  518. _textField.Copy ();
  519. Assert.Equal ("text", _textField.SelectedText);
  520. Assert.Equal ("TAB to jump between text fields.", _textField.Text);
  521. _textField.Paste ();
  522. Assert.Equal ("TAB to jump between text fields.", _textField.Text);
  523. _textField.SelectedStart = 20;
  524. _textField.Cut ();
  525. _textField.Paste ();
  526. Assert.Equal ("TAB to jump between text fields.", _textField.Text);
  527. }
  528. [Fact]
  529. public void Copy_Or_Cut_And_Paste_With_No_Selection ()
  530. {
  531. _textField.SelectedStart = 20;
  532. _textField.CursorPosition = 24;
  533. _textField.Copy ();
  534. Assert.Equal ("text", _textField.SelectedText);
  535. Assert.Equal ("TAB to jump between text fields.", _textField.Text);
  536. _textField.SelectedStart = -1;
  537. _textField.Paste ();
  538. Assert.Equal ("TAB to jump between texttext fields.", _textField.Text);
  539. _textField.SelectedStart = 24;
  540. _textField.Cut ();
  541. Assert.Null (_textField.SelectedText);
  542. Assert.Equal ("TAB to jump between text fields.", _textField.Text);
  543. _textField.SelectedStart = -1;
  544. _textField.Paste ();
  545. Assert.Equal ("TAB to jump between texttext fields.", _textField.Text);
  546. }
  547. [Fact]
  548. public void Copy_Or_Cut__Not_Allowed_If_Secret_Is_True ()
  549. {
  550. _textField.Secret = true;
  551. _textField.SelectedStart = 20;
  552. _textField.CursorPosition = 24;
  553. _textField.Copy ();
  554. Assert.Null (_textField.SelectedText);
  555. _textField.Cut ();
  556. Assert.Null (_textField.SelectedText);
  557. _textField.Secret = false;
  558. _textField.Copy ();
  559. Assert.Equal ("text", _textField.SelectedText);
  560. _textField.Cut ();
  561. Assert.Null (_textField.SelectedText);
  562. }
  563. [Fact]
  564. public void Paste_Always_Clear_The_SelectedText ()
  565. {
  566. _textField.SelectedStart = 20;
  567. _textField.CursorPosition = 24;
  568. _textField.Copy ();
  569. Assert.Equal ("text", _textField.SelectedText);
  570. _textField.Paste ();
  571. Assert.Null (_textField.SelectedText);
  572. }
  573. [Fact]
  574. public void TextChanging_Event ()
  575. {
  576. bool cancel = true;
  577. _textField.TextChanging += (e) => {
  578. Assert.Equal ("changing", e.NewText);
  579. if (cancel) {
  580. e.Cancel = true;
  581. }
  582. };
  583. _textField.Text = "changing";
  584. Assert.Equal ("TAB to jump between text fields.", _textField.Text);
  585. cancel = false;
  586. _textField.Text = "changing";
  587. Assert.Equal ("changing", _textField.Text);
  588. }
  589. [Fact]
  590. public void TextChanged_Event ()
  591. {
  592. _textField.TextChanged += (e) => {
  593. Assert.Equal ("TAB to jump between text fields.", e);
  594. };
  595. _textField.Text = "changed";
  596. Assert.Equal ("changed", _textField.Text);
  597. }
  598. [Fact]
  599. public void Used_Is_True_By_Default ()
  600. {
  601. _textField.CursorPosition = 10;
  602. Assert.Equal ("TAB to jump between text fields.", _textField.Text);
  603. _textField.ProcessKey (new KeyEvent ((Key)0x75, new KeyModifiers ())); // u
  604. Assert.Equal ("TAB to jumup between text fields.", _textField.Text);
  605. _textField.ProcessKey (new KeyEvent ((Key)0x73, new KeyModifiers ())); // s
  606. Assert.Equal ("TAB to jumusp between text fields.", _textField.Text);
  607. _textField.ProcessKey (new KeyEvent ((Key)0x65, new KeyModifiers ())); // e
  608. Assert.Equal ("TAB to jumusep between text fields.", _textField.Text);
  609. _textField.ProcessKey (new KeyEvent ((Key)0x64, new KeyModifiers ())); // d
  610. Assert.Equal ("TAB to jumusedp between text fields.", _textField.Text);
  611. }
  612. [Fact]
  613. public void Used_Is_False ()
  614. {
  615. _textField.Used = false;
  616. _textField.CursorPosition = 10;
  617. Assert.Equal ("TAB to jump between text fields.", _textField.Text);
  618. _textField.ProcessKey (new KeyEvent ((Key)0x75, new KeyModifiers ())); // u
  619. Assert.Equal ("TAB to jumu between text fields.", _textField.Text);
  620. _textField.ProcessKey (new KeyEvent ((Key)0x73, new KeyModifiers ())); // s
  621. Assert.Equal ("TAB to jumusbetween text fields.", _textField.Text);
  622. _textField.ProcessKey (new KeyEvent ((Key)0x65, new KeyModifiers ())); // e
  623. Assert.Equal ("TAB to jumuseetween text fields.", _textField.Text);
  624. _textField.ProcessKey (new KeyEvent ((Key)0x64, new KeyModifiers ())); // d
  625. Assert.Equal ("TAB to jumusedtween text fields.", _textField.Text);
  626. }
  627. }
  628. }