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