62ae67cfc814755576e69e8a862864bc5bc71e36
[mono.git] / mcs / class / corlib / Test / System / TimeZoneInfo.AdjustmentRuleTest.cs
1 using System;
2 using System.IO;
3 using System.Runtime.Serialization.Formatters.Binary;
4 using NUnit.Framework;
5
6 namespace MonoTests.System
7 {
8         public class TimeZoneInfo_AdjustmentRuleTest
9         {       
10                 [TestFixture]
11                 public class CreateAdjustmentRuleException
12                 {
13                         [Test]
14                         [ExpectedException (typeof (ArgumentException))]
15                         public void DateTimeKindNotUnspecified ()
16                         {
17                                 DateTime dateStart = new DateTime (2007,01,01, 0,0,0,DateTimeKind.Utc);
18                                 DateTime dateEnd = new DateTime (2008,01,01);
19                                 TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
20                                 TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
21                                 TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (1,0,0), daylightTransitionStart, daylightTransitionEnd);
22                         }
23                 
24                         [Test]
25                         [ExpectedException (typeof (ArgumentException))]
26                         public void TransitionEndEqualStart ()
27                         {
28                                 DateTime dateStart = new DateTime (2007,01,01);
29                                 DateTime dateEnd = new DateTime (2008,01,01);
30                                 TimeZoneInfo.TransitionTime daylightTransition = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
31                                 TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (1,0,0), daylightTransition, daylightTransition);
32                         }
33                 
34                         [Test]
35                         [ExpectedException (typeof (ArgumentException))]
36                         public void DateIncludesTimeOfDay ()
37                         {
38                                 DateTime dateStart = new DateTime (2007,01,01, 0,1,0);
39                                 DateTime dateEnd = new DateTime (2008,01,01);
40                                 TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
41                                 TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
42                                 TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (1,0,0), daylightTransitionStart, daylightTransitionEnd);
43                         }
44                 
45                         [Test]
46                         public void DatesMaxMinValid ()
47                         {
48                                 try {
49                                         TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
50                                         TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
51                                         TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1,0,0), daylightTransitionStart, daylightTransitionEnd);
52                                 } catch {
53                                         Assert.Fail ("DateTime.MinValue and MaxValue are not valid...");
54                                 }
55                         }
56                 
57                         [Test]
58                         public void EndBeforeStart ()
59                         {
60                                 DateTime dateStart = new DateTime (2007,01,01);
61                                 DateTime dateEnd = new DateTime (2006,01,01);
62                                 TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
63                                 TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
64                                 try {
65                                         TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (1,0,0), daylightTransitionStart, daylightTransitionEnd);
66                                         Assert.Fail ();
67                                 } catch (ArgumentException) {
68                                 }
69                         }
70                 
71                         [Test]
72                         [ExpectedException (typeof (ArgumentOutOfRangeException))]
73                         public void DeltaOutOfRange ()
74                         {
75                                 DateTime dateStart = new DateTime (2007,01,01);
76                                 DateTime dateEnd = new DateTime (2008,01,01);
77                                 TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
78                                 TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
79                                 TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (14,1,0), daylightTransitionStart, daylightTransitionEnd);
80                         }
81                 
82                         [Test]
83                         public void DeltaNotInSeconds ()
84                         {
85                                 if (Environment.OSVersion.Platform != PlatformID.Unix)
86                                         throw new ArgumentOutOfRangeException ();;
87                                 DateTime dateStart = new DateTime (2007,01,01);
88                                 DateTime dateEnd = new DateTime (2008,01,01);
89                                 TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
90                                 TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
91                                 try {
92                                         TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (55), daylightTransitionStart, daylightTransitionEnd);
93                                         Assert.Fail ();
94                                 } catch (ArgumentException) {
95                                 }
96                         }
97                 }
98         
99                 [TestFixture]
100                 public class NonExceptional
101                 {
102                         [Test]
103                         public void Serialization_Deserialization ()
104                         {
105                                 TimeZoneInfo.TransitionTime start = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,1,0,0), 3, 5, DayOfWeek.Sunday);
106                                 TimeZoneInfo.TransitionTime end = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,2,0,0), 10, 5, DayOfWeek.Sunday);
107                                 TimeZoneInfo.AdjustmentRule rule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1,0,0), start, end);
108                                 MemoryStream stream = new MemoryStream ();
109                                 BinaryFormatter formatter = new BinaryFormatter ();
110                                 formatter.Serialize (stream, rule);
111                                 stream.Position = 0;
112                                 TimeZoneInfo.AdjustmentRule deserialized = (TimeZoneInfo.AdjustmentRule) formatter.Deserialize (stream);
113                                 stream.Close ();
114                                 stream.Dispose ();
115
116                                 Assert.IsTrue (rule.Equals (deserialized));
117                         }
118                 }
119         }       
120 }