Merge pull request #1542 from ninjarobot/UriTemplateMatchException
[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                         [ExpectedException (typeof (ArgumentOutOfRangeException))]
59                         public void EndBeforeStart ()
60                         {
61                                 if (Environment.OSVersion.Platform != PlatformID.Unix)
62                                         throw new ArgumentOutOfRangeException ();;
63                                 DateTime dateStart = new DateTime (2007,01,01);
64                                 DateTime dateEnd = new DateTime (2006,01,01);
65                                 TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
66                                 TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
67                                 TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (1,0,0), daylightTransitionStart, daylightTransitionEnd);
68                         }
69                 
70                         [Test]
71                         [ExpectedException (typeof (ArgumentOutOfRangeException))]
72                         public void DeltaOutOfRange ()
73                         {
74                                 DateTime dateStart = new DateTime (2007,01,01);
75                                 DateTime dateEnd = new DateTime (2008,01,01);
76                                 TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
77                                 TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
78                                 TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (14,1,0), daylightTransitionStart, daylightTransitionEnd);
79                         }
80                 
81                         [Test]
82                         [ExpectedException (typeof (ArgumentOutOfRangeException))]
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                                 TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (55), daylightTransitionStart, daylightTransitionEnd);
92                         }
93                 }
94         
95                 [TestFixture]
96                 public class NonExceptional
97                 {
98                         [Test]
99                         public void Serialization_Deserialization ()
100                         {
101                                 TimeZoneInfo.TransitionTime start = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,1,0,0), 3, 5, DayOfWeek.Sunday);
102                                 TimeZoneInfo.TransitionTime end = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,2,0,0), 10, 5, DayOfWeek.Sunday);
103                                 TimeZoneInfo.AdjustmentRule rule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1,0,0), start, end);
104                                 MemoryStream stream = new MemoryStream ();
105                                 BinaryFormatter formatter = new BinaryFormatter ();
106                                 formatter.Serialize (stream, rule);
107                                 stream.Position = 0;
108                                 TimeZoneInfo.AdjustmentRule deserialized = (TimeZoneInfo.AdjustmentRule) formatter.Deserialize (stream);
109                                 stream.Close ();
110                                 stream.Dispose ();
111
112                                 Assert.IsTrue (rule.Equals (deserialized));
113                         }
114                 }
115         }       
116 }