TimeZoneInfo.AdjustmentRuleTest.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. using System;
  2. using System.IO;
  3. using System.Runtime.Serialization.Formatters.Binary;
  4. using NUnit.Framework;
  5. #if NET_2_0
  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. [Test]
  24. [ExpectedException (typeof (ArgumentException))]
  25. public void TransitionEndEqualStart ()
  26. {
  27. DateTime dateStart = new DateTime (2007,01,01);
  28. DateTime dateEnd = new DateTime (2008,01,01);
  29. TimeZoneInfo.TransitionTime daylightTransition = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
  30. TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (1,0,0), daylightTransition, daylightTransition);
  31. }
  32. [Test]
  33. [ExpectedException (typeof (ArgumentException))]
  34. public void DateIncludesTimeOfDay ()
  35. {
  36. DateTime dateStart = new DateTime (2007,01,01, 0,1,0);
  37. DateTime dateEnd = new DateTime (2008,01,01);
  38. TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
  39. TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
  40. TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (1,0,0), daylightTransitionStart, daylightTransitionEnd);
  41. }
  42. [Test]
  43. public void DatesMaxMinValid ()
  44. {
  45. try {
  46. TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
  47. TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
  48. TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1,0,0), daylightTransitionStart, daylightTransitionEnd);
  49. } catch {
  50. Assert.Fail ("DateTime.MinValue and MaxValue are not valid...");
  51. }
  52. }
  53. [Test]
  54. [ExpectedException (typeof (ArgumentOutOfRangeException))]
  55. public void EndBeforeStart ()
  56. {
  57. if (Environment.OSVersion.Platform != PlatformID.Unix)
  58. throw new ArgumentOutOfRangeException ();;
  59. DateTime dateStart = new DateTime (2007,01,01);
  60. DateTime dateEnd = new DateTime (2006,01,01);
  61. TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
  62. TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
  63. TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (1,0,0), daylightTransitionStart, daylightTransitionEnd);
  64. }
  65. [Test]
  66. [ExpectedException (typeof (ArgumentOutOfRangeException))]
  67. public void DeltaOutOfRange ()
  68. {
  69. DateTime dateStart = new DateTime (2007,01,01);
  70. DateTime dateEnd = new DateTime (2008,01,01);
  71. TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
  72. TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
  73. TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (14,1,0), daylightTransitionStart, daylightTransitionEnd);
  74. }
  75. [Test]
  76. [ExpectedException (typeof (ArgumentOutOfRangeException))]
  77. public void DeltaNotInSeconds ()
  78. {
  79. if (Environment.OSVersion.Platform != PlatformID.Unix)
  80. throw new ArgumentOutOfRangeException ();;
  81. DateTime dateStart = new DateTime (2007,01,01);
  82. DateTime dateEnd = new DateTime (2008,01,01);
  83. TimeZoneInfo.TransitionTime daylightTransitionStart = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 03, 11);
  84. TimeZoneInfo.TransitionTime daylightTransitionEnd = TimeZoneInfo.TransitionTime.CreateFixedDateRule (new DateTime (1,1,1,2,0,0), 10, 11);
  85. TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (dateStart, dateEnd, new TimeSpan (55), daylightTransitionStart, daylightTransitionEnd);
  86. }
  87. }
  88. [TestFixture]
  89. public class NonExceptional
  90. {
  91. [Test]
  92. public void Serialization_Deserialization ()
  93. {
  94. TimeZoneInfo.TransitionTime start = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,1,0,0), 3, 5, DayOfWeek.Sunday);
  95. TimeZoneInfo.TransitionTime end = TimeZoneInfo.TransitionTime.CreateFloatingDateRule (new DateTime (1,1,1,2,0,0), 10, 5, DayOfWeek.Sunday);
  96. TimeZoneInfo.AdjustmentRule rule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule (DateTime.MinValue.Date, DateTime.MaxValue.Date, new TimeSpan (1,0,0), start, end);
  97. MemoryStream stream = new MemoryStream ();
  98. BinaryFormatter formatter = new BinaryFormatter ();
  99. formatter.Serialize (stream, rule);
  100. stream.Position = 0;
  101. TimeZoneInfo.AdjustmentRule deserialized = (TimeZoneInfo.AdjustmentRule) formatter.Deserialize (stream);
  102. stream.Close ();
  103. stream.Dispose ();
  104. Assert.IsTrue (rule.Equals (deserialized));
  105. }
  106. }
  107. }
  108. }
  109. #endif