2007-03-28 Igor Zelmanovich <igorz@mainsoft.com>
[mono.git] / mcs / class / Managed.Windows.Forms / Test / System.Windows.Forms / MonthCalendarTest.cs
1 //
2 // MonthCalendarTest.cs: Test case for MonthCalendar
3 // 
4 // Authors:
5 //   Ritvik Mayank (mritvik@novell.com)
6 //
7 // (C) 2005 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 MonthCalendarPropertiesTest : MonthCalendar
21         {
22                 private bool clickRaised;
23                 private bool doubleClickRaised;
24
25                 [SetUp]
26                 public void SetUp ()
27                 {
28                         clickRaised = false;
29                         doubleClickRaised = false;
30                 }
31
32                 [Test]
33                 public void ClickEventTest ()
34                 {
35                         Click += new EventHandler (OnClickHandler);
36                         DoubleClick += new EventHandler (OnDoubleClickHandler);
37                         OnClick (EventArgs.Empty);
38                         OnDoubleClick (EventArgs.Empty);
39                         
40                         Assert.IsTrue (clickRaised, "Click event not raised");
41                         Assert.IsTrue (doubleClickRaised, "DoubleClick event not raised");
42                 }
43
44                 void OnDoubleClickHandler (object sender, EventArgs e)
45                 {
46                         doubleClickRaised = true;
47                 }
48
49                 void OnClickHandler (object sender, EventArgs e)
50                 {
51                         clickRaised = true;
52                 }
53                 
54 #if NET_2_0
55                 [Test]
56                 public void DefaultMarginTest ()
57                 {
58                         Assert.AreEqual (DefaultMargin.All, 9, "#01");
59                 }
60 #endif
61         }
62
63         [TestFixture]
64         public class MonthCalendarTest
65         {
66                 [Test]
67                 public void MonthCalendarPropertyTest ()
68                 {
69                         Form myfrm = new Form ();
70                         myfrm.ShowInTaskbar = false;
71                         MonthCalendar myMonthCal1 = new MonthCalendar ();
72                         //MonthCalendar myMonthCal2 = new MonthCalendar ();
73                         myMonthCal1.Name = "MonthCendar";
74                         myMonthCal1.TabIndex = 1;
75                         //DateTime myDateTime = new DateTime ();
76                         
77                         // A
78                         Assert.IsNotNull (myMonthCal1.AnnuallyBoldedDates, "#A-1");
79                         myMonthCal1.AddAnnuallyBoldedDate (new DateTime (2005, 09, 01));
80                         Assert.IsNotNull (myMonthCal1.AnnuallyBoldedDates, "#A0");
81                         Assert.AreEqual (new DateTime (2005, 09, 01), myMonthCal1.AnnuallyBoldedDates.GetValue (0), "#A1");
82                 
83                         // B 
84                         Assert.AreEqual ("Window", myMonthCal1.BackColor.Name, "#B1");
85                         myMonthCal1.AddBoldedDate (new DateTime (2005, 09, 01));
86                         Assert.AreEqual (new DateTime (2005, 09, 01), myMonthCal1.BoldedDates.GetValue (0), "#B2");
87                                 
88                         // C
89                         Assert.AreEqual (1, myMonthCal1.CalendarDimensions.Height, "#C1");
90                         Assert.AreEqual (1, myMonthCal1.CalendarDimensions.Width, "#C2");
91                         Assert.AreEqual (false, myMonthCal1.CalendarDimensions.IsEmpty, "#C3");
92
93                         // F
94                         Assert.AreEqual (Day.Default, myMonthCal1.FirstDayOfWeek, "#F1");
95                         myMonthCal1.FirstDayOfWeek = Day.Sunday;
96                         Assert.AreEqual (Day.Sunday, myMonthCal1.FirstDayOfWeek, "#F2");
97                         Assert.AreEqual ("WindowText", myMonthCal1.ForeColor.Name, "#F3");
98
99                         // M 
100                         Assert.AreEqual (new DateTime (9998,12,31), myMonthCal1.MaxDate, "#M1");
101                         Assert.AreEqual (7, myMonthCal1.MaxSelectionCount, "#M2");
102                         Assert.AreEqual (new DateTime (1753,1,1), myMonthCal1.MinDate, "#M3");
103                         myMonthCal1.AddMonthlyBoldedDate (new DateTime (2005, 09, 01));
104                         Assert.AreEqual (new DateTime(2005, 09, 01), myMonthCal1.MonthlyBoldedDates.GetValue (0), "#M4");
105                         
106                         // S 
107                         Assert.AreEqual (0, myMonthCal1.ScrollChange, "#S1");
108                         myMonthCal1.SelectionStart = new DateTime (2005,09,02);
109                         myMonthCal1.SelectionEnd = new DateTime (2005,09,03);
110                         Assert.AreEqual (new DateTime (2005,09,03), myMonthCal1.SelectionEnd, "#S2");
111                         //Assert.AreEqual (new SelectionRange (new DateTime(2005,09,02), new DateTime(2005,09,03)), myMonthCal1.SelectionRange, "#S3");
112                         Assert.AreEqual (new DateTime (2005,09,02), myMonthCal1.SelectionStart, "#S4");
113                         Assert.AreEqual (true, myMonthCal1.ShowToday, "#S5");
114                         Assert.AreEqual (true, myMonthCal1.ShowTodayCircle, "#S6");
115                         Assert.AreEqual (false, myMonthCal1.ShowWeekNumbers, "#S7");
116                         // Font dependent. // Assert.AreEqual (153, myMonthCal1.SingleMonthSize.Height, "#S8a");
117                         // Font dependent. // Assert.AreEqual (176, myMonthCal1.SingleMonthSize.Width, "#S8b");
118                         Assert.AreEqual (null, myMonthCal1.Site, "#S9");
119                         // T
120                         Assert.AreEqual ("ActiveCaption", myMonthCal1.TitleBackColor.Name, "#T1");
121                         Assert.AreEqual ("ActiveCaptionText", myMonthCal1.TitleForeColor.Name, "#T2");
122                         Assert.AreEqual (DateTime.Today, myMonthCal1.TodayDate, "#T3");
123                         Assert.AreEqual (false, myMonthCal1.TodayDateSet, "#T4");
124                         Assert.AreEqual ("GrayText", myMonthCal1.TrailingForeColor.Name, "#T5");
125
126                         myfrm.Dispose ();
127                 }
128         
129                 [Test]
130                 public void MonthCalMaxSelectionCountException ()
131                 {
132                         MonthCalendar myMonthCal1 = new MonthCalendar ();
133
134                         try {
135                                 myMonthCal1.MaxSelectionCount = 0; // value is less than 1
136                                 Assert.Fail ("#A1");
137 #if NET_2_0
138                         } catch (ArgumentOutOfRangeException ex) {
139                                 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
140                                 Assert.IsNotNull (ex.Message, "#A3");
141                                 Assert.IsNotNull (ex.ParamName, "#A4");
142                                 Assert.AreEqual ("MaxSelectionCount", ex.ParamName, "#A5");
143                                 Assert.IsNull (ex.InnerException, "#A6");
144                         }
145 #else
146                         } catch (ArgumentException ex) {
147                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
148                                 Assert.IsNotNull (ex.Message, "#A3");
149                                 Assert.IsNull (ex.ParamName, "#A4");
150                                 Assert.IsNull (ex.InnerException, "#A5");
151                         }
152 #endif
153                 }
154
155                 [Test]
156                 public void MonthCalMaxDateException ()
157                 {
158                         MonthCalendar myMonthCal1 = new MonthCalendar ();
159
160                         try {
161                                 myMonthCal1.MaxDate = new DateTime (1752, 1, 1, 0, 0, 0, 0); // value is less than min date (01/01/1753)
162                                 Assert.Fail ("#A1");
163 #if NET_2_0
164                         } catch (ArgumentOutOfRangeException ex) {
165                                 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
166                                 Assert.IsNotNull (ex.Message, "#A3");
167                                 Assert.IsNotNull (ex.ParamName, "#A4");
168                                 Assert.AreEqual ("MaxDate", ex.ParamName, "#A5");
169                                 Assert.IsNull (ex.InnerException, "#A6");
170                         }
171 #else
172                         } catch (ArgumentException ex) {
173                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
174                                 Assert.IsNotNull (ex.Message, "#A3");
175                                 Assert.IsNull (ex.ParamName, "#A4");
176                                 Assert.IsNull (ex.InnerException, "#A5");
177                         }
178 #endif
179                 }
180
181                 [Test]
182                 public void MonthCalMinDateException ()
183                 {
184                         MonthCalendar myMonthCal1 = new MonthCalendar ();
185
186                         try {
187                                 myMonthCal1.MinDate = new DateTime (1752, 1, 1, 0, 0, 0, 0); // Date earlier than 01/01/1753
188                                 Assert.Fail ("#A1");
189 #if NET_2_0
190                         } catch (ArgumentOutOfRangeException ex) {
191                                 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
192                                 Assert.IsNotNull (ex.Message, "#A3");
193                                 Assert.IsNotNull (ex.ParamName, "#A4");
194                                 Assert.AreEqual ("MinDate", ex.ParamName, "#A5");
195                                 Assert.IsNull (ex.InnerException, "#A6");
196                         }
197 #else
198                         } catch (ArgumentException ex) {
199                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
200                                 Assert.IsNotNull (ex.Message, "#A3");
201                                 Assert.IsNull (ex.ParamName, "#A4");
202                                 Assert.IsNull (ex.InnerException, "#A5");
203                         }
204 #endif
205
206                         try {
207                                 myMonthCal1.MinDate = new DateTime (9999, 12, 31, 0, 0, 0, 0); // Date greater than max date
208                                 Assert.Fail ("#B1");
209 #if NET_2_0
210                         } catch (ArgumentOutOfRangeException ex) {
211                                 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
212                                 Assert.IsNotNull (ex.Message, "#B3");
213                                 Assert.IsNotNull (ex.ParamName, "#B4");
214                                 Assert.AreEqual ("MinDate", ex.ParamName, "#B5");
215                                 Assert.IsNull (ex.InnerException, "#B6");
216                         }
217 #else
218                         } catch (ArgumentException ex) {
219                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
220                                 Assert.IsNotNull (ex.Message, "#B3");
221                                 Assert.IsNull (ex.ParamName, "#B4");
222                                 Assert.IsNull (ex.InnerException, "#B5");
223                         }
224 #endif
225                 }
226
227                 [Test]
228                 [ExpectedException (typeof (ArgumentException))]
229                 public void MonthCalSelectRangeException ()
230                 {
231                         MonthCalendar myMonthCal1 = new MonthCalendar ();
232                         myMonthCal1.SelectionRange = new SelectionRange (new DateTime (1752, 01, 01), new DateTime (1752, 01, 02));
233                 }
234
235                 [Test]
236                 [ExpectedException (typeof (ArgumentException))]
237                 public void MonthCalSelectRangeException2 ()
238                 {
239                         MonthCalendar myMonthCal1 = new MonthCalendar ();
240                         myMonthCal1.SelectionRange = new SelectionRange (new DateTime (9999, 12, 30), new DateTime (9999, 12, 31));
241                 }
242
243                 [Test]
244                 public void AddAnnuallyBoldedDateTest ()
245                 {
246                         Form myForm = new Form ();
247                         myForm.ShowInTaskbar = false;
248                         MonthCalendar myMonthCal = new MonthCalendar ();
249                         myMonthCal.AddAnnuallyBoldedDate (new DateTime (2005, 09, 01));
250                         myForm.Controls.Add (myMonthCal);
251                         Assert.AreEqual (new DateTime (2005, 09, 01), myMonthCal.AnnuallyBoldedDates.GetValue (0), "#add1");
252
253                         DateTime dt = new DateTime (2006, 02, 03, 04, 05, 06, 07);
254                         DateTime dt2 = new DateTime (2006, 02, 03);
255
256                         myMonthCal.RemoveAllAnnuallyBoldedDates ();
257                         myMonthCal.AddAnnuallyBoldedDate (dt);
258                         Assert.AreEqual (dt, myMonthCal.AnnuallyBoldedDates [0], "#add2");
259
260                         myMonthCal.AddAnnuallyBoldedDate (dt2);
261                         Assert.AreEqual (dt2, myMonthCal.AnnuallyBoldedDates [1], "#add3");
262
263                         myForm.Dispose ();
264                 }
265         
266                 [Test]
267                 public void RemoveAnnuallyBoldedDateTest ()
268                 {
269                         MonthCalendar myMonthCal = new MonthCalendar ();
270
271                         DateTime[] dts = new DateTime [10];
272                         dts[0] = new DateTime (2001, 02, 03, 04, 05, 06, 07); // base datetime
273                         dts[1] = new DateTime (2001, 02, 03); // only date 
274                         dts[2] = new DateTime (2002, 03, 04); // only date, different
275                         dts[3] = new DateTime (2002, 02, 03, 04, 05, 06, 07); // different year
276                         dts[4] = new DateTime (2001, 03, 03, 04, 05, 06, 07); // different month
277                         dts[5] = new DateTime (2001, 02, 04, 04, 05, 06, 07); // etc...
278                         dts[6] = new DateTime (2001, 02, 03, 05, 05, 06, 07);
279                         dts[7] = new DateTime (2001, 02, 03, 04, 06, 06, 07);
280                         dts[8] = new DateTime (2001, 02, 03, 04, 05, 07, 07);
281                         dts[9] = new DateTime (2001, 02, 03, 04, 05, 06, 08);
282
283                         for (int i = 0; i < dts.Length; i++) {
284                                 for (int j = 0; j < dts.Length; j++) {
285                                         myMonthCal.RemoveAllAnnuallyBoldedDates ();
286                                         myMonthCal.AddAnnuallyBoldedDate (dts [j]);
287                                         myMonthCal.RemoveAnnuallyBoldedDate (dts [i]);
288                                         if (dts [j].Month == dts [i].Month && dts [j].Day == dts [i].Day)
289                                                 Assert.AreEqual (0, myMonthCal.AnnuallyBoldedDates.Length, "#remove0" + i.ToString () + ", " + j.ToString ());
290                                         else
291                                                 Assert.AreEqual (1, myMonthCal.AnnuallyBoldedDates.Length, "#remove0" + i.ToString () + ", " + j.ToString ());
292                                 }
293                         }
294                         
295                         for (int i = 0; i < dts.Length; i++) 
296                         {
297                                 myMonthCal.AnnuallyBoldedDates = dts;
298                                 myMonthCal.RemoveAnnuallyBoldedDate (dts [i]);
299                                 Assert.AreEqual (9, myMonthCal.AnnuallyBoldedDates.Length, "#remove1" + i.ToString ());
300                         }
301                 }
302
303                 [Test]
304                 public void RemoveMonthlyBoldedDateTest ()
305                 {
306                         MonthCalendar myMonthCal = new MonthCalendar ();
307
308                         DateTime[] dts = new DateTime [10];
309                         dts[0] = new DateTime (2001, 02, 03, 04, 05, 06, 07); // base datetime
310                         dts[1] = new DateTime (2001, 02, 03); // only date 
311                         dts[2] = new DateTime (2002, 03, 04); // only date, different
312                         dts[3] = new DateTime (2002, 02, 03, 04, 05, 06, 07); // different year
313                         dts[4] = new DateTime (2001, 03, 03, 04, 05, 06, 07); // different month
314                         dts[5] = new DateTime (2001, 02, 04, 04, 05, 06, 07); // etc...
315                         dts[6] = new DateTime (2001, 02, 03, 05, 05, 06, 07);
316                         dts[7] = new DateTime (2001, 02, 03, 04, 06, 06, 07);
317                         dts[8] = new DateTime (2001, 02, 03, 04, 05, 07, 07);
318                         dts[9] = new DateTime (2001, 02, 03, 04, 05, 06, 08);
319
320                         for (int i = 0; i < dts.Length; i++) 
321                         {
322                                 for (int j = 0; j < dts.Length; j++) 
323                                 {
324                                         myMonthCal.RemoveAllMonthlyBoldedDates ();
325                                         myMonthCal.AddMonthlyBoldedDate (dts [j]);
326                                         myMonthCal.RemoveMonthlyBoldedDate (dts [i]);
327                                         if (dts [j].Month == dts [i].Month && dts [j].Day == dts [i].Day)
328                                                 Assert.AreEqual (0, myMonthCal.MonthlyBoldedDates.Length, "#remove0" + i.ToString () + ", " + j.ToString ());
329                                         else
330                                                 Assert.AreEqual (1, myMonthCal.MonthlyBoldedDates.Length, "#remove0" + i.ToString () + ", " + j.ToString ());
331                                 }
332                         }
333                         
334                         for (int i = 0; i < dts.Length; i++) 
335                         {
336                                 myMonthCal.MonthlyBoldedDates = dts;
337                                 myMonthCal.RemoveMonthlyBoldedDate (dts [i]);
338                                 Assert.AreEqual (9, myMonthCal.MonthlyBoldedDates.Length, "#remove1" + i.ToString ());
339                         }
340                 }
341
342                 [Test]
343                 public void RemoveBoldedDateTest ()
344                 {
345                         MonthCalendar myMonthCal = new MonthCalendar ();
346
347                         DateTime[] dts = new DateTime [10];
348                         dts[0] = new DateTime (2001, 02, 03, 04, 05, 06, 07); // base datetime
349                         dts[1] = new DateTime (2001, 02, 03); // only date 
350                         dts[2] = new DateTime (2002, 03, 04); // only date, different
351                         dts[3] = new DateTime (2002, 02, 03, 04, 05, 06, 07); // different year
352                         dts[4] = new DateTime (2001, 03, 03, 04, 05, 06, 07); // different month
353                         dts[5] = new DateTime (2001, 02, 04, 04, 05, 06, 07); // etc...
354                         dts[6] = new DateTime (2001, 02, 03, 05, 05, 06, 07);
355                         dts[7] = new DateTime (2001, 02, 03, 04, 06, 06, 07);
356                         dts[8] = new DateTime (2001, 02, 03, 04, 05, 07, 07);
357                         dts[9] = new DateTime (2001, 02, 03, 04, 05, 06, 08);
358
359                         for (int i = 0; i < dts.Length; i++) 
360                         {
361                                 for (int j = 0; j < dts.Length; j++) 
362                                 {
363                                         myMonthCal.RemoveAllBoldedDates ();
364                                         myMonthCal.AddBoldedDate (dts [j]);
365                                         myMonthCal.RemoveBoldedDate (dts [i]);
366                                         if (dts [j].Month == dts [i].Month && dts [j].Day == dts [i].Day && dts[j].Year == dts[i].Year)
367                                                 Assert.AreEqual (0, myMonthCal.BoldedDates.Length, "#remove0" + i.ToString () + ", " + j.ToString ());
368                                         else
369                                                 Assert.AreEqual (1, myMonthCal.BoldedDates.Length, "#remove0" + i.ToString () + ", " + j.ToString ());
370                                 }
371                         }
372                         
373                         for (int i = 0; i < dts.Length; i++) 
374                         {
375                                 myMonthCal.BoldedDates = dts;
376                                 myMonthCal.RemoveBoldedDate (dts [i]);
377                                 Assert.AreEqual (9, myMonthCal.BoldedDates.Length, "#remove1" + i.ToString ());
378                         }
379                 }
380
381                 [Test]
382                 public void AddBoldedDateTest ()
383                 {
384                         Form myForm = new Form ();
385                         myForm.ShowInTaskbar = false;
386                         MonthCalendar myMonthCal = new MonthCalendar ();
387                         myMonthCal.AddBoldedDate (new DateTime (2005, 09, 02));
388                         myForm.Controls.Add (myMonthCal);
389                         Assert.AreEqual (new DateTime (2005, 09, 02), myMonthCal.BoldedDates.GetValue (0), "#add2");
390                         myForm.Dispose ();
391                 }
392
393                 [Test]
394                 public void AddMonthlyBoldedDateTest ()
395                 {
396                         Form myForm = new Form ();
397                         myForm.ShowInTaskbar = false;
398                         MonthCalendar myMonthCal = new MonthCalendar ();
399                         myMonthCal.AddMonthlyBoldedDate (new DateTime (2005, 09, 03));
400                         myForm.Controls.Add (myMonthCal);
401                         Assert.AreEqual (new DateTime (2005, 09, 03), myMonthCal.MonthlyBoldedDates.GetValue (0), "#add2");
402                         myForm.Dispose ();
403                 }
404                 
405                 [Test]
406                 public void GetDisplayRangeTest ()
407                 {
408                         Form myForm = new Form ();
409                         myForm.ShowInTaskbar = false;
410                         MonthCalendar myMonthCal = new MonthCalendar ();
411                         myForm.Controls.Add (myMonthCal);
412                         SelectionRange mySelRange = new SelectionRange ();
413                         mySelRange.Start = new DateTime (DateTime.Now.Year, DateTime.Now.Month, 1);
414                         mySelRange.End = mySelRange.Start.AddMonths (1).AddDays (-1);
415                         Assert.AreEqual (mySelRange.Start, myMonthCal.GetDisplayRange (true).Start, "#Get1");
416                         Assert.AreEqual (mySelRange.End, myMonthCal.GetDisplayRange (true).End, "#Get22");
417                         myForm.Dispose ();
418                 }
419                 
420                 [Test]
421                 public void HitTest ()
422                 {
423                         Form myForm = new Form ();
424                         myForm.ShowInTaskbar = false;
425                         MonthCalendar myMonthCal = new MonthCalendar ();
426                         myForm.Controls.Add (myMonthCal);
427                         MonthCalendar.HitTestInfo hitTest = myMonthCal.HitTest (10, 10);
428                         Assert.AreEqual (MonthCalendar.HitArea.PrevMonthButton, hitTest.HitArea, "#Hit1");
429                         Assert.AreEqual (new DateTime (01, 01, 01), hitTest.Time, "#Hit2");
430                 }
431
432                 [Test]
433                 public void DateChangedEventTest ()
434                 {
435                         MonthCalendar myCalendar = new MonthCalendar ();
436                         
437                         myCalendar.Tag = false;
438                         myCalendar.DateChanged += new DateRangeEventHandler (DateChangedEventHandler);
439                         myCalendar.SetDate (DateTime.Today.AddDays (72));
440                         Assert.AreEqual (true, (bool) myCalendar.Tag, "#01");
441                 }
442
443                 void DateChangedEventHandler (object sender, DateRangeEventArgs e)
444                 {
445                         ((Control) sender).Tag = true;
446                 }
447         }
448 }