Merge pull request #5714 from alexischr/update_bockbuild
[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                                 DateTime dateStart = new DateTime (2007,01,01);
86                                 DateTime dateEnd = new DateTime (2008,01,01);
87                                 TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
88                                 TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
89                                 try {
90                                         TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (55), daylightTransitionStart, daylightTransitionEnd);
91                                         Assert.Fail ();
92                                 } catch (ArgumentException) {
93                                 }
94                         }
95                 }
96         
97                 [TestFixture]
98                 public class NonExceptional
99                 {
100                         [Test]
101                         public void Serialization_Deserialization ()
102                         {
103                                 TimeZoneInfo.TransitionTime start = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,1,0,0), 3, 5, DayOfWeek.Sunday);
104                                 TimeZoneInfo.TransitionTime end = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,2,0,0), 10, 5, DayOfWeek.Sunday);
105                                 TimeZoneInfo.AdjustmentRule rule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1,0,0), start, end);
106                                 MemoryStream stream = new MemoryStream ();
107                                 BinaryFormatter formatter = new BinaryFormatter ();
108                                 formatter.Serialize (stream, rule);
109                                 stream.Position = 0;
110                                 TimeZoneInfo.AdjustmentRule deserialized = (TimeZoneInfo.AdjustmentRule) formatter.Deserialize (stream);
111                                 stream.Close ();
112                                 stream.Dispose ();
113
114                                 Assert.IsTrue (rule.Equals (deserialized));
115                         }
116                 }
117         }       
118 }