]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/main/tests/core/src/com/ibm/icu/dev/test/calendar/HolidayTest.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / main / tests / core / src / com / ibm / icu / dev / test / calendar / HolidayTest.java
1 /*\r
2  *******************************************************************************\r
3  * Copyright (C) 1996-2010, International Business Machines Corporation and    *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6  */\r
7 package com.ibm.icu.dev.test.calendar;\r
8 \r
9 import java.util.Date;\r
10 import java.util.Locale;\r
11 \r
12 import com.ibm.icu.dev.test.TestFmwk;\r
13 import com.ibm.icu.impl.LocaleUtility;\r
14 import com.ibm.icu.util.Calendar;\r
15 import com.ibm.icu.util.EasterHoliday;\r
16 import com.ibm.icu.util.GregorianCalendar;\r
17 import com.ibm.icu.util.Holiday;\r
18 import com.ibm.icu.util.RangeDateRule;\r
19 import com.ibm.icu.util.SimpleDateRule;\r
20 import com.ibm.icu.util.SimpleHoliday;\r
21 import com.ibm.icu.util.ULocale;\r
22 \r
23 /**\r
24  * Tests for the <code>Holiday</code> class.\r
25  */\r
26 public class HolidayTest extends TestFmwk {\r
27     public static void main(String args[]) throws Exception {\r
28         new HolidayTest().run(args);\r
29     }\r
30     protected void init()throws Exception{\r
31         if(cal==null){\r
32             cal = new GregorianCalendar(1, 0, 1);\r
33             longTimeAgo = cal.getTime();\r
34             now = new Date();\r
35         }\r
36     }\r
37     static  Calendar cal;\r
38     static  Date longTimeAgo;\r
39     static  Date now;\r
40     static  long awhile = 3600L * 24 * 28; // 28 days\r
41 \r
42     public void TestAPI() {\r
43         {\r
44             // getHolidays\r
45             Holiday[] holidays = Holiday.getHolidays();\r
46             exerciseHolidays(holidays, Locale.getDefault());\r
47         }\r
48 \r
49         {\r
50             // getHolidays(Locale)\r
51             String[] localeNames =\r
52             {\r
53                 "en_US",\r
54                 "da",\r
55                 "da_DK",\r
56                 "de",\r
57                 "de_AT",\r
58                 "de_DE",\r
59                 "el",\r
60                 "el_GR",\r
61                 "en",\r
62                 "en_CA",\r
63                 "en_GB",\r
64                 "es",\r
65                 "es_MX",\r
66                 "fr",\r
67                 "fr_CA",\r
68                 "fr_FR",\r
69                 "it",\r
70                 "it_IT",\r
71                 "iw",\r
72                 "iw_IL",\r
73                 "ja",\r
74                 "ja_JP",\r
75             };\r
76 \r
77             for (int i = 0; i < localeNames.length; ++i) {\r
78                 Locale locale = LocaleUtility.getLocaleFromName(localeNames[i]);\r
79                 Holiday[] holidays = Holiday.getHolidays(locale);\r
80                 exerciseHolidays(holidays, locale);\r
81             }\r
82         }\r
83     }\r
84 \r
85     void exerciseHolidays(Holiday[] holidays, Locale locale) {\r
86         for (int i = 0; i < holidays.length; ++i) {\r
87             exerciseHoliday(holidays[i], locale);\r
88         }\r
89     }\r
90 \r
91     void exerciseHoliday(Holiday h, Locale locale) {\r
92         logln("holiday: " + h.getDisplayName());\r
93         logln("holiday in " + locale + ": " + h.getDisplayName(locale));\r
94 \r
95         Date first = h.firstAfter(longTimeAgo);\r
96         logln("firstAfter: " + longTimeAgo + " is " + first);\r
97         if (first == null) {\r
98             first = longTimeAgo;\r
99         }\r
100         first.setTime(first.getTime() + awhile);\r
101 \r
102         Date second = h.firstBetween(first, now);\r
103         logln("firstBetween: " + first + " and " + now + " is " + second);\r
104         if (second == null) {\r
105             second = now;\r
106         }\r
107 \r
108         logln("is on " + first + ": " + h.isOn(first));\r
109         logln("is on " + now + ": " + h.isOn(now));\r
110         logln(\r
111               "is between "\r
112               + first\r
113               + " and "\r
114               + now\r
115               + ": "\r
116               + h.isBetween(first, now));\r
117         logln(\r
118               "is between "\r
119               + first\r
120               + " and "\r
121               + second\r
122               + ": "\r
123               + h.isBetween(first, second));\r
124 \r
125         //        logln("rule: " + h.getRule().toString());\r
126 \r
127         //        h.setRule(h.getRule());\r
128     }\r
129     \r
130     public void TestCoverage(){\r
131         Holiday[] h = { new EasterHoliday("Ram's Easter"),\r
132                         new SimpleHoliday(2, 29, 0, "Leap year", 1900, 2100)};\r
133         exerciseHolidays(h, Locale.getDefault());\r
134 \r
135         RangeDateRule rdr = new RangeDateRule();\r
136         rdr.add(new SimpleDateRule(7, 10));\r
137         Date mbd = getDate(1953, Calendar.JULY, 10);\r
138         Date dbd = getDate(1958, Calendar.AUGUST, 15);\r
139         Date nbd = getDate(1990, Calendar.DECEMBER, 17);\r
140         Date abd = getDate(1992, Calendar.SEPTEMBER, 16);\r
141         Date xbd = getDate(1976, Calendar.JULY, 4);\r
142         Date ybd = getDate(2003, Calendar.DECEMBER, 8);\r
143         rdr.add(new SimpleDateRule(Calendar.JULY, 10, Calendar.MONDAY, false));\r
144         rdr.add(dbd, new SimpleDateRule(Calendar.AUGUST, 15, Calendar.WEDNESDAY, true));\r
145         rdr.add(xbd, null);\r
146         rdr.add(nbd, new SimpleDateRule(Calendar.DECEMBER, 17, Calendar.MONDAY, false));\r
147         rdr.add(ybd, null);\r
148 \r
149         logln("first after " + mbd + " is " + rdr.firstAfter(mbd));\r
150         logln("first between " + mbd + " and " + dbd + " is " + rdr.firstBetween(mbd, dbd));\r
151         logln("first between " + dbd + " and " + nbd + " is " + rdr.firstBetween(dbd, nbd));\r
152         logln("first between " + nbd + " and " + abd + " is " + rdr.firstBetween(nbd, abd));\r
153         logln("first between " + abd + " and " + xbd + " is " + rdr.firstBetween(abd, xbd));\r
154         logln("first between " + abd + " and " + null + " is " + rdr.firstBetween(abd, null));\r
155         logln("first between " + xbd + " and " + null + " is " + rdr.firstBetween(xbd, null));\r
156         \r
157         //getRule, setRule\r
158         logln("The rule in the holiday: " + h[1].getRule());\r
159         exerciseHoliday(h[1], Locale.getDefault());\r
160         h[1].setRule(rdr);\r
161         logln("Set the new rule to the SimpleHoliday ...");\r
162         if (!rdr.equals(h[1].getRule())) {\r
163             errln("FAIL: getRule and setRule not matched.");\r
164         }\r
165         exerciseHoliday(h[1], Locale.getDefault());\r
166     }\r
167 \r
168     public void TestIsOn() {\r
169         // jb 1901\r
170         SimpleHoliday sh = new SimpleHoliday(Calendar.AUGUST, 15, "Doug's Day", 1958, 2058);\r
171         \r
172         Calendar gcal = new GregorianCalendar();\r
173         gcal.clear();\r
174         gcal.set(Calendar.YEAR, 2000);\r
175         gcal.set(Calendar.MONTH, Calendar.AUGUST);\r
176         gcal.set(Calendar.DAY_OF_MONTH, 15);\r
177         \r
178         Date d0 = gcal.getTime();\r
179         gcal.add(Calendar.SECOND, 1);\r
180         Date d1 = gcal.getTime();\r
181         gcal.add(Calendar.SECOND, -2);\r
182         Date d2 = gcal.getTime();\r
183         gcal.add(Calendar.DAY_OF_MONTH, 1);\r
184         Date d3 = gcal.getTime();\r
185         gcal.add(Calendar.SECOND, 1);\r
186         Date d4 = gcal.getTime();\r
187         gcal.add(Calendar.SECOND, -2);\r
188         gcal.set(Calendar.YEAR, 1957);\r
189         Date d5 = gcal.getTime();\r
190         gcal.set(Calendar.YEAR, 1958);\r
191         Date d6 = gcal.getTime();\r
192         gcal.set(Calendar.YEAR, 2058);\r
193         Date d7 = gcal.getTime();\r
194         gcal.set(Calendar.YEAR, 2059);\r
195         Date d8 = gcal.getTime();\r
196 \r
197         Date[] dates = { d0, d1, d2, d3, d4, d5, d6, d7, d8 };\r
198         boolean[] isOns = { true, true, false, true, false, false, true, true, false };\r
199         for (int i = 0; i < dates.length; ++i) {\r
200             Date d = dates[i];\r
201             logln("\ndate: " + d);\r
202             boolean isOn = sh.isOn(d);\r
203             logln("isOnDate: " + isOn);\r
204             if (isOn != isOns[i]) {\r
205                 errln("date: " + d + " should be on Doug's Day!");\r
206             }\r
207             Date h = sh.firstAfter(d);\r
208             logln("firstAfter: " + h);\r
209         }\r
210     }\r
211     \r
212     public void TestDisplayName() {\r
213         Holiday[] holidays = Holiday.getHolidays(ULocale.US);\r
214         for (int i = 0; i < holidays.length; ++i) {\r
215             Holiday h = holidays[i];\r
216             // only need to test one\r
217             // if the display names differ, we're using our data.  We know these names\r
218             // should differ for this holiday (not all will).\r
219             if ("Christmas".equals(h.getDisplayName(ULocale.US))) {\r
220                 if ("Christmas".equals(h.getDisplayName(ULocale.GERMANY))) {\r
221                     errln("Using default name for holidays");\r
222                 }\r
223             }\r
224         }\r
225     }\r
226 }\r