merge -r 53370:58178
[mono.git] / mcs / class / corlib / Test / System / TimeZoneTest.cs
1 //
2 // TimeZoneTest.cs - NUnit Test Cases for the System.TimeZone struct
3 //
4 // author:
5 //   Martin Baulig (martin@gnome.org)
6 //
7 //   (C) 2002 Martin Baulig
8 //
9
10 using NUnit.Framework;
11 using System;
12 using System.Threading;
13 using System.Globalization;
14
15 namespace MonoTests.System {
16
17 public class TimeZoneTest : TestCase {
18
19         private CultureInfo oldcult;
20
21         public TimeZoneTest() {}
22
23         protected override void SetUp ()
24         {
25                 oldcult = Thread.CurrentThread.CurrentCulture;
26                 Thread.CurrentThread.CurrentCulture = new CultureInfo ("");
27         }
28         
29         protected override void TearDown ()
30         {
31                 Thread.CurrentThread.CurrentCulture = oldcult;
32         }
33
34         private void CET (TimeZone t1) 
35         {
36                 AssertEquals("A01", "CET", t1.StandardName);
37                 AssertEquals("A02", "CEST", t1.DaylightName);
38         
39                 DaylightTime d1 = t1.GetDaylightChanges (2002);
40                 AssertEquals("A03", "03/31/2002 01:00:00", d1.Start.ToString ("G"));
41                 AssertEquals("A04", "10/27/2002 01:00:00", d1.End.ToString ("G"));
42                 AssertEquals("A05", 36000000000L, d1.Delta.Ticks);
43         
44                 DaylightTime d2 = t1.GetDaylightChanges (1996);
45                 AssertEquals("A06", "03/31/1996 01:00:00", d2.Start.ToString ("G"));
46                 AssertEquals("A07", "10/27/1996 01:00:00", d2.End.ToString ("G"));
47                 AssertEquals("A08", 36000000000L, d2.Delta.Ticks);
48         
49                 DateTime d3 = new DateTime (2002,2,25);
50                 AssertEquals("A09", false, t1.IsDaylightSavingTime (d3));
51                 DateTime d4 = new DateTime (2002,4,2);
52                 AssertEquals("A10", true, t1.IsDaylightSavingTime (d4));
53                 DateTime d5 = new DateTime (2002,11,4);
54                 AssertEquals("A11", false, t1.IsDaylightSavingTime (d5));
55         
56                 AssertEquals("A12", 36000000000L, t1.GetUtcOffset (d3).Ticks);
57                 AssertEquals("A13", 72000000000L, t1.GetUtcOffset (d4).Ticks);
58                 AssertEquals("A14", 36000000000L, t1.GetUtcOffset (d5).Ticks);
59         }
60
61         private void EST (TimeZone t1) 
62         {
63                 // It could be EST though...
64                 //AssertEquals("B01", "Eastern Standard Time", t1.StandardName);
65                 //AssertEquals("B02", "Eastern Daylight Time", t1.DaylightName);
66
67                 DaylightTime d1 = t1.GetDaylightChanges (2002);
68                 AssertEquals("B03", "04/07/2002 02:00:00", d1.Start.ToString ("G"));
69                 AssertEquals("B04", "10/27/2002 02:00:00", d1.End.ToString ("G"));
70                 AssertEquals("B05", 36000000000L, d1.Delta.Ticks);
71
72                 DaylightTime d2 = t1.GetDaylightChanges (1996);
73                 AssertEquals("B06", "04/07/1996 02:00:00", d2.Start.ToString ("G"));
74                 AssertEquals("B07", "10/27/1996 02:00:00", d2.End.ToString ("G"));
75                 AssertEquals("B08", 36000000000L, d2.Delta.Ticks);
76
77                 DateTime d3 = new DateTime (2002,2,25);
78                 AssertEquals("B09", false, t1.IsDaylightSavingTime (d3));
79                 DateTime d4 = new DateTime (2002,4,8);
80                 AssertEquals("B10", true, t1.IsDaylightSavingTime (d4));
81                 DateTime d5 = new DateTime (2002,11,4);
82                 AssertEquals("B11", false, t1.IsDaylightSavingTime (d5));
83
84                 AssertEquals("B12", -180000000000L, t1.GetUtcOffset (d3).Ticks);
85                 AssertEquals("B13", -144000000000L, t1.GetUtcOffset (d4).Ticks);
86                 AssertEquals("B14", -180000000000L, t1.GetUtcOffset (d5).Ticks);
87         }
88
89         private void TST (TimeZone t1) 
90         {
91                 AssertEquals("C01", "Tokyo Standard Time", t1.StandardName);
92                 AssertEquals("C02", "Tokyo Standard Time", t1.DaylightName);
93
94                 DateTime d3 = new DateTime (2002,2,25);
95                 AssertEquals("C09", false, t1.IsDaylightSavingTime (d3));
96                 DateTime d4 = new DateTime (2002,4,8);
97                 AssertEquals("C10", false, t1.IsDaylightSavingTime (d4));
98                 DateTime d5 = new DateTime (2002,11,4);
99                 AssertEquals("C11", false, t1.IsDaylightSavingTime (d5));
100
101                 AssertEquals("C12", 324000000000L, t1.GetUtcOffset (d3).Ticks);
102                 AssertEquals("C13", 324000000000L, t1.GetUtcOffset (d4).Ticks);
103                 AssertEquals("C14", 324000000000L, t1.GetUtcOffset (d5).Ticks);
104         }
105
106         private void GMT (TimeZone t1) {
107                 // Probably wont work on MS.NET, but is better than nothing. Where do
108                 // we change our implementation to match theirs?
109                 
110                 AssertEquals("D01", "GMT", t1.StandardName);
111                 AssertEquals("D02", "BST", t1.DaylightName);
112         
113                 DaylightTime d1 = t1.GetDaylightChanges (2002);
114                 AssertEquals("D03", "03/31/2002 01:00:00", d1.Start.ToString ("G"));
115                 AssertEquals("D04", "10/27/2002 01:00:00", d1.End.ToString ("G"));
116                 AssertEquals("D05", 36000000000L, d1.Delta.Ticks);
117         
118                 DaylightTime d2 = t1.GetDaylightChanges (1996);
119                 AssertEquals("D06", "03/31/1996 01:00:00", d2.Start.ToString ("G"));
120                 AssertEquals("D07", "10/27/1996 01:00:00", d2.End.ToString ("G"));
121                 AssertEquals("D08", 36000000000L, d2.Delta.Ticks);
122         
123                 DateTime d3 = new DateTime (2002,2,25);
124                 AssertEquals("D09", false, t1.IsDaylightSavingTime (d3));
125                 DateTime d4 = new DateTime (2002,4,2);
126                 AssertEquals("D10", true, t1.IsDaylightSavingTime (d4));
127                 DateTime d5 = new DateTime (2002,11,4);
128                 AssertEquals("D11", false, t1.IsDaylightSavingTime (d5));
129         
130                 AssertEquals("D12", 0L, t1.GetUtcOffset (d3).Ticks);
131                 AssertEquals("D13", 36000000000L, t1.GetUtcOffset (d4).Ticks);
132                 AssertEquals("D14", 0L, t1.GetUtcOffset (d5).Ticks);
133         }
134
135
136
137         public void TestCtors ()
138         {
139                 TimeZone t1 = TimeZone.CurrentTimeZone;
140                 switch (t1.StandardName) {
141                         case "CET":
142                                 CET (t1);
143                                 break;
144                         case "Eastern Standard Time":
145                         case "EST":
146                                 EST (t1);
147                                 break;
148                         case "Tokyo Standard Time":
149                                 TST (t1);
150                                 break;
151                         case "GMT":
152                                 GMT (t1);
153                                 break;
154                         default:
155                                 NUnit.Framework.Assert.Ignore ("Your time zone (" + t1.StandardName + ") isn't defined in the test case");
156                                 break;
157                 }
158         }
159 }
160
161 }