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