TextBoxTest.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470
  1. //
  2. // Copyright (c) 2005 Novell, Inc.
  3. //
  4. // Authors:
  5. // Ritvik Mayank ([email protected])
  6. //
  7. using System;
  8. using System.Drawing;
  9. using System.Reflection;
  10. using System.Windows.Forms;
  11. using NUnit.Framework;
  12. namespace MonoTests.System.Windows.Forms
  13. {
  14. [TestFixture]
  15. public class TextBoxTest
  16. {
  17. TextBox textBox;
  18. int _invalidated;
  19. int _paint;
  20. [SetUp]
  21. public void SetUp()
  22. {
  23. textBox = new TextBox();
  24. textBox.Invalidated += new InvalidateEventHandler (TextBox_Invalidated);
  25. textBox.Paint += new PaintEventHandler (TextBox_Paint);
  26. Reset ();
  27. }
  28. [Test]
  29. [Category ("NotWorking")]
  30. public void TextBoxBasePropertyTest ()
  31. {
  32. Assert.AreEqual (false, textBox.AcceptsTab, "#1a");
  33. textBox.Multiline = true;
  34. textBox.AcceptsTab = true;
  35. // SendKeys.SendWait ("^%");
  36. Assert.AreEqual (true, textBox.AcceptsTab, "#1b");
  37. Assert.AreEqual (true, textBox.AutoSize, "#2");
  38. Assert.AreEqual (null, textBox.BackgroundImage, "#4a");
  39. string gif = "M.gif";
  40. textBox.BackgroundImage = Image.FromFile (gif);
  41. // comparing image objects fails on MS .Net so using Size property
  42. Assert.AreEqual (Image.FromFile(gif, true).Size, textBox.BackgroundImage.Size, "#4b");
  43. Assert.AreEqual (BorderStyle.Fixed3D, textBox.BorderStyle, "#5");
  44. Assert.AreEqual (false, textBox.CanUndo, "#6a");
  45. Clipboard.SetDataObject ("TEST");
  46. textBox.Paste ();
  47. Assert.AreEqual (true, textBox.CanUndo, "#6b");
  48. textBox.Undo ();
  49. textBox.ClearUndo ();
  50. Assert.AreEqual (false, textBox.CanUndo, "#6c");
  51. Assert.AreEqual (true, textBox.HideSelection, "#8");
  52. Assert.AreEqual (1, textBox.Lines.Length, "#9");
  53. Assert.AreEqual (32767, textBox.MaxLength, "#10");
  54. Assert.AreEqual (true, textBox.Modified, "#11");
  55. Assert.AreEqual (true, textBox.Multiline, "#12a");
  56. textBox.WordWrap = false;
  57. Assert.AreEqual (true, textBox.Multiline, "#12b");
  58. textBox.AcceptsReturn = true;
  59. Assert.AreEqual (true, textBox.Multiline, "#12c");
  60. Assert.AreEqual (20, textBox.PreferredHeight, "#13");
  61. Assert.AreEqual (false, textBox.ReadOnly, "#14");
  62. Assert.AreEqual ("", textBox.SelectedText, "#15");
  63. textBox.Text = "sample TextBox";
  64. Assert.AreEqual (0, textBox.SelectionLength, "#16b");
  65. Assert.AreEqual (0, textBox.SelectionStart, "#17");
  66. textBox.WordWrap = false;
  67. textBox.AcceptsReturn = true;
  68. Assert.AreEqual ("sample TextBox", textBox.Text, "#18");
  69. Assert.AreEqual (14, textBox.TextLength, "#19");
  70. Assert.AreEqual (false, textBox.WordWrap, "#20");
  71. }
  72. [Test]
  73. public void TextBoxPropertyTest ()
  74. {
  75. Assert.AreEqual (false, textBox.AcceptsReturn, "#21");
  76. Assert.AreEqual (CharacterCasing.Normal, textBox.CharacterCasing, "#22");
  77. Assert.AreEqual ('\0', textBox.PasswordChar, "#23");
  78. textBox.PasswordChar = '*';
  79. Assert.AreEqual ('*', textBox.PasswordChar, "#23b");
  80. Assert.AreEqual (ScrollBars.None, textBox.ScrollBars, "#24");
  81. Assert.AreEqual (-1, textBox.SelectionLength, "#25");
  82. Assert.AreEqual (HorizontalAlignment.Left , textBox.TextAlign, "#26");
  83. #if NET_2_0
  84. Assert.AreEqual (true, textBox.AutoCompleteCustomSource != null, "#27");
  85. Assert.AreEqual (AutoCompleteMode.None, textBox.AutoCompleteMode, "#28");
  86. Assert.AreEqual (AutoCompleteSource.None, textBox.AutoCompleteSource, "#29");
  87. textBox.AutoCompleteCustomSource = null;
  88. Assert.AreEqual (true, textBox.AutoCompleteCustomSource != null, "#30");
  89. #endif
  90. }
  91. #if NET_2_0
  92. [Test]
  93. public void UseSystemPasswordCharDefault()
  94. {
  95. Assert.IsFalse(textBox.UseSystemPasswordChar);
  96. }
  97. [Test]
  98. public void UseSystemPasswordCharOverridesPasswordChar()
  99. {
  100. textBox.PasswordChar = '!';
  101. textBox.UseSystemPasswordChar = true;
  102. Assert.AreEqual('*', textBox.PasswordChar);
  103. }
  104. #endif
  105. [Test]
  106. public void AppendTextTest ()
  107. {
  108. Form f = new Form ();
  109. f.ShowInTaskbar = false;
  110. f.Visible = true;
  111. textBox.Visible = true;
  112. textBox.Text = "TextBox1";
  113. TextBox textBox2 = new TextBox ();
  114. textBox2.Visible = true;
  115. f.Controls.Add (textBox);
  116. f.Controls.Add (textBox2);
  117. textBox2.AppendText (textBox.Text);
  118. Assert.AreEqual ("TextBox1", textBox2.Text, "#27");
  119. f.Dispose ();
  120. }
  121. [Test]
  122. public void AppendTextTest2 ()
  123. {
  124. TextBox textBox2 = new TextBox ();
  125. textBox2.AppendText ("hi");
  126. textBox2.AppendText ("ho");
  127. Assert.AreEqual ("hiho", textBox2.Text, "#1");
  128. Assert.IsNotNull (textBox2.Lines, "#2");
  129. Assert.AreEqual (1, textBox2.Lines.Length, "#3");
  130. Assert.AreEqual ("hiho", textBox2.Lines [0], "#4");
  131. }
  132. [Test]
  133. public void AppendText_Multiline_CRLF ()
  134. {
  135. TextBox textBox = new TextBox ();
  136. textBox.Text = "ha";
  137. textBox.AppendText ("hi\r\n\r\n");
  138. textBox.AppendText ("ho\r\n");
  139. Assert.AreEqual ("hahi\r\n\r\nho\r\n", textBox.Text, "#A1");
  140. Assert.IsNotNull (textBox.Lines, "#A2");
  141. Assert.AreEqual (4, textBox.Lines.Length, "#A3");
  142. Assert.AreEqual ("hahi", textBox.Lines [0], "#A4");
  143. Assert.AreEqual (string.Empty, textBox.Lines [1], "#A5");
  144. Assert.AreEqual ("ho", textBox.Lines [2], "#A6");
  145. Assert.AreEqual (string.Empty, textBox.Lines [3], "#A7");
  146. textBox.Multiline = true;
  147. textBox.Text = "ha";
  148. textBox.AppendText ("hi\r\n\r\n");
  149. textBox.AppendText ("ho\r\n");
  150. Assert.AreEqual ("hahi\r\n\r\nho\r\n", textBox.Text, "#B1");
  151. Assert.IsNotNull (textBox.Lines, "#B2");
  152. Assert.AreEqual (4, textBox.Lines.Length, "#B3");
  153. Assert.AreEqual ("hahi", textBox.Lines [0], "#B4");
  154. Assert.AreEqual (string.Empty, textBox.Lines [1], "#B5");
  155. Assert.AreEqual ("ho", textBox.Lines [2], "#B6");
  156. Assert.AreEqual (string.Empty, textBox.Lines [3], "#B7");
  157. }
  158. [Test]
  159. public void AppendText_Multiline_LF ()
  160. {
  161. TextBox textBox = new TextBox ();
  162. textBox.Text = "ha";
  163. textBox.AppendText ("hi\n\n");
  164. textBox.AppendText ("ho\n");
  165. Assert.AreEqual ("hahi\n\nho\n", textBox.Text, "#A1");
  166. Assert.IsNotNull (textBox.Lines, "#A2");
  167. Assert.AreEqual (4, textBox.Lines.Length, "#A3");
  168. Assert.AreEqual ("hahi", textBox.Lines [0], "#A4");
  169. Assert.AreEqual (string.Empty, textBox.Lines [1], "#A5");
  170. Assert.AreEqual ("ho", textBox.Lines [2], "#A6");
  171. Assert.AreEqual (string.Empty, textBox.Lines [3], "#A7");
  172. textBox.Multiline = true;
  173. textBox.Text = "ha";
  174. textBox.AppendText ("hi\n\n");
  175. textBox.AppendText ("ho\n");
  176. Assert.AreEqual ("hahi\n\nho\n", textBox.Text, "#B1");
  177. Assert.IsNotNull (textBox.Lines, "#B2");
  178. Assert.AreEqual (4, textBox.Lines.Length, "#B3");
  179. Assert.AreEqual ("hahi", textBox.Lines [0], "#B4");
  180. Assert.AreEqual (string.Empty, textBox.Lines [1], "#B5");
  181. Assert.AreEqual ("ho", textBox.Lines [2], "#B6");
  182. Assert.AreEqual (string.Empty, textBox.Lines [3], "#B7");
  183. }
  184. [Test]
  185. public void BackColorTest ()
  186. {
  187. Assert.AreEqual (SystemColors.Window, textBox.BackColor, "#A1");
  188. textBox.BackColor = Color.Red;
  189. Assert.AreEqual (Color.Red, textBox.BackColor, "#A2");
  190. textBox.BackColor = Color.White;
  191. Assert.AreEqual (Color.White, textBox.BackColor, "#A3");
  192. Assert.AreEqual (0, _invalidated, "#A4");
  193. Assert.AreEqual (0, _paint, "#A5");
  194. Form form = new Form ();
  195. form.ShowInTaskbar = false;
  196. form.Controls.Add (textBox);
  197. form.Show ();
  198. Assert.AreEqual (Color.White, textBox.BackColor, "#B1");
  199. Assert.AreEqual (0, _invalidated, "#B2");
  200. Assert.AreEqual (0, _paint, "#B3");
  201. textBox.BackColor = Color.Red;
  202. Assert.AreEqual (Color.Red, textBox.BackColor, "#B4");
  203. Assert.AreEqual (1, _invalidated, "#B5");
  204. Assert.AreEqual (0, _paint, "#B6");
  205. textBox.BackColor = Color.Red;
  206. Assert.AreEqual (Color.Red, textBox.BackColor, "#B7");
  207. Assert.AreEqual (1, _invalidated, "#B8");
  208. Assert.AreEqual (0, _paint, "#B9");
  209. textBox.BackColor = Color.Blue;
  210. Assert.AreEqual (Color.Blue, textBox.BackColor, "#B10");
  211. Assert.AreEqual (2, _invalidated, "#B11");
  212. Assert.AreEqual (0, _paint, "#B12");
  213. }
  214. [Test]
  215. public void ClearTest ()
  216. {
  217. textBox.Text = "TextBox1";
  218. Assert.AreEqual ("TextBox1", textBox.Text, "#28a" );
  219. textBox.Clear ();
  220. Assert.AreEqual ("", textBox.Text, "#28b");
  221. }
  222. [Test]
  223. public void ClearUndoTest ()
  224. {
  225. textBox.Text = "TextBox1";
  226. textBox.SelectionLength = 4;
  227. textBox.Copy ();
  228. Assert.AreEqual ("Text", textBox.SelectedText, "#29a");
  229. textBox.Paste ();
  230. Assert.AreEqual (true, textBox.CanUndo, "#29b");
  231. textBox.ClearUndo ();
  232. Assert.AreEqual (false, textBox.CanUndo, "#29c");
  233. }
  234. [Test] // bug #80163
  235. public void ContextMenu ()
  236. {
  237. TextBox textBox = new TextBox ();
  238. Assert.IsNull (textBox.ContextMenu);
  239. }
  240. [Test]
  241. public void CopyTest ()
  242. {
  243. textBox.Text = "ABCDE";
  244. textBox.SelectionLength = 4;
  245. textBox.Copy ();
  246. Assert.AreEqual ("ABCD", textBox.SelectedText, "#30");
  247. }
  248. [Test]
  249. public void CutTest ()
  250. {
  251. textBox.Text = "ABCDE";
  252. textBox.SelectionLength = 4;
  253. textBox.Cut ();
  254. Assert.AreEqual ("E", textBox.Text, "#31");
  255. }
  256. [Test]
  257. public void PasteTest ()
  258. {
  259. textBox.Text = "ABCDE";
  260. textBox.SelectionLength = 4;
  261. textBox.Copy ();
  262. textBox.SelectionStart = textBox.SelectionStart + textBox.SelectionLength;
  263. textBox.Paste ();
  264. Assert.AreEqual ("ABCDABCD", textBox.Text, "#32");
  265. }
  266. [Test] // bug #80301
  267. [Ignore ("Depends on specific DPI")]
  268. public void PreferredHeight ()
  269. {
  270. textBox.Font = new Font ("Arial", 14);
  271. Assert.AreEqual (29, textBox.PreferredHeight, "#A1");
  272. textBox.Font = new Font ("Arial", 16);
  273. Assert.AreEqual (32, textBox.PreferredHeight, "#A2");
  274. textBox.Font = new Font ("Arial", 17);
  275. Assert.AreEqual (34, textBox.PreferredHeight, "#A3");
  276. textBox.BorderStyle = BorderStyle.None;
  277. Assert.AreEqual (27, textBox.PreferredHeight, "#B1");
  278. textBox.Font = new Font ("Arial", 14);
  279. Assert.AreEqual (22, textBox.PreferredHeight, "#B2");
  280. textBox.Font = new Font ("Arial", 16);
  281. Assert.AreEqual (25, textBox.PreferredHeight, "#B3");
  282. }
  283. [Test]
  284. public void SelectTest ()
  285. {
  286. textBox.Text = "This is a sample test.";
  287. textBox.Select (0, 4);
  288. Assert.AreEqual ("This", textBox.SelectedText, "#33");
  289. }
  290. [Test]
  291. public void SelectAllTest ()
  292. {
  293. textBox.Text = "This is a sample test.";
  294. textBox.SelectAll ();
  295. Assert.AreEqual ("This is a sample test.", textBox.SelectedText, "#34");
  296. }
  297. [Test]
  298. public void FocusSelectsAllTest ()
  299. {
  300. textBox.Text = "This is a sample test.";
  301. textBox.CreateControl ();
  302. textBox.Focus ();
  303. Assert.AreEqual ("This is a sample test.", textBox.SelectedText, "#34");
  304. }
  305. [Test]
  306. [Category ("NotWorking")]
  307. public void ForeColorTest ()
  308. {
  309. Assert.AreEqual (SystemColors.WindowText, textBox.ForeColor, "#A1");
  310. textBox.ForeColor = Color.Red;
  311. Assert.AreEqual (Color.Red, textBox.ForeColor, "#A2");
  312. textBox.ForeColor = Color.White;
  313. Assert.AreEqual (Color.White, textBox.ForeColor, "#A3");
  314. Assert.AreEqual (0, _invalidated, "#A4");
  315. Assert.AreEqual (0, _paint, "#A5");
  316. Form form = new Form ();
  317. form.ShowInTaskbar = false;
  318. form.Controls.Add (textBox);
  319. form.Show ();
  320. Assert.AreEqual (Color.White, textBox.ForeColor, "#B1");
  321. Assert.AreEqual (0, _invalidated, "#B2");
  322. Assert.AreEqual (0, _paint, "#B3");
  323. textBox.ForeColor = Color.Red;
  324. Assert.AreEqual (Color.Red, textBox.ForeColor, "#B4");
  325. Assert.AreEqual (1, _invalidated, "#B5");
  326. Assert.AreEqual (0, _paint, "#B6");
  327. textBox.ForeColor = Color.Red;
  328. Assert.AreEqual (Color.Red, textBox.ForeColor, "#B7");
  329. Assert.AreEqual (1, _invalidated, "#B8");
  330. Assert.AreEqual (0, _paint, "#B9");
  331. textBox.ForeColor = Color.Blue;
  332. Assert.AreEqual (Color.Blue, textBox.ForeColor, "#B10");
  333. Assert.AreEqual (2, _invalidated, "#B11");
  334. Assert.AreEqual (0, _paint, "#B12");
  335. }
  336. [Test]
  337. public void ToStringTest ()
  338. {
  339. Assert.AreEqual ("System.Windows.Forms.TextBox, Text: ", textBox.ToString(), "#35");
  340. }
  341. [Test]
  342. public void UndoTest1 ()
  343. {
  344. textBox.Text = "ABCDE";
  345. textBox.SelectionLength = 4;
  346. textBox.Copy ();
  347. textBox.SelectionStart = textBox.SelectionStart + textBox.SelectionLength;
  348. textBox.Paste ();
  349. Console.WriteLine ("pre paste text: {0}", textBox.Text);
  350. textBox.Undo ();
  351. Assert.AreEqual ("ABCDE", textBox.Text, "#36");
  352. }
  353. [Test] // bug #79851
  354. public void WrappedText ()
  355. {
  356. string text = "blabla blablabalbalbalbalbalbal blabla blablabl bal " +
  357. "bal bla bal balajkdhfk dskfk ersd dsfjksdhf sdkfjshd f";
  358. textBox.Multiline = true;
  359. textBox.Size = new Size (30, 168);
  360. textBox.Text = text;
  361. Form form = new Form ();
  362. form.Controls.Add (textBox);
  363. form.ShowInTaskbar = false;
  364. form.Show ();
  365. Assert.AreEqual (text, textBox.Text);
  366. }
  367. [Test] // bug #79909
  368. public void MultilineText ()
  369. {
  370. string text = "line1\n\nline2\nline3\r\nline4";
  371. textBox.Size = new Size (300, 168);
  372. textBox.Text = text;
  373. Form form = new Form ();
  374. form.Controls.Add (textBox);
  375. form.ShowInTaskbar = false;
  376. form.Show ();
  377. Assert.AreEqual (text, textBox.Text, "#1");
  378. text = "line1\n\nline2\nline3\r\nline4\rline5\r\n\nline6\n\n\nline7";
  379. textBox.Text = text;
  380. form.Visible = false;
  381. form.Show ();
  382. Assert.AreEqual (text, textBox.Text, "#2");
  383. }
  384. [Test]
  385. public void ModifiedTest ()
  386. {
  387. Assert.AreEqual (true, textBox.Modified, "modified-1");
  388. textBox.Modified = false;
  389. Assert.AreEqual (false, textBox.Modified, "modified-2");
  390. textBox.Modified = true;
  391. Assert.AreEqual (true, textBox.Modified, "modified-2");
  392. textBox.Text = "TEXT";
  393. Assert.AreEqual (false, textBox.Modified, "modified-3");
  394. }
  395. void TextBox_Invalidated (object sender, InvalidateEventArgs e)
  396. {
  397. _invalidated++;
  398. }
  399. void TextBox_Paint (object sender, PaintEventArgs e)
  400. {
  401. _paint++;
  402. }
  403. void Reset ()
  404. {
  405. _invalidated = 0;
  406. _paint = 0;
  407. }
  408. }
  409. }