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