2009-07-11 Michael Barker <mike@middlesoft.co.uk>
[mono.git] / mcs / class / corlib / Test / System / TimeZoneTest.cs
1 //
2 // TimeZoneTest.cs - NUnit Test Cases for the System.TimeZone struct
3 //
4 // Authors:
5 //      Martin Baulig (martin@gnome.org)
6 //      Sebastien Pouliot  <sebastien@ximian.com>
7 //
8 //   (C) 2002 Martin Baulig
9 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
10 //
11
12 using NUnit.Framework;
13 using System;
14 using System.IO;
15 using System.Threading;
16 using System.Globalization;
17 using System.Runtime.Serialization.Formatters.Binary;
18
19 namespace MonoTests.System {
20
21 [TestFixture]
22 public class TimeZoneTest {
23
24         private CultureInfo oldcult;
25
26         public TimeZoneTest() {}
27
28         [SetUp]
29         protected void SetUp ()
30         {
31                 oldcult = Thread.CurrentThread.CurrentCulture;
32                 Thread.CurrentThread.CurrentCulture = new CultureInfo ("");
33         }
34
35         [TearDown]
36         protected void TearDown ()
37         {
38                 Thread.CurrentThread.CurrentCulture = oldcult;
39         }
40
41         private void CET (TimeZone t1) 
42         {
43                 Assert.AreEqual("CET", t1.StandardName, "A01");
44                 Assert.AreEqual("CEST", t1.DaylightName, "A02");
45         
46                 DaylightTime d1 = t1.GetDaylightChanges (2002);
47                 Assert.AreEqual("03/31/2002 02:00:00", d1.Start.ToString ("G"), "A03");
48                 Assert.AreEqual("10/27/2002 03:00:00", d1.End.ToString ("G"), "A04");
49                 Assert.AreEqual(36000000000L, d1.Delta.Ticks, "A05");
50         
51                 DaylightTime d2 = t1.GetDaylightChanges (1996);
52                 Assert.AreEqual("03/31/1996 02:00:00", d2.Start.ToString ("G"), "A06");
53                 Assert.AreEqual("10/27/1996 03:00:00", d2.End.ToString ("G"), "A07");
54                 Assert.AreEqual(36000000000L, d2.Delta.Ticks, "A08");
55         
56                 DateTime d3 = new DateTime (2002,2,25);
57                 Assert.AreEqual(false, t1.IsDaylightSavingTime (d3), "A09");
58                 DateTime d4 = new DateTime (2002,4,2);
59                 Assert.AreEqual(true, t1.IsDaylightSavingTime (d4), "A10");
60                 DateTime d5 = new DateTime (2002,11,4);
61                 Assert.AreEqual(false, t1.IsDaylightSavingTime (d5), "A11");
62         
63                 Assert.AreEqual(36000000000L, t1.GetUtcOffset (d3).Ticks, "A12");
64                 Assert.AreEqual(72000000000L, t1.GetUtcOffset (d4).Ticks, "A13");
65                 Assert.AreEqual(36000000000L, t1.GetUtcOffset (d5).Ticks, "A14");
66         }
67
68         private void EST (TimeZone t1) 
69         {
70                 // It could be EST though...
71                 //Assert.AreEqual("Eastern Standard Time", t1.StandardName, "B01");
72                 //Assert.AreEqual("Eastern Daylight Time", t1.DaylightName, "B02");
73
74                 DaylightTime d1 = t1.GetDaylightChanges (2002);
75                 Assert.AreEqual("04/07/2002 02:00:00", d1.Start.ToString ("G"), "B03");
76                 Assert.AreEqual("10/27/2002 02:00:00", d1.End.ToString ("G"), "B04");
77                 Assert.AreEqual(36000000000L, d1.Delta.Ticks, "B05");
78
79                 DaylightTime d2 = t1.GetDaylightChanges (1996);
80                 Assert.AreEqual("04/07/1996 02:00:00", d2.Start.ToString ("G"), "B06");
81                 Assert.AreEqual("10/27/1996 02:00:00", d2.End.ToString ("G"), "B07");
82                 Assert.AreEqual(36000000000L, d2.Delta.Ticks, "B08");
83
84                 DateTime d3 = new DateTime (2002,2,25);
85                 Assert.AreEqual(false, t1.IsDaylightSavingTime (d3), "B09");
86                 DateTime d4 = new DateTime (2002,4,8);
87                 Assert.AreEqual(true, t1.IsDaylightSavingTime (d4), "B10");
88                 DateTime d5 = new DateTime (2002,11,4);
89                 Assert.AreEqual(false, t1.IsDaylightSavingTime (d5), "B11");
90
91                 Assert.AreEqual(-180000000000L, t1.GetUtcOffset (d3).Ticks, "B12");
92                 Assert.AreEqual(-144000000000L, t1.GetUtcOffset (d4).Ticks, "B13");
93                 Assert.AreEqual(-180000000000L, t1.GetUtcOffset (d5).Ticks, "B14");
94         }
95
96         private void TST (TimeZone t1) 
97         {
98                 Assert.AreEqual("Tokyo Standard Time", t1.StandardName, "C01");
99                 Assert.AreEqual("Tokyo Standard Time", t1.DaylightName, "C02");
100
101                 DateTime d3 = new DateTime (2002,2,25);
102                 Assert.AreEqual(false, t1.IsDaylightSavingTime (d3), "C09");
103                 DateTime d4 = new DateTime (2002,4,8);
104                 Assert.AreEqual(false, t1.IsDaylightSavingTime (d4), "C10");
105                 DateTime d5 = new DateTime (2002,11,4);
106                 Assert.AreEqual(false, t1.IsDaylightSavingTime (d5), "C11");
107
108                 Assert.AreEqual(324000000000L, t1.GetUtcOffset (d3).Ticks, "C12");
109                 Assert.AreEqual(324000000000L, t1.GetUtcOffset (d4).Ticks, "C13");
110                 Assert.AreEqual(324000000000L, t1.GetUtcOffset (d5).Ticks, "C14");
111         }
112
113         private void GMT (TimeZone t1) {
114                 // Probably wont work on MS.NET, but is better than nothing. Where do
115                 // we change our implementation to match theirs?
116                 
117                 Assert.AreEqual("GMT", t1.StandardName, "D01");
118                 Assert.AreEqual("BST", t1.DaylightName, "D02");
119         
120                 DaylightTime d1 = t1.GetDaylightChanges (2002);
121                 Assert.AreEqual("03/31/2002 01:00:00", d1.Start.ToString ("G"), "D03");
122                 Assert.AreEqual("10/27/2002 02:00:00", d1.End.ToString ("G"), "D04");
123                 Assert.AreEqual(36000000000L, d1.Delta.Ticks, "D05");
124         
125                 DaylightTime d2 = t1.GetDaylightChanges (1996);
126                 Assert.AreEqual("03/31/1996 01:00:00", d2.Start.ToString ("G"), "D06");
127                 Assert.AreEqual("10/27/1996 02:00:00", d2.End.ToString ("G"), "D07");
128                 Assert.AreEqual(36000000000L, d2.Delta.Ticks, "D08");
129         
130                 DateTime d3 = new DateTime (2002,2,25);
131                 Assert.AreEqual(false, t1.IsDaylightSavingTime (d3), "D09");
132                 DateTime d4 = new DateTime (2002,4,2);
133                 Assert.AreEqual(true, t1.IsDaylightSavingTime (d4), "D10");
134                 DateTime d5 = new DateTime (2002,11,4);
135                 Assert.AreEqual(false, t1.IsDaylightSavingTime (d5), "D11");
136         
137                 Assert.AreEqual(0L, t1.GetUtcOffset (d3).Ticks, "D12");
138                 Assert.AreEqual(36000000000L, t1.GetUtcOffset (d4).Ticks, "D13");
139                 Assert.AreEqual(0L, t1.GetUtcOffset (d5).Ticks, "D14");
140         }
141
142         [Test]
143         public void TestCtors ()
144         {
145                 TimeZone t1 = TimeZone.CurrentTimeZone;
146                 switch (t1.StandardName) {
147                         case "CET":
148                                 CET (t1);
149                                 break;
150                         case "Eastern Standard Time":
151                         case "EST":
152                                 EST (t1);
153                                 break;
154                         case "Tokyo Standard Time":
155                                 TST (t1);
156                                 break;
157                         case "GMT":
158                                 GMT (t1);
159                                 break;
160                         default:
161                                 NUnit.Framework.Assert.Ignore ("Your time zone (" + t1.StandardName + ") isn't defined in the test case");
162                                 break;
163                 }
164         }
165
166         [Test]
167         [Category ("TargetJvmNotWorking")]
168         public void CurrentTimeZone_SerializationRoundtrip ()
169         {
170                 TimeZone tz = TimeZone.CurrentTimeZone;
171                 BinaryFormatter bf = new BinaryFormatter ();
172                 MemoryStream ms = new MemoryStream ();
173                 bf.Serialize (ms, tz);
174
175                 ms.Position = 0;
176                 TimeZone clone = (TimeZone) bf.Deserialize (ms);
177
178                 Assert.AreEqual (tz.DaylightName, clone.DaylightName, "DaylightName");
179                 Assert.AreEqual (tz.StandardName, clone.StandardName, "StandardName");
180         }
181
182         static private byte[] serialized_timezone = {
183 #if NET_2_0
184                 0x00, 0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 
185                 0x1C, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x54, 
186                 0x69, 0x6D, 0x65, 0x5A, 0x6F, 0x6E, 0x65, 0x04, 0x00, 0x00, 0x00, 0x17, 0x6D, 0x5F, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x44, 0x61, 
187                 0x79, 0x6C, 0x69, 0x67, 0x68, 0x74, 0x43, 0x68, 0x61, 0x6E, 0x67, 0x65, 0x73, 0x0D, 0x6D, 0x5F, 0x74, 0x69, 0x63, 0x6B, 0x73, 0x4F, 
188                 0x66, 0x66, 0x73, 0x65, 0x74, 0x0E, 0x6D, 0x5F, 0x73, 0x74, 0x61, 0x6E, 0x64, 0x61, 0x72, 0x64, 0x4E, 0x61, 0x6D, 0x65, 0x0E, 0x6D, 
189                 0x5F, 0x64, 0x61, 0x79, 0x6C, 0x69, 0x67, 0x68, 0x74, 0x4E, 0x61, 0x6D, 0x65, 0x03, 0x00, 0x01, 0x01, 0x1C, 0x53, 0x79, 0x73, 0x74, 
190                 0x65, 0x6D, 0x2E, 0x43, 0x6F, 0x6C, 0x6C, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x48, 0x61, 0x73, 0x68, 0x74, 0x61, 0x62, 
191                 0x6C, 0x65, 0x09, 0x09, 0x02, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x29, 0x17, 0xD6, 0xFF, 0xFF, 0xFF, 0x06, 0x03, 0x00, 0x00, 0x00, 0x15, 
192                 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x53, 0x74, 0x61, 0x6E, 0x64, 0x61, 0x72, 0x64, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x0A, 
193                 0x04, 0x02, 0x00, 0x00, 0x00, 0x1C, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x43, 0x6F, 0x6C, 0x6C, 0x65, 0x63, 0x74, 0x69, 0x6F, 
194                 0x6E, 0x73, 0x2E, 0x48, 0x61, 0x73, 0x68, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x07, 0x00, 0x00, 0x00, 0x0A, 0x4C, 0x6F, 0x61, 0x64, 0x46, 
195                 0x61, 0x63, 0x74, 0x6F, 0x72, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x08, 0x43, 0x6F, 0x6D, 0x70, 0x61, 0x72, 0x65, 0x72, 
196                 0x10, 0x48, 0x61, 0x73, 0x68, 0x43, 0x6F, 0x64, 0x65, 0x50, 0x72, 0x6F, 0x76, 0x69, 0x64, 0x65, 0x72, 0x08, 0x48, 0x61, 0x73, 0x68, 
197                 0x53, 0x69, 0x7A, 0x65, 0x04, 0x4B, 0x65, 0x79, 0x73, 0x06, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x00, 0x00, 0x03, 0x03, 0x00, 0x05, 
198                 0x05, 0x0B, 0x08, 0x1C, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x43, 0x6F, 0x6C, 0x6C, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x73, 
199                 0x2E, 0x49, 0x43, 0x6F, 0x6D, 0x70, 0x61, 0x72, 0x65, 0x72, 0x24, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x43, 0x6F, 0x6C, 0x6C, 
200                 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x49, 0x48, 0x61, 0x73, 0x68, 0x43, 0x6F, 0x64, 0x65, 0x50, 0x72, 0x6F, 0x76, 0x69, 
201                 0x64, 0x65, 0x72, 0x08, 0xEC, 0x51, 0x38, 0x3F, 0x03, 0x00, 0x00, 0x00, 0x0A, 0x0A, 0x0B, 0x00, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 
202                 0x00, 0x09, 0x05, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x08, 0xCC, 0x07, 0x00, 0x00, 0x08, 
203                 0x08, 0xD5, 0x07, 0x00, 0x00, 0x08, 0x08, 0xD2, 0x07, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0x06, 
204                 0x00, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x00, 0x09, 0x08, 0x00, 0x00, 0x00, 0x04, 0x06, 0x00, 0x00, 0x00, 0x21, 0x53, 0x79, 0x73, 
205                 0x74, 0x65, 0x6D, 0x2E, 0x47, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x69, 0x7A, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x44, 0x61, 0x79, 0x6C, 
206                 0x69, 0x67, 0x68, 0x74, 0x54, 0x69, 0x6D, 0x65, 0x03, 0x00, 0x00, 0x00, 0x07, 0x6D, 0x5F, 0x73, 0x74, 0x61, 0x72, 0x74, 0x05, 0x6D, 
207                 0x5F, 0x65, 0x6E, 0x64, 0x07, 0x6D, 0x5F, 0x64, 0x65, 0x6C, 0x74, 0x61, 0x00, 0x00, 0x00, 0x0D, 0x0D, 0x0C, 0x00, 0x10, 0xFA, 0x0F, 
208                 0x3D, 0xF2, 0xBC, 0x88, 0x00, 0x50, 0xD5, 0xB1, 0xC1, 0x91, 0xBD, 0x88, 0x00, 0x68, 0xC4, 0x61, 0x08, 0x00, 0x00, 0x00, 0x01, 0x07, 
209                 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x50, 0x23, 0xFA, 0x07, 0x06, 0xC7, 0x88, 0x00, 0xD0, 0xE2, 0xC4, 0x0C, 0xAB, 0xC7, 
210                 0x88, 0x00, 0x68, 0xC4, 0x61, 0x08, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x50, 0x0C, 0x0F, 
211                 0xEF, 0xAB, 0xC3, 0x88, 0x00, 0x90, 0xE7, 0xB0, 0x73, 0x4B, 0xC4, 0x88, 0x00, 0x68, 0xC4, 0x61, 0x08, 0x00, 0x00, 0x00, 0x0B
212 #else
213                 0x00, 0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 
214                 0x1C, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6E, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x54, 
215                 0x69, 0x6D, 0x65, 0x5A, 0x6F, 0x6E, 0x65, 0x04, 0x00, 0x00, 0x00, 0x17, 0x6D, 0x5F, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x44, 0x61, 
216                 0x79, 0x6C, 0x69, 0x67, 0x68, 0x74, 0x43, 0x68, 0x61, 0x6E, 0x67, 0x65, 0x73, 0x0D, 0x6D, 0x5F, 0x74, 0x69, 0x63, 0x6B, 0x73, 0x4F, 
217                 0x66, 0x66, 0x73, 0x65, 0x74, 0x0E, 0x6D, 0x5F, 0x73, 0x74, 0x61, 0x6E, 0x64, 0x61, 0x72, 0x64, 0x4E, 0x61, 0x6D, 0x65, 0x0E, 0x6D, 
218                 0x5F, 0x64, 0x61, 0x79, 0x6C, 0x69, 0x67, 0x68, 0x74, 0x4E, 0x61, 0x6D, 0x65, 0x03, 0x00, 0x01, 0x01, 0x1C, 0x53, 0x79, 0x73, 0x74, 
219                 0x65, 0x6D, 0x2E, 0x43, 0x6F, 0x6C, 0x6C, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x48, 0x61, 0x73, 0x68, 0x74, 0x61, 0x62, 
220                 0x6C, 0x65, 0x09, 0x09, 0x02, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x29, 0x17, 0xD6, 0xFF, 0xFF, 0xFF, 0x06, 0x03, 0x00, 0x00, 0x00, 0x15, 
221                 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x53, 0x74, 0x61, 0x6E, 0x64, 0x61, 0x72, 0x64, 0x20, 0x54, 0x69, 0x6D, 0x65, 0x0A, 
222                 0x04, 0x02, 0x00, 0x00, 0x00, 0x1C, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x43, 0x6F, 0x6C, 0x6C, 0x65, 0x63, 0x74, 0x69, 0x6F, 
223                 0x6E, 0x73, 0x2E, 0x48, 0x61, 0x73, 0x68, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x07, 0x00, 0x00, 0x00, 0x0A, 0x4C, 0x6F, 0x61, 0x64, 0x46, 
224                 0x61, 0x63, 0x74, 0x6F, 0x72, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x08, 0x43, 0x6F, 0x6D, 0x70, 0x61, 0x72, 0x65, 0x72, 
225                 0x10, 0x48, 0x61, 0x73, 0x68, 0x43, 0x6F, 0x64, 0x65, 0x50, 0x72, 0x6F, 0x76, 0x69, 0x64, 0x65, 0x72, 0x08, 0x48, 0x61, 0x73, 0x68, 
226                 0x53, 0x69, 0x7A, 0x65, 0x04, 0x4B, 0x65, 0x79, 0x73, 0x06, 0x56, 0x61, 0x6C, 0x75, 0x65, 0x73, 0x00, 0x00, 0x03, 0x03, 0x00, 0x05, 
227                 0x05, 0x0B, 0x08, 0x1C, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x43, 0x6F, 0x6C, 0x6C, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x73, 
228                 0x2E, 0x49, 0x43, 0x6F, 0x6D, 0x70, 0x61, 0x72, 0x65, 0x72, 0x24, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x43, 0x6F, 0x6C, 0x6C, 
229                 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x49, 0x48, 0x61, 0x73, 0x68, 0x43, 0x6F, 0x64, 0x65, 0x50, 0x72, 0x6F, 0x76, 0x69, 
230                 0x64, 0x65, 0x72, 0x08, 0xEC, 0x51, 0x38, 0x3F, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x0A, 0x0B, 0x00, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 
231                 0x00, 0x09, 0x05, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x08, 0xCC, 0x07, 0x00, 0x00, 0x08, 
232                 0x08, 0xD2, 0x07, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x06, 0x00, 0x00, 0x00, 0x09, 0x07, 0x00, 
233                 0x00, 0x00, 0x04, 0x06, 0x00, 0x00, 0x00, 0x21, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x47, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x69, 
234                 0x7A, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x44, 0x61, 0x79, 0x6C, 0x69, 0x67, 0x68, 0x74, 0x54, 0x69, 0x6D, 0x65, 0x03, 0x00, 0x00, 
235                 0x00, 0x07, 0x6D, 0x5F, 0x73, 0x74, 0x61, 0x72, 0x74, 0x05, 0x6D, 0x5F, 0x65, 0x6E, 0x64, 0x07, 0x6D, 0x5F, 0x64, 0x65, 0x6C, 0x74, 
236                 0x61, 0x00, 0x00, 0x00, 0x0D, 0x0D, 0x0C, 0x00, 0x10, 0xFA, 0x0F, 0x3D, 0xF2, 0xBC, 0x08, 0x00, 0x50, 0xD5, 0xB1, 0xC1, 0x91, 0xBD, 
237                 0x08, 0x00, 0x68, 0xC4, 0x61, 0x08, 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x50, 0x0C, 0x0F, 
238                 0xEF, 0xAB, 0xC3, 0x08, 0x00, 0x90, 0xE7, 0xB0, 0x73, 0x4B, 0xC4, 0x08, 0x00, 0x68, 0xC4, 0x61, 0x08, 0x00, 0x00, 0x00, 0x0B
239 #endif
240         };
241
242         [Test]
243         [Category ("NotWorking")] 
244         // 1.x - deserialize but strings are null
245         // 2.x - eexception when creating a datetime with a negative value
246         public void DeserializeKnownValue ()
247         {
248                 MemoryStream ms = new MemoryStream (serialized_timezone);
249                 BinaryFormatter bf = new BinaryFormatter ();
250                 TimeZone tz = (TimeZone) bf.Deserialize (ms);
251                 Assert.AreEqual ("Eastern Daylight Time", tz.DaylightName, "DaylightName");
252                 Assert.AreEqual ("Eastern Standard Time", tz.StandardName, "StandardName");
253         }
254
255         [Test]
256         public void ToLocalTimeAtDSTBoundaries ()
257         {
258                 TimeZone tz = TimeZone.CurrentTimeZone;
259                 DateTime dst_start_utc = tz.GetDaylightChanges(2007).Start.ToUniversalTime ();
260
261                 if (dst_start_utc == DateTime.MinValue)
262                         return;
263                 Assert.IsTrue (tz.ToLocalTime (dst_start_utc.Subtract (new TimeSpan (0, 1, 0))) < tz.ToLocalTime (dst_start_utc), "0:1:59 < 0:3:00");
264                 Assert.IsTrue (tz.ToLocalTime (dst_start_utc) < tz.ToLocalTime (dst_start_utc.Add (new TimeSpan (0, 1, 0))), "0:3:00 < 0:3:01");
265                 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");
266                 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");
267                 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");
268         }
269 }
270
271 }