New test.
[mono.git] / mcs / class / Managed.Windows.Forms / Test / System.Windows.Forms / MdiFormTest.cs
1 //
2 // MdiFormTest.cs: Test cases for MDI Forms.
3 //
4 // Author:
5 //   Rolf Bjarne Kvinge (RKvinge@novell.com)
6 //
7 // (C) 2006 Novell, Inc. (http://www.novell.com)
8 //
9
10 using System;
11 using System.Drawing;
12 using System.Reflection;
13 using System.Windows.Forms;
14
15 using NUnit.Framework;
16
17 namespace MonoTests.System.Windows.Forms
18 {
19         [TestFixture]
20         public class MdiFormTest
21         {
22                 [Test]
23                 public void Text ()
24                 {
25                         Form main = null, child1 = null, child2 = null, child3 = null;
26
27                         main = new Form ();
28                         main.IsMdiContainer = true;
29                         main.Name = "main";
30                         main.Text = main.Name;
31                         main.Show();
32                         
33                         Assert.AreEqual ("main", main.Text, "#1");
34                         
35                         child1 = new Form ();
36                         child1.Name = "child1";
37                         child1.MdiParent = main;
38                         child1.Text = child1.Name;
39                         child1.WindowState = FormWindowState.Maximized;
40                         child1.Show ();
41                         
42                         Assert.AreEqual ("main - [child1]", main.Text, "#2");
43                         
44                         child2 = new Form ();
45                         child2.Name = "child2";
46                         child1.MdiParent = main;
47                         child2.Text = string.Empty;
48                         child2.WindowState = FormWindowState.Maximized;
49                         child2.Show();
50                         
51                         Assert.AreEqual ("main - [child1]", main.Text, "#3");
52                         
53                         child1.Activate();
54                         Assert.AreEqual ("main - [child1]", main.Text, "#4");
55                         
56                         child1.WindowState = FormWindowState.Minimized;
57                         Assert.AreEqual ("main", main.Text, "#5");
58                         
59                         child2.Activate ();
60                         Assert.AreEqual ("main", main.Text, "#6");
61                         
62                         child2.WindowState = FormWindowState.Maximized;
63                         Assert.AreEqual ("main", main.Text, "#7");
64
65                         child3 = new Form ();
66                         child3.Name = "child3";
67                         child3.MdiParent = main;
68                         child3.Text = child3.Name;
69                         child3.WindowState = FormWindowState.Maximized;
70                         child3.Show ();
71
72                         Assert.AreEqual ("main - [child3]", main.Text, "#8");
73                         child3.WindowState = FormWindowState.Normal;
74                         Assert.AreEqual ("main", main.Text, "#9");
75
76                         main.Text = string.Empty;
77                         child3.WindowState = FormWindowState.Maximized;
78                         Assert.AreEqual (" - [child3]", main.Text, "#10");
79
80                         child3.Text = string.Empty;
81                         Assert.AreEqual (string.Empty, main.Text, "#11");
82
83                         child3.Dispose ();
84                         child2.Dispose ();
85                         child1.Dispose ();
86                         main.Dispose ();
87                 }
88
89                 // Setting Text of the MDI containiner before setting IsMdiContainer to
90                 // true causes #2 to fail on Mono
91                 [Test]
92                 [Category ("NotWorking")]
93                 public void Text_MdiContainer ()
94                 {
95                         Form main = new Form ();
96                         main.ShowInTaskbar = false;
97                         main.Text = "main";
98                         main.IsMdiContainer = true;
99                         main.Show ();
100
101                         Assert.AreEqual ("main", main.Text, "#1");
102
103                         Form child = new Form ();
104                         child.Name = "child";
105                         child.MdiParent = main;
106                         child.Text = child.Name;
107                         child.WindowState = FormWindowState.Maximized;
108                         child.Show ();
109
110                         Assert.AreEqual ("main - [child]", main.Text, "#2");
111                 }
112
113                 [Test] // bug 80038
114                 [Category ("NotWorking")]
115                 public void Text_ChildClose ()
116                 {
117                         Form main = new Form ();
118                         main.ShowInTaskbar = false;
119                         main.IsMdiContainer = true;
120                         main.Text = "main";
121                         main.Show ();
122
123                         Assert.AreEqual ("main", main.Text, "#1");
124
125                         Form child = new Form ();
126                         child.Name = "child";
127                         child.MdiParent = main;
128                         child.Text = child.Name;
129                         child.WindowState = FormWindowState.Maximized;
130                         child.Show ();
131
132                         Assert.AreEqual ("main - [child]", main.Text, "#2");
133
134                         child.Close ();
135                         Assert.AreEqual ("main", main.Text, "#3");
136                 }
137
138                 // Setting WindowState to Maximized of a form, of which the handle is 
139                 // already created, does not make it ActiveMdiChild
140                 [Test]
141                 [Category ("NotWorking")]
142                 public void Text_Maximized ()
143                 {
144                         Form main = new Form ();
145                         main.IsMdiContainer = true;
146                         main.Name = "main";
147                         main.Text = main.Name;
148                         main.Show ();
149
150                         Assert.AreEqual ("main", main.Text, "#1");
151
152                         Form child1 = new Form ();
153                         child1.Name = "child1";
154                         child1.MdiParent = main;
155                         child1.Text = child1.Name;
156                         child1.WindowState = FormWindowState.Maximized;
157                         child1.Show ();
158
159                         Assert.AreEqual ("main - [child1]", main.Text, "#2");
160
161                         Form child2 = new Form ();
162                         child2.Name = "child2";
163                         child2.MdiParent = main;
164                         child2.Text = child2.Name;
165                         child2.WindowState = FormWindowState.Maximized;
166                         child2.Show ();
167
168                         Assert.AreEqual ("main - [child2]", main.Text, "#3");
169
170                         child1.WindowState = FormWindowState.Maximized;
171
172                         Assert.AreEqual ("main - [child1]", main.Text, "#4");
173                 }
174
175                 // Form.ActiveMdiChild should return null if handle is not yet created
176                 // Depends on fix for bug #80020
177                 [Test]
178                 [Category("NotWorking")]
179                 public void ActiveMdiChild ()
180                 {
181                         Form main, child1, child2;
182                         
183                         main = new Form ();
184                         main.IsMdiContainer = true;
185                         main.Name = "main";
186
187                         child1 = new Form ();
188                         child1.Name = "child1";
189                         child1.MdiParent = main;
190                         child1.WindowState = FormWindowState.Maximized;
191                         child1.Show ();
192                         
193                         child2 = new Form ();
194                         child2.Name = "child2";
195                         child2.MdiParent = main;
196                         child2.Show();
197                         
198                         Assert.IsNull (main.ActiveMdiChild, "#1");
199
200                         main.Show ();
201                         Assert.AreSame (child2, main.ActiveMdiChild, "#2");
202
203                         child1.WindowState = FormWindowState.Maximized;
204                         Assert.AreSame (child1, main.ActiveMdiChild, "#3");
205
206                         child2.WindowState = FormWindowState.Maximized;
207                         Assert.AreSame (child2, main.ActiveMdiChild, "#4");
208
209                         main.Visible = false;
210 #if NET_2_0
211                         Assert.IsNull (main.ActiveMdiChild, "#5");
212 #else\r
213                         Assert.AreSame (child2, main.ActiveMdiChild, "#5");
214 #endif
215
216                         child2.Dispose ();
217                         child1.Dispose ();
218                         main.Dispose ();
219                         main.Close();
220                 }
221
222                 [Test]
223                 public void MdiChild_WindowState1 ()
224                 {
225                         Form main = null, child1 = null, child2 = null;
226                         try {
227                                 
228                                 main = new Form ();
229                                 main.IsMdiContainer = true;
230                                 main.Name = "main";
231
232                                 child1 = new Form ();
233                                 child1.Name = "child1";
234                                 child1.MdiParent = main;
235                                 child1.WindowState = FormWindowState.Maximized;
236                                 child1.Show ();
237                                 
238                                 child2 = new Form ();
239                                 child2.Name = "child2";
240                                 child2.MdiParent = main;
241                                 child2.Show();
242                                 
243                                 Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#1");
244                                 Assert.AreEqual (FormWindowState.Normal, child2.WindowState, "#2");
245                                 main.Show ();
246                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#3");
247                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#4");
248                         } finally {
249                                 child2.Dispose ();
250                                 child1.Dispose ();
251                                 main.Dispose ();
252                                 main.Close();
253                         }
254                 }
255
256                 [Test]
257                 public void MdiChild_WindowState2 ()
258                 {
259                         Form main = null, child1 = null, child2 = null;
260                         try{
261                                 
262                                 main = new Form ();
263                                 main.Name = "main";
264                                 main.IsMdiContainer = true;
265                                 main.Show ();
266                                 
267                                 child1 = new Form ();
268                                 child1.Name = "child1";
269                                 child1.MdiParent = main;
270                                 child1.WindowState = FormWindowState.Maximized;
271                                 child1.Show ();
272                                 
273                                 child2 = new Form ();
274                                 child2.Name = "child2";
275                                 child2.MdiParent = main;
276                                 child2.Show();
277
278                                 
279                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#1");
280                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
281                         
282                         } finally {
283                                 child2.Dispose ();
284                                 child1.Dispose ();
285                                 main.Dispose ();
286                                 main.Close();
287                         }
288                 }
289
290                 [Test]
291                 public void MdiChild_WindowState3 ()
292                 {
293                         Form main = null, child1 = null, child2 = null;
294                         try {                           
295                                 main = new Form ();
296                                 main.IsMdiContainer = true;
297                                 main.Show ();
298                                 
299                                 child1 = new Form ();
300                                 child1.MdiParent = main;
301                                 child1.Show ();
302                                 
303                                 child2 = new Form ();
304                                 child2.MdiParent = main;
305                                 child2.WindowState = FormWindowState.Maximized;
306                                 child2.Show();
307                                 
308                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#1");
309                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
310                                 
311                         } finally {
312                                 child2.Dispose ();
313                                 child1.Dispose ();
314                                 main.Dispose ();
315                                 main.Close();
316                         }
317                 }
318
319                 [Test]
320                 public void MdiChild_WindowState4 ()
321                 {
322                         Form main = null, child1 = null, child2 = null;
323                         try {                           
324                                 main = new Form ();
325                                 main.IsMdiContainer = true;
326                                 main.Show ();
327                                 
328                                 child1 = new Form ();
329                                 child1.MdiParent = main;
330                                 child1.WindowState = FormWindowState.Maximized;
331                                 child1.Show ();
332                                 
333                                 child2 = new Form ();
334                                 child2.MdiParent = main;
335                                 child2.WindowState = FormWindowState.Maximized;
336
337                                 Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#1");
338                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
339
340                                 child2.Show();
341                                 
342                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#3");
343                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#4");
344                                 
345                                 child2.WindowState = FormWindowState.Normal;
346
347                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#5");
348                                 Assert.AreEqual (FormWindowState.Normal, child2.WindowState, "#6");
349                         } finally {
350                                 child2.Dispose ();
351                                 child1.Dispose ();
352                                 main.Dispose ();
353                                 main.Close();
354                         }
355                 }
356
357                 [Test]
358                 public void MdiChild_WindowState5 ()
359                 {
360                         Form main = null, child1 = null, child2 = null;
361                         try {                           
362                                 main = new Form ();
363                                 main.Name = "main";
364                                 main.IsMdiContainer = true;
365                                 main.Show ();
366                                 
367                                 child1 = new Form ();
368                                 child1.Name = "child1";
369                                 child1.MdiParent = main;
370                                 child1.WindowState = FormWindowState.Maximized;
371                                 child1.Show ();
372                                 
373                                 child2 = new Form ();
374                                 child2.Name = "child2";
375                                 child2.MdiParent = main;
376                                 child2.WindowState = FormWindowState.Maximized;
377                                 
378                                 Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#1");
379                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
380
381                                 child2.Show();
382
383                                 Assert.AreEqual (FormWindowState.Normal, child1.WindowState, "#3");
384                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#4");
385
386                                 child1.Activate ();
387
388                                 Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#5");
389                                 Assert.AreEqual (FormWindowState.Normal, child2.WindowState, "#6");
390                         } finally {
391                                 child2.Dispose ();
392                                 child1.Dispose ();
393                                 main.Dispose ();
394                                 main.Close();
395                         }
396                 }
397
398                 [Test]
399                 public void MdiChild_WindowState6 ()
400                 {
401                         Form main = null, child1 = null, child2 = null;
402                         try {
403                                 
404                                 main = new Form ();
405                                 main.Name = "main";
406                                 main.IsMdiContainer = true;
407                                 main.Show ();
408                                 
409                                 child1 = new Form ();
410                                 child1.Name = "child1";
411                                 child1.MdiParent = main;
412                                 child1.WindowState = FormWindowState.Minimized;
413                                 child1.Show ();
414                                 
415                                 child2 = new Form ();
416                                 child2.Name = "child2";
417                                 child2.MdiParent = main;
418                                 child2.WindowState = FormWindowState.Maximized;
419
420                                 Assert.AreEqual (FormWindowState.Minimized, child1.WindowState, "#1");
421                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#2");
422
423                                 child2.Show();
424                                 
425                                 Assert.AreEqual (FormWindowState.Minimized, child1.WindowState, "#3");
426                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#4");
427                                 
428                                 child1.Activate ();
429
430                                 Assert.AreEqual (FormWindowState.Maximized, child1.WindowState, "#5");
431                                 Assert.AreEqual (FormWindowState.Normal, child2.WindowState, "#6");
432                                 
433                                 child2.Activate ();
434
435                                 Assert.AreEqual (FormWindowState.Minimized, child1.WindowState, "#7");
436                                 Assert.AreEqual (FormWindowState.Maximized, child2.WindowState, "#8");
437                         } finally {
438                                 child2.Dispose ();
439                                 child1.Dispose ();
440                                 main.Dispose ();
441                                 main.Close();
442                         }
443                 }
444         }
445 }