2 // TimeZoneTest.cs - NUnit Test Cases for the System.TimeZone struct
5 // Martin Baulig (martin@gnome.org)
6 // Sebastien Pouliot <sebastien@ximian.com>
8 // (C) 2002 Martin Baulig
9 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
12 using NUnit.Framework;
15 using System.Threading;
16 using System.Globalization;
17 using System.Runtime.Serialization.Formatters.Binary;
19 namespace MonoTests.System {
22 public class TimeZoneTest {
24 private void CET (TimeZone t1)
26 Assert.AreEqual("CET", t1.StandardName, "A01");
27 Assert.AreEqual("CEST", t1.DaylightName, "A02");
29 DaylightTime d1 = t1.GetDaylightChanges (2002);
30 Assert.AreEqual("03/31/2002 02:00:00", d1.Start.ToString ("G"), "A03");
31 Assert.AreEqual("10/27/2002 03:00:00", d1.End.ToString ("G"), "A04");
32 Assert.AreEqual(36000000000L, d1.Delta.Ticks, "A05");
34 DaylightTime d2 = t1.GetDaylightChanges (1996);
35 Assert.AreEqual("03/31/1996 02:00:00", d2.Start.ToString ("G"), "A06");
36 Assert.AreEqual("10/27/1996 03:00:00", d2.End.ToString ("G"), "A07");
37 Assert.AreEqual(36000000000L, d2.Delta.Ticks, "A08");
39 DateTime d3 = new DateTime (2002,2,25);
40 Assert.AreEqual(false, t1.IsDaylightSavingTime (d3), "A09");
41 DateTime d4 = new DateTime (2002,4,2);
42 Assert.AreEqual(true, t1.IsDaylightSavingTime (d4), "A10");
43 DateTime d5 = new DateTime (2002,11,4);
44 Assert.AreEqual(false, t1.IsDaylightSavingTime (d5), "A11");
46 Assert.AreEqual(36000000000L, t1.GetUtcOffset (d3).Ticks, "A12");
47 Assert.AreEqual(72000000000L, t1.GetUtcOffset (d4).Ticks, "A13");
48 Assert.AreEqual(36000000000L, t1.GetUtcOffset (d5).Ticks, "A14");
51 private void EST (TimeZone t1)
53 // It could be EST though...
54 //Assert.AreEqual("Eastern Standard Time", t1.StandardName, "B01");
55 //Assert.AreEqual("Eastern Daylight Time", t1.DaylightName, "B02");
57 DaylightTime d1 = t1.GetDaylightChanges (2002);
58 Assert.AreEqual("04/07/2002 02:00:00", d1.Start.ToString ("G"), "B03");
59 Assert.AreEqual("10/27/2002 02:00:00", d1.End.ToString ("G"), "B04");
60 Assert.AreEqual(36000000000L, d1.Delta.Ticks, "B05");
62 DaylightTime d2 = t1.GetDaylightChanges (1996);
63 Assert.AreEqual("04/07/1996 02:00:00", d2.Start.ToString ("G"), "B06");
64 Assert.AreEqual("10/27/1996 02:00:00", d2.End.ToString ("G"), "B07");
65 Assert.AreEqual(36000000000L, d2.Delta.Ticks, "B08");
67 DateTime d3 = new DateTime (2002,2,25);
68 Assert.AreEqual(false, t1.IsDaylightSavingTime (d3), "B09");
69 DateTime d4 = new DateTime (2002,4,8);
70 Assert.AreEqual(true, t1.IsDaylightSavingTime (d4), "B10");
71 DateTime d5 = new DateTime (2002,11,4);
72 Assert.AreEqual(false, t1.IsDaylightSavingTime (d5), "B11");
74 Assert.AreEqual(-180000000000L, t1.GetUtcOffset (d3).Ticks, "B12");
75 Assert.AreEqual(-144000000000L, t1.GetUtcOffset (d4).Ticks, "B13");
76 Assert.AreEqual(-180000000000L, t1.GetUtcOffset (d5).Ticks, "B14");
79 private void TST (TimeZone t1)
81 Assert.AreEqual("Tokyo Standard Time", t1.StandardName, "C01");
82 Assert.AreEqual("Tokyo Standard Time", t1.DaylightName, "C02");
84 DateTime d3 = new DateTime (2002,2,25);
85 Assert.AreEqual(false, t1.IsDaylightSavingTime (d3), "C09");
86 DateTime d4 = new DateTime (2002,4,8);
87 Assert.AreEqual(false, t1.IsDaylightSavingTime (d4), "C10");
88 DateTime d5 = new DateTime (2002,11,4);
89 Assert.AreEqual(false, t1.IsDaylightSavingTime (d5), "C11");
91 Assert.AreEqual(324000000000L, t1.GetUtcOffset (d3).Ticks, "C12");
92 Assert.AreEqual(324000000000L, t1.GetUtcOffset (d4).Ticks, "C13");
93 Assert.AreEqual(324000000000L, t1.GetUtcOffset (d5).Ticks, "C14");
96 private void GMT (TimeZone t1) {
97 // Probably wont work on MS.NET, but is better than nothing. Where do
98 // we change our implementation to match theirs?
100 Assert.AreEqual("GMT", t1.StandardName, "D01");
101 Assert.IsTrue("BST" == t1.DaylightName || "IST" == t1.DaylightName, "D02");
103 DaylightTime d1 = t1.GetDaylightChanges (2002);
104 Assert.AreEqual("03/31/2002 01:00:00", d1.Start.ToString ("G"), "D03");
105 Assert.AreEqual("10/27/2002 02:00:00", d1.End.ToString ("G"), "D04");
106 Assert.AreEqual(36000000000L, d1.Delta.Ticks, "D05");
108 DaylightTime d2 = t1.GetDaylightChanges (1996);
109 Assert.AreEqual("03/31/1996 01:00:00", d2.Start.ToString ("G"), "D06");
110 Assert.AreEqual("10/27/1996 02:00:00", d2.End.ToString ("G"), "D07");
111 Assert.AreEqual(36000000000L, d2.Delta.Ticks, "D08");
113 DateTime d3 = new DateTime (2002,2,25);
114 Assert.AreEqual(false, t1.IsDaylightSavingTime (d3), "D09");
115 DateTime d4 = new DateTime (2002,4,2);
116 Assert.AreEqual(true, t1.IsDaylightSavingTime (d4), "D10");
117 DateTime d5 = new DateTime (2002,11,4);
118 Assert.AreEqual(false, t1.IsDaylightSavingTime (d5), "D11");
120 Assert.AreEqual(0L, t1.GetUtcOffset (d3).Ticks, "D12");
121 Assert.AreEqual(36000000000L, t1.GetUtcOffset (d4).Ticks, "D13");
122 Assert.AreEqual(0L, t1.GetUtcOffset (d5).Ticks, "D14");
127 public void TestCtors ()
129 TimeZone t1 = TimeZone.CurrentTimeZone;
130 switch (t1.StandardName) {
134 case "Eastern Standard Time":
138 case "Tokyo Standard Time":
145 NUnit.Framework.Assert.Ignore ("Your time zone (" + t1.StandardName + ") isn't defined in the test case");
151 [Category ("TargetJvmNotWorking")]
152 public void CurrentTimeZone_SerializationRoundtrip ()
154 TimeZone tz = TimeZone.CurrentTimeZone;
155 BinaryFormatter bf = new BinaryFormatter ();
156 MemoryStream ms = new MemoryStream ();
157 bf.Serialize (ms, tz);
160 TimeZone clone = (TimeZone) bf.Deserialize (ms);
162 Assert.AreEqual (tz.DaylightName, clone.DaylightName, "DaylightName");
163 Assert.AreEqual (tz.StandardName, clone.StandardName, "StandardName");
166 static private byte[] serialized_timezone = {
168 0x00, 0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00,
169 0x1C, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x54,
170 0x69, 0x6D, 0x65, 0x5A, 0x6F, 0x6E, 0x65, 0x04, 0x00, 0x00, 0x00, 0x17, 0x6D, 0x5F, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x44, 0x61,
171 0x79, 0x6C, 0x69, 0x67, 0x68, 0x74, 0x43, 0x68, 0x61, 0x6E, 0x67, 0x65, 0x73, 0x0D, 0x6D, 0x5F, 0x74, 0x69, 0x63, 0x6B, 0x73, 0x4F,
172 0x66, 0x66, 0x73, 0x65, 0x74, 0x0E, 0x6D, 0x5F, 0x73, 0x74, 0x61, 0x6E, 0x64, 0x61, 0x72, 0x64, 0x4E, 0x61, 0x6D, 0x65, 0x0E, 0x6D,
173 0x5F, 0x64, 0x61, 0x79, 0x6C, 0x69, 0x67, 0x68, 0x74, 0x4E, 0x61, 0x6D, 0x65, 0x03, 0x00, 0x01, 0x01, 0x1C, 0x53, 0x79, 0x73, 0x74,
174 0x65, 0x6D, 0x2E, 0x43, 0x6F, 0x6C, 0x6C, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x48, 0x61, 0x73, 0x68, 0x74, 0x61, 0x62,
175 0x6C, 0x65, 0x09, 0x09, 0x02, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x29, 0x17, 0xD6, 0xFF, 0xFF, 0xFF, 0x06, 0x03, 0x00, 0x00, 0x00, 0x15,
176 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x53, 0x74, 0x61, 0x6E, 0x64, 0x61, 0x72, 0x64, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x0A,
177 0x04, 0x02, 0x00, 0x00, 0x00, 0x1C, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x43, 0x6F, 0x6C, 0x6C, 0x65, 0x63, 0x74, 0x69, 0x6F,
178 0x6E, 0x73, 0x2E, 0x48, 0x61, 0x73, 0x68, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x07, 0x00, 0x00, 0x00, 0x0A, 0x4C, 0x6F, 0x61, 0x64, 0x46,
179 0x61, 0x63, 0x74, 0x6F, 0x72, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x08, 0x43, 0x6F, 0x6D, 0x70, 0x61, 0x72, 0x65, 0x72,
180 0x10, 0x48, 0x61, 0x73, 0x68, 0x43, 0x6F, 0x64, 0x65, 0x50, 0x72, 0x6F, 0x76, 0x69, 0x64, 0x65, 0x72, 0x08, 0x48, 0x61, 0x73, 0x68,
181 0x53, 0x69, 0x7A, 0x65, 0x04, 0x4B, 0x65, 0x79, 0x73, 0x06, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x00, 0x00, 0x03, 0x03, 0x00, 0x05,
182 0x05, 0x0B, 0x08, 0x1C, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x43, 0x6F, 0x6C, 0x6C, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x73,
183 0x2E, 0x49, 0x43, 0x6F, 0x6D, 0x70, 0x61, 0x72, 0x65, 0x72, 0x24, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x43, 0x6F, 0x6C, 0x6C,
184 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x49, 0x48, 0x61, 0x73, 0x68, 0x43, 0x6F, 0x64, 0x65, 0x50, 0x72, 0x6F, 0x76, 0x69,
185 0x64, 0x65, 0x72, 0x08, 0xEC, 0x51, 0x38, 0x3F, 0x03, 0x00, 0x00, 0x00, 0x0A, 0x0A, 0x0B, 0x00, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00,
186 0x00, 0x09, 0x05, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x08, 0xCC, 0x07, 0x00, 0x00, 0x08,
187 0x08, 0xD5, 0x07, 0x00, 0x00, 0x08, 0x08, 0xD2, 0x07, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0x06,
188 0x00, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x00, 0x09, 0x08, 0x00, 0x00, 0x00, 0x04, 0x06, 0x00, 0x00, 0x00, 0x21, 0x53, 0x79, 0x73,
189 0x74, 0x65, 0x6D, 0x2E, 0x47, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x69, 0x7A, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x44, 0x61, 0x79, 0x6C,
190 0x69, 0x67, 0x68, 0x74, 0x54, 0x69, 0x6D, 0x65, 0x03, 0x00, 0x00, 0x00, 0x07, 0x6D, 0x5F, 0x73, 0x74, 0x61, 0x72, 0x74, 0x05, 0x6D,
191 0x5F, 0x65, 0x6E, 0x64, 0x07, 0x6D, 0x5F, 0x64, 0x65, 0x6C, 0x74, 0x61, 0x00, 0x00, 0x00, 0x0D, 0x0D, 0x0C, 0x00, 0x10, 0xFA, 0x0F,
192 0x3D, 0xF2, 0xBC, 0x88, 0x00, 0x50, 0xD5, 0xB1, 0xC1, 0x91, 0xBD, 0x88, 0x00, 0x68, 0xC4, 0x61, 0x08, 0x00, 0x00, 0x00, 0x01, 0x07,
193 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x50, 0x23, 0xFA, 0x07, 0x06, 0xC7, 0x88, 0x00, 0xD0, 0xE2, 0xC4, 0x0C, 0xAB, 0xC7,
194 0x88, 0x00, 0x68, 0xC4, 0x61, 0x08, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x50, 0x0C, 0x0F,
195 0xEF, 0xAB, 0xC3, 0x88, 0x00, 0x90, 0xE7, 0xB0, 0x73, 0x4B, 0xC4, 0x88, 0x00, 0x68, 0xC4, 0x61, 0x08, 0x00, 0x00, 0x00, 0x0B
197 0x00, 0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00,
198 0x1C, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x54,
199 0x69, 0x6D, 0x65, 0x5A, 0x6F, 0x6E, 0x65, 0x04, 0x00, 0x00, 0x00, 0x17, 0x6D, 0x5F, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x44, 0x61,
200 0x79, 0x6C, 0x69, 0x67, 0x68, 0x74, 0x43, 0x68, 0x61, 0x6E, 0x67, 0x65, 0x73, 0x0D, 0x6D, 0x5F, 0x74, 0x69, 0x63, 0x6B, 0x73, 0x4F,
201 0x66, 0x66, 0x73, 0x65, 0x74, 0x0E, 0x6D, 0x5F, 0x73, 0x74, 0x61, 0x6E, 0x64, 0x61, 0x72, 0x64, 0x4E, 0x61, 0x6D, 0x65, 0x0E, 0x6D,
202 0x5F, 0x64, 0x61, 0x79, 0x6C, 0x69, 0x67, 0x68, 0x74, 0x4E, 0x61, 0x6D, 0x65, 0x03, 0x00, 0x01, 0x01, 0x1C, 0x53, 0x79, 0x73, 0x74,
203 0x65, 0x6D, 0x2E, 0x43, 0x6F, 0x6C, 0x6C, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x48, 0x61, 0x73, 0x68, 0x74, 0x61, 0x62,
204 0x6C, 0x65, 0x09, 0x09, 0x02, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x29, 0x17, 0xD6, 0xFF, 0xFF, 0xFF, 0x06, 0x03, 0x00, 0x00, 0x00, 0x15,
205 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x53, 0x74, 0x61, 0x6E, 0x64, 0x61, 0x72, 0x64, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x0A,
206 0x04, 0x02, 0x00, 0x00, 0x00, 0x1C, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x43, 0x6F, 0x6C, 0x6C, 0x65, 0x63, 0x74, 0x69, 0x6F,
207 0x6E, 0x73, 0x2E, 0x48, 0x61, 0x73, 0x68, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x07, 0x00, 0x00, 0x00, 0x0A, 0x4C, 0x6F, 0x61, 0x64, 0x46,
208 0x61, 0x63, 0x74, 0x6F, 0x72, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x08, 0x43, 0x6F, 0x6D, 0x70, 0x61, 0x72, 0x65, 0x72,
209 0x10, 0x48, 0x61, 0x73, 0x68, 0x43, 0x6F, 0x64, 0x65, 0x50, 0x72, 0x6F, 0x76, 0x69, 0x64, 0x65, 0x72, 0x08, 0x48, 0x61, 0x73, 0x68,
210 0x53, 0x69, 0x7A, 0x65, 0x04, 0x4B, 0x65, 0x79, 0x73, 0x06, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x00, 0x00, 0x03, 0x03, 0x00, 0x05,
211 0x05, 0x0B, 0x08, 0x1C, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x43, 0x6F, 0x6C, 0x6C, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x73,
212 0x2E, 0x49, 0x43, 0x6F, 0x6D, 0x70, 0x61, 0x72, 0x65, 0x72, 0x24, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x43, 0x6F, 0x6C, 0x6C,
213 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x49, 0x48, 0x61, 0x73, 0x68, 0x43, 0x6F, 0x64, 0x65, 0x50, 0x72, 0x6F, 0x76, 0x69,
214 0x64, 0x65, 0x72, 0x08, 0xEC, 0x51, 0x38, 0x3F, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x0A, 0x0B, 0x00, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00,
215 0x00, 0x09, 0x05, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x08, 0xCC, 0x07, 0x00, 0x00, 0x08,
216 0x08, 0xD2, 0x07, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x06, 0x00, 0x00, 0x00, 0x09, 0x07, 0x00,
217 0x00, 0x00, 0x04, 0x06, 0x00, 0x00, 0x00, 0x21, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x47, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x69,
218 0x7A, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x44, 0x61, 0x79, 0x6C, 0x69, 0x67, 0x68, 0x74, 0x54, 0x69, 0x6D, 0x65, 0x03, 0x00, 0x00,
219 0x00, 0x07, 0x6D, 0x5F, 0x73, 0x74, 0x61, 0x72, 0x74, 0x05, 0x6D, 0x5F, 0x65, 0x6E, 0x64, 0x07, 0x6D, 0x5F, 0x64, 0x65, 0x6C, 0x74,
220 0x61, 0x00, 0x00, 0x00, 0x0D, 0x0D, 0x0C, 0x00, 0x10, 0xFA, 0x0F, 0x3D, 0xF2, 0xBC, 0x08, 0x00, 0x50, 0xD5, 0xB1, 0xC1, 0x91, 0xBD,
221 0x08, 0x00, 0x68, 0xC4, 0x61, 0x08, 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x50, 0x0C, 0x0F,
222 0xEF, 0xAB, 0xC3, 0x08, 0x00, 0x90, 0xE7, 0xB0, 0x73, 0x4B, 0xC4, 0x08, 0x00, 0x68, 0xC4, 0x61, 0x08, 0x00, 0x00, 0x00, 0x0B
227 [Category ("NotWorking")]
228 // 1.x - deserialize but strings are null
229 // 2.x - eexception when creating a datetime with a negative value
230 public void DeserializeKnownValue ()
232 MemoryStream ms = new MemoryStream (serialized_timezone);
233 BinaryFormatter bf = new BinaryFormatter ();
234 TimeZone tz = (TimeZone) bf.Deserialize (ms);
235 Assert.AreEqual ("Eastern Daylight Time", tz.DaylightName, "DaylightName");
236 Assert.AreEqual ("Eastern Standard Time", tz.StandardName, "StandardName");
240 public void ToLocalTimeAtDSTBoundaries ()
242 TimeZone tz = TimeZone.CurrentTimeZone;
243 DateTime dst_start_utc = tz.GetDaylightChanges(2007).Start.ToUniversalTime ();
245 if (dst_start_utc == DateTime.MinValue)
247 Assert.IsTrue (tz.ToLocalTime (dst_start_utc.Subtract (new TimeSpan (0, 1, 0))) < tz.ToLocalTime (dst_start_utc), "0:1:59 < 0:3:00");
248 Assert.IsTrue (tz.ToLocalTime (dst_start_utc) < tz.ToLocalTime (dst_start_utc.Add (new TimeSpan (0, 1, 0))), "0:3:00 < 0:3:01");
249 Assert.IsTrue (tz.ToLocalTime (dst_start_utc.Add (new TimeSpan (0, 1, 0))) < tz.ToLocalTime (dst_start_utc.Add (new TimeSpan (0, 59, 0))), "0:3:01 < 0:3:59");
250 Assert.IsTrue (tz.ToLocalTime (dst_start_utc.Add (new TimeSpan (0, 59, 0))) < tz.ToLocalTime (dst_start_utc.Add (new TimeSpan (1, 0, 0))), "0:3:59 < 0:4:00");
251 Assert.IsTrue (tz.ToLocalTime (dst_start_utc.Add (new TimeSpan (1, 0, 0))) < tz.ToLocalTime (dst_start_utc.Add (new TimeSpan (1, 1, 0))), "0:4:00 < 0:4:01");
255 public void StaticProperties ()
257 Assert.IsNotNull (TimeZoneInfo.Local, "Local");
258 Assert.IsNotNull (TimeZoneInfo.Utc, "Utc");
262 public void FindSystemTimeZoneById ()
264 TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById ("Canada/Eastern");
265 Assert.AreEqual ("EDT", tzi.DaylightName, "DaylightName");
266 Assert.AreEqual ("EST", tzi.StandardName, "StandardName");
267 Assert.IsTrue (tzi.SupportsDaylightSavingTime, "SupportsDaylightSavingTime");
271 // On device we cannot read the OS file system to look for /etc/localtime
272 // and /usr/share/zoneinfo - so we must initialize the BCL TimeZoneInfo
273 // from NSTimeZoneInfo. The tests here check the code paths between the
274 // two types - if they break then TimeZoneInfo work work at all
275 // ref: http://bugzilla.xamarin.com/show_bug.cgi?id=1790
277 bool incomplete_data_on_simulator_only_bug;
280 public void GetSystemTimeZones ()
282 // if test is executed a second time then it report less than 400 (about 127) items available
283 if (incomplete_data_on_simulator_only_bug)
284 Assert.Ignore ("known to fail on some iOS simulator versions - see source comments");
287 Assert.That (TimeZoneInfo.GetSystemTimeZones ().Count, Is.GreaterThan (400), "GetSystemTimeZones");
288 } catch (NullReferenceException) {
289 // that's a weird one. It failed on iOS 5.1 *beta* simulator (on Lion) but it worked on *final*
290 // now it fails on Snow Leopard the same way (incomplete data) with iOS5 simulator (OS update ?)
291 // but it *never*ever* failed on devices
292 incomplete_data_on_simulator_only_bug = true;
293 if (MonoTouch.ObjCRuntime.Runtime.Arch == MonoTouch.ObjCRuntime.Arch.SIMULATOR)
294 Assert.Ignore ("known to fail on some iOS simulator versions - see source comments");