2 *******************************************************************************
3 * Copyright (C) 2006-2011, International Business Machines Corporation and *
4 * others. All Rights Reserved. *
5 *******************************************************************************
8 package com.ibm.icu.tests;
10 import java.text.FieldPosition;
11 import java.text.ParseException;
12 import java.text.ParsePosition;
13 import java.util.Date;
14 import java.util.Locale;
16 import com.ibm.icu.text.DateFormat;
17 import com.ibm.icu.text.NumberFormat;
18 import com.ibm.icu.util.Calendar;
19 import com.ibm.icu.util.TimeZone;
20 import com.ibm.icu.util.ULocale;
22 public class DateFormatTest extends ICUTestCase {
23 private Calendar aCal;
24 private Calendar anESTCal;
26 private String aDateString;
27 private String aTimeString;
28 private String anESTTimeString;
29 private String aDateTimeString;
30 private String aShortDateTimeString;
31 private String aDefaultESTDateTimeString;
32 private DateFormat aDF;
33 private StringBuffer aBuf;
34 private FieldPosition anFP;
35 private FieldPosition anFPField;
37 private static int YEAR_POS_START = 8;
38 private static int YEAR_POS_END = 12;
40 protected void setUp() throws Exception {
43 java.util.GregorianCalendar gcal = new java.util.GregorianCalendar();
45 gcal.set(java.util.GregorianCalendar.YEAR, 1990);
46 gcal.set(java.util.GregorianCalendar.MONTH, java.util.GregorianCalendar.DECEMBER);
47 gcal.set(java.util.GregorianCalendar.DATE, 17);
48 gcal.set(java.util.GregorianCalendar.HOUR, 5);
49 gcal.set(java.util.GregorianCalendar.MINUTE, 17);
50 aCal = new Calendar(gcal);
51 anESTCal = Calendar.getInstance();
52 anESTCal.setTimeZone(TimeZone.getTimeZone("EST"));
53 aDate = gcal.getTime();
54 aDateString = "Dec 17, 1990"; // medium -- the default
55 aTimeString = "5:17:00 AM"; // medium
56 anESTTimeString = "8:17:00 AM";
57 aDateTimeString = "Dec 17, 1990 5:17:00 AM"; // medium, medium
58 aDefaultESTDateTimeString = "Dec 17, 1990 8:17 AM"; // medium, short -- the default
59 aShortDateTimeString = "12/17/90 5:17 AM"; // short, short
60 aDF = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.US);
61 aBuf = new StringBuffer();
62 anFP = new FieldPosition(DateFormat.YEAR_FIELD);
63 anFPField = new FieldPosition(DateFormat.Field.YEAR);
67 * Test method for 'com.ibm.icu.text.DateFormat.hashCode()'
69 public final void testHashCode() {
70 DateFormat df = DateFormat.getInstance();
71 DateFormat eq = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
72 testEHCS(df, eq, aDF);
76 * Test method for 'com.ibm.icu.text.DateFormat.DateFormat(DateFormat)'
78 public final void testDateFormat() {
79 DateFormat df = new DateFormat(java.text.DateFormat.getInstance());
80 assertEquals(DateFormat.getInstance(), df);
83 private void assertEqualDateString(StringBuffer buf) {
84 assertEquals(aDateTimeString, buf.toString());
87 private void assertEqualDateString(String str) {
88 assertEquals(aDateTimeString, str);
92 * Test method for 'com.ibm.icu.text.DateFormat.format(Object, StringBuffer, FieldPosition)'
94 public final void testFormatObjectStringBufferFieldPosition() {
95 assertEqualDateString(aDF.format(aDate, aBuf, anFP));
96 assertEquals(YEAR_POS_START, anFP.getBeginIndex());
97 assertEquals(YEAR_POS_END, anFP.getEndIndex());
101 * Test method for 'com.ibm.icu.text.DateFormat.format(Calendar, StringBuffer, FieldPosition)'
103 public final void testFormatCalendarStringBufferFieldPosition() {
104 assertEqualDateString(aDF.format(aCal, aBuf, anFP));
105 assertEquals(YEAR_POS_START, anFP.getBeginIndex());
106 assertEquals(YEAR_POS_END, anFP.getEndIndex());
110 * Test method for 'com.ibm.icu.text.DateFormat.format(Date, StringBuffer, FieldPosition)'
112 public final void testFormatDateStringBufferFieldPosition() {
113 assertEqualDateString(aDF.format(aDate, aBuf, anFPField));
114 assertEquals(YEAR_POS_START, anFPField.getBeginIndex());
115 assertEquals(YEAR_POS_END, anFPField.getEndIndex());
119 * Test method for 'com.ibm.icu.text.DateFormat.format(Date)'
121 public final void testFormatDate() {
122 assertEqualDateString(aDF.format(aDate));
126 * Test method for 'com.ibm.icu.text.DateFormat.parse(String)'
128 public final void testParseString() throws Exception {
129 assertEquals(aDate, aDF.parse(aDateTimeString));
133 * Test method for 'com.ibm.icu.text.DateFormat.parse(String, Calendar, ParsePosition)'
135 public final void testParseStringCalendarParsePosition() {
136 aDF.parse(aDateTimeString, aCal, new ParsePosition(0));
137 assertEquals(aDate, aCal.getTime());
141 * Test method for 'com.ibm.icu.text.DateFormat.parse(String, ParsePosition)'
143 public final void testParseStringParsePosition() {
144 assertEquals(aDate, aDF.parse(aDateTimeString, new ParsePosition(0)));
148 * Test method for 'com.ibm.icu.text.DateFormat.parseObject(String, ParsePosition)'
150 public final void testParseObjectStringParsePosition() {
151 assertEquals(aDate, aDF.parseObject(aDateTimeString, new ParsePosition(0)));
155 * Test method for 'com.ibm.icu.text.DateFormat.getTimeInstance()'
157 public final void testGetTimeInstance() {
158 assertEquals(aTimeString, DateFormat.getTimeInstance().format(aDate));
162 * Test method for 'com.ibm.icu.text.DateFormat.getTimeInstance(int)'
164 public final void testGetTimeInstanceInt() {
165 assertEquals(aTimeString, DateFormat.getTimeInstance(DateFormat.MEDIUM).format(aDate));
169 * Test method for 'com.ibm.icu.text.DateFormat.getTimeInstance(int, Locale)'
171 public final void testGetTimeInstanceIntLocale() {
172 assertEquals(aTimeString, DateFormat.getTimeInstance(DateFormat.MEDIUM, Locale.US).format(aDate));
176 * Test method for 'com.ibm.icu.text.DateFormat.getTimeInstance(int, ULocale)'
178 public final void testGetTimeInstanceIntULocale() {
179 assertEquals(aTimeString, DateFormat.getTimeInstance(DateFormat.MEDIUM, ULocale.US).format(aDate));
183 * Test method for 'com.ibm.icu.text.DateFormat.getDateInstance()'
185 public final void testGetDateInstance() {
186 assertEquals(aDateString, DateFormat.getDateInstance().format(aDate));
190 * Test method for 'com.ibm.icu.text.DateFormat.getDateInstance(int)'
192 public final void testGetDateInstanceInt() {
193 assertEquals(aDateString, DateFormat.getDateInstance(DateFormat.MEDIUM).format(aDate));
197 * Test method for 'com.ibm.icu.text.DateFormat.getDateInstance(int, Locale)'
199 public final void testGetDateInstanceIntLocale() {
200 assertEquals(aDateString, DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.US).format(aDate));
204 * Test method for 'com.ibm.icu.text.DateFormat.getDateInstance(int, ULocale)'
206 public final void testGetDateInstanceIntULocale() {
207 assertEquals(aDateString, DateFormat.getDateInstance(DateFormat.MEDIUM, ULocale.US).format(aDate));
211 * Test method for 'com.ibm.icu.text.DateFormat.getDateTimeInstance()'
213 public final void testGetDateTimeInstance() {
214 assertEquals(aDateTimeString, DateFormat.getDateTimeInstance().format(aDate));
218 * Test method for 'com.ibm.icu.text.DateFormat.getDateTimeInstance(int, int)'
220 public final void testGetDateTimeInstanceIntInt() {
221 assertEquals(aDateTimeString,
222 DateFormat.getDateTimeInstance(
223 DateFormat.MEDIUM, DateFormat.MEDIUM).format(aDate));
227 * Test method for 'com.ibm.icu.text.DateFormat.getDateTimeInstance(int, int, Locale)'
229 public final void testGetDateTimeInstanceIntIntLocale() {
230 assertEquals(aDateTimeString,
231 DateFormat.getDateTimeInstance(
232 DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.US).format(aDate));
236 * Test method for 'com.ibm.icu.text.DateFormat.getDateTimeInstance(int, int, ULocale)'
238 public final void testGetDateTimeInstanceIntIntULocale() {
239 assertEquals(aDateTimeString,
240 DateFormat.getDateTimeInstance(
241 DateFormat.MEDIUM, DateFormat.MEDIUM, ULocale.US).format(aDate));
245 * Test method for 'com.ibm.icu.text.DateFormat.getInstance()'
247 public final void testGetInstance() {
248 assertEquals(aShortDateTimeString, DateFormat.getInstance().format(aDate));
252 * Test method for 'com.ibm.icu.text.DateFormat.getAvailableLocales()'
254 public final void testGetAvailableLocales() {
255 Locale[] locales = DateFormat.getAvailableLocales();
256 if (ICUTestCase.testingWrapper) {
257 ICUTestCase.assertArraysEqual(java.text.DateFormat.getAvailableLocales(), locales);
259 assertNotNull(locales);
264 * Test method for 'com.ibm.icu.text.DateFormat.setCalendar(Calendar)'
266 public final void testSetCalendar() {
267 Calendar cal = Calendar.getInstance();
268 cal.setTimeZone(TimeZone.getTimeZone("EST"));
269 DateFormat df = DateFormat.getTimeInstance(DateFormat.SHORT);
271 assertEquals("8:17 AM", df.format(aDate));
275 * Test method for 'com.ibm.icu.text.DateFormat.getCalendar()'
277 public final void testGetCalendar() {
278 Calendar cal = Calendar.getInstance();
279 cal.setTimeZone(TimeZone.getTimeZone("EST"));
280 DateFormat df = DateFormat.getTimeInstance(DateFormat.SHORT);
282 assertEquals(cal, df.getCalendar());
286 * Test method for 'com.ibm.icu.text.DateFormat.setNumberFormat(NumberFormat)'
288 public final void testSetNumberFormat() {
289 // no easy way to test effect of setting the number format
290 NumberFormat nf = NumberFormat.getInstance();
291 DateFormat df = DateFormat.getTimeInstance(DateFormat.SHORT);
292 df.setNumberFormat(nf);
293 // note, can't actually USE the dateformat since it changes the calendar
294 assertEquals(nf, df.getNumberFormat());
298 * Test method for 'com.ibm.icu.text.DateFormat.getNumberFormat()'
300 public final void testGetNumberFormat() {
301 // see testSetNumberFormat
305 * Test method for 'com.ibm.icu.text.DateFormat.setTimeZone(TimeZone)'
307 public final void testSetTimeZone() {
308 DateFormat df = DateFormat.getTimeInstance(DateFormat.SHORT);
309 TimeZone tz = TimeZone.getTimeZone("EST");
311 assertEquals("8:17 AM", df.format(aDate));
315 * Test method for 'com.ibm.icu.text.DateFormat.getTimeZone()'
317 public final void testGetTimeZone() {
318 DateFormat df = DateFormat.getTimeInstance(DateFormat.SHORT);
319 TimeZone tz = TimeZone.getTimeZone("EST");
321 assertEquals(tz, df.getTimeZone());
325 * Test method for 'com.ibm.icu.text.DateFormat.setLenient(boolean)'
327 public final void testSetLenient() throws Exception {
328 DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
329 df.parse("2/31/90"); // succeeds, default is lenient
330 df.setLenient(false);
333 throw new Exception("strict parse should have failed");
335 catch (ParseException e) {
336 // ok, this is what we expect
341 * Test method for 'com.ibm.icu.text.DateFormat.isLenient()'
343 public final void testIsLenient() {
344 DateFormat df = DateFormat.getInstance();
345 assertTrue(df.isLenient());
346 df.setLenient(false);
347 assertFalse(df.isLenient());
351 * Test method for 'com.ibm.icu.text.DateFormat.getDateInstance(Calendar, int, Locale)'
353 public final void testGetDateInstanceCalendarIntLocale() {
354 assertEquals(aDateString, DateFormat.getDateInstance(aCal, DateFormat.MEDIUM, Locale.US).format(aDate));
358 * Test method for 'com.ibm.icu.text.DateFormat.getDateInstance(Calendar, int, ULocale)'
360 public final void testGetDateInstanceCalendarIntULocale() {
361 assertEquals(aDateString, DateFormat.getDateInstance(aCal, DateFormat.MEDIUM, ULocale.US).format(aDate));
365 * Test method for 'com.ibm.icu.text.DateFormat.getTimeInstance(Calendar, int, Locale)'
367 public final void testGetTimeInstanceCalendarIntLocale() {
368 assertEquals(anESTTimeString, DateFormat.getTimeInstance(anESTCal, DateFormat.MEDIUM, Locale.US).format(aDate));
372 * Test method for 'com.ibm.icu.text.DateFormat.getTimeInstance(Calendar, int, ULocale)'
374 public final void testGetTimeInstanceCalendarIntULocale() {
375 assertEquals(anESTTimeString, DateFormat.getTimeInstance(anESTCal, DateFormat.MEDIUM, ULocale.US).format(aDate));
379 * Test method for 'com.ibm.icu.text.DateFormat.getDateTimeInstance(Calendar, int, int, Locale)'
381 public final void testGetDateTimeInstanceCalendarIntIntLocale() {
382 assertEquals(aDefaultESTDateTimeString, DateFormat.getDateTimeInstance(anESTCal, DateFormat.MEDIUM, DateFormat.SHORT, Locale.US).format(aDate));
386 * Test method for 'com.ibm.icu.text.DateFormat.getDateTimeInstance(Calendar, int, int, ULocale)'
388 public final void testGetDateTimeInstanceCalendarIntIntULocale() {
389 assertEquals(aDefaultESTDateTimeString, DateFormat.getDateTimeInstance(anESTCal, DateFormat.MEDIUM, DateFormat.SHORT, ULocale.US).format(aDate));
393 * Test method for 'com.ibm.icu.text.DateFormat.getInstance(Calendar, Locale)'
395 public final void testGetInstanceCalendarLocale() {
396 assertEquals(aDefaultESTDateTimeString, DateFormat.getInstance(anESTCal, Locale.US).format(aDate));
400 * Test method for 'com.ibm.icu.text.DateFormat.getInstance(Calendar, ULocale)'
402 public final void testGetInstanceCalendarULocale() {
403 assertEquals(aDefaultESTDateTimeString, DateFormat.getInstance(anESTCal, ULocale.US).format(aDate));
407 * Test method for 'com.ibm.icu.text.DateFormat.getInstance(Calendar)'
409 public final void testGetInstanceCalendar() {
410 assertEquals(aDefaultESTDateTimeString, DateFormat.getInstance(anESTCal).format(aDate));
414 * Test method for 'com.ibm.icu.text.DateFormat.getDateInstance(Calendar, int)'
416 public final void testGetDateInstanceCalendarInt() {
417 assertEquals(aDateString, DateFormat.getDateInstance(aCal, DateFormat.MEDIUM).format(aDate));
421 * Test method for 'com.ibm.icu.text.DateFormat.getTimeInstance(Calendar, int)'
423 public final void testGetTimeInstanceCalendarInt() {
424 assertEquals(anESTTimeString, DateFormat.getTimeInstance(anESTCal, DateFormat.MEDIUM).format(aDate));
428 * Test method for 'com.ibm.icu.text.DateFormat.getDateTimeInstance(Calendar, int, int)'
430 public final void testGetDateTimeInstanceCalendarIntInt() {
431 assertEquals(aDefaultESTDateTimeString, DateFormat.getDateTimeInstance(anESTCal, DateFormat.MEDIUM, DateFormat.SHORT).format(aDate));
435 * Test method for 'com.ibm.icu.text.DateFormat.toString()'
437 public final void testToString() {
438 assertNotNull(aDF.toString());
442 * Test method for 'com.ibm.icu.text.DateFormat.clone()'
444 public final void testClone() {
449 * Test method for 'com.ibm.icu.text.DateFormat.equals(Object)'
451 public final void testEqualsObject() {