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))] DateTimeKindNotUnspecified()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))] TransitionEndEqualStart()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))] DateIncludesTimeOfDay()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] DatesMaxMinValid()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] EndBeforeStart()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))] DeltaOutOfRange()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] DeltaNotInSeconds()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] Serialization_Deserialization()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 } 119