]> granicus.if.org Git - icu/blob
1e1e7e9815ba5a1ce92a4eefef19c12d21fff622
[icu] /
1 /*
2  *******************************************************************************
3  * Copyright (C) 2006-2011, International Business Machines Corporation and    *
4  * others. All Rights Reserved.                                                *
5  *******************************************************************************
6  */
7
8 package com.ibm.icu.tests;
9
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;
15
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;
21
22 public class DateFormatTest extends ICUTestCase {
23     private Calendar aCal;
24     private Calendar anESTCal;
25     private Date aDate;
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;
36
37     private static int YEAR_POS_START = 8;
38     private static int YEAR_POS_END = 12;
39
40     protected void setUp() throws Exception {
41         super.setUp();
42                 
43         java.util.GregorianCalendar gcal = new java.util.GregorianCalendar();
44         gcal.clear();
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);
64     }
65
66     /*
67      * Test method for 'com.ibm.icu.text.DateFormat.hashCode()'
68      */
69     public final void testHashCode() {
70         DateFormat df = DateFormat.getInstance();
71         DateFormat eq = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
72         testEHCS(df, eq, aDF);
73     }
74
75     /*
76      * Test method for 'com.ibm.icu.text.DateFormat.DateFormat(DateFormat)'
77      */
78     public final void testDateFormat() {
79         DateFormat df = new DateFormat(java.text.DateFormat.getInstance());
80         assertEquals(DateFormat.getInstance(), df);
81     }
82
83     private void assertEqualDateString(StringBuffer buf) {
84         assertEquals(aDateTimeString, buf.toString());
85     }
86         
87     private void assertEqualDateString(String str) {
88         assertEquals(aDateTimeString, str);
89     }
90         
91     /*
92      * Test method for 'com.ibm.icu.text.DateFormat.format(Object, StringBuffer, FieldPosition)'
93      */
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());
98     }
99
100     /*
101      * Test method for 'com.ibm.icu.text.DateFormat.format(Calendar, StringBuffer, FieldPosition)'
102      */
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());
107     }
108
109     /*
110      * Test method for 'com.ibm.icu.text.DateFormat.format(Date, StringBuffer, FieldPosition)'
111      */
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());
116     }
117
118     /*
119      * Test method for 'com.ibm.icu.text.DateFormat.format(Date)'
120      */
121     public final void testFormatDate() {
122         assertEqualDateString(aDF.format(aDate));
123     }
124
125     /*
126      * Test method for 'com.ibm.icu.text.DateFormat.parse(String)'
127      */
128     public final void testParseString() throws Exception {
129         assertEquals(aDate, aDF.parse(aDateTimeString));
130     }
131
132     /*
133      * Test method for 'com.ibm.icu.text.DateFormat.parse(String, Calendar, ParsePosition)'
134      */
135     public final void testParseStringCalendarParsePosition() {
136         aDF.parse(aDateTimeString, aCal, new ParsePosition(0));
137         assertEquals(aDate, aCal.getTime());
138     }
139
140     /*
141      * Test method for 'com.ibm.icu.text.DateFormat.parse(String, ParsePosition)'
142      */
143     public final void testParseStringParsePosition() {
144         assertEquals(aDate, aDF.parse(aDateTimeString, new ParsePosition(0)));
145     }
146
147     /*
148      * Test method for 'com.ibm.icu.text.DateFormat.parseObject(String, ParsePosition)'
149      */
150     public final void testParseObjectStringParsePosition() {
151         assertEquals(aDate, aDF.parseObject(aDateTimeString, new ParsePosition(0)));
152     }
153
154     /*
155      * Test method for 'com.ibm.icu.text.DateFormat.getTimeInstance()'
156      */
157     public final void testGetTimeInstance() {
158         assertEquals(aTimeString, DateFormat.getTimeInstance().format(aDate));
159     }
160
161     /*
162      * Test method for 'com.ibm.icu.text.DateFormat.getTimeInstance(int)'
163      */
164     public final void testGetTimeInstanceInt() {
165         assertEquals(aTimeString, DateFormat.getTimeInstance(DateFormat.MEDIUM).format(aDate));
166     }
167
168     /*
169      * Test method for 'com.ibm.icu.text.DateFormat.getTimeInstance(int, Locale)'
170      */
171     public final void testGetTimeInstanceIntLocale() {
172         assertEquals(aTimeString, DateFormat.getTimeInstance(DateFormat.MEDIUM, Locale.US).format(aDate));
173     }
174
175     /*
176      * Test method for 'com.ibm.icu.text.DateFormat.getTimeInstance(int, ULocale)'
177      */
178     public final void testGetTimeInstanceIntULocale() {
179         assertEquals(aTimeString, DateFormat.getTimeInstance(DateFormat.MEDIUM, ULocale.US).format(aDate));
180     }
181
182     /*
183      * Test method for 'com.ibm.icu.text.DateFormat.getDateInstance()'
184      */
185     public final void testGetDateInstance() {
186         assertEquals(aDateString, DateFormat.getDateInstance().format(aDate));
187     }
188
189     /*
190      * Test method for 'com.ibm.icu.text.DateFormat.getDateInstance(int)'
191      */
192     public final void testGetDateInstanceInt() {
193         assertEquals(aDateString, DateFormat.getDateInstance(DateFormat.MEDIUM).format(aDate));
194     }
195
196     /*
197      * Test method for 'com.ibm.icu.text.DateFormat.getDateInstance(int, Locale)'
198      */
199     public final void testGetDateInstanceIntLocale() {
200         assertEquals(aDateString, DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.US).format(aDate));
201     }
202
203     /*
204      * Test method for 'com.ibm.icu.text.DateFormat.getDateInstance(int, ULocale)'
205      */
206     public final void testGetDateInstanceIntULocale() {
207         assertEquals(aDateString, DateFormat.getDateInstance(DateFormat.MEDIUM, ULocale.US).format(aDate));
208     }
209
210     /*
211      * Test method for 'com.ibm.icu.text.DateFormat.getDateTimeInstance()'
212      */
213     public final void testGetDateTimeInstance() {
214         assertEquals(aDateTimeString, DateFormat.getDateTimeInstance().format(aDate));
215     }
216
217     /*
218      * Test method for 'com.ibm.icu.text.DateFormat.getDateTimeInstance(int, int)'
219      */
220     public final void testGetDateTimeInstanceIntInt() {
221         assertEquals(aDateTimeString, 
222                      DateFormat.getDateTimeInstance(
223                                                     DateFormat.MEDIUM, DateFormat.MEDIUM).format(aDate));
224     }
225
226     /*
227      * Test method for 'com.ibm.icu.text.DateFormat.getDateTimeInstance(int, int, Locale)'
228      */
229     public final void testGetDateTimeInstanceIntIntLocale() {
230         assertEquals(aDateTimeString, 
231                      DateFormat.getDateTimeInstance(
232                                                     DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.US).format(aDate));
233     }
234
235     /*
236      * Test method for 'com.ibm.icu.text.DateFormat.getDateTimeInstance(int, int, ULocale)'
237      */
238     public final void testGetDateTimeInstanceIntIntULocale() {
239         assertEquals(aDateTimeString, 
240                      DateFormat.getDateTimeInstance(
241                                                     DateFormat.MEDIUM, DateFormat.MEDIUM, ULocale.US).format(aDate));
242     }
243
244     /*
245      * Test method for 'com.ibm.icu.text.DateFormat.getInstance()'
246      */
247     public final void testGetInstance() {
248         assertEquals(aShortDateTimeString, DateFormat.getInstance().format(aDate));
249     }
250
251     /*
252      * Test method for 'com.ibm.icu.text.DateFormat.getAvailableLocales()'
253      */
254     public final void testGetAvailableLocales() {
255         Locale[] locales = DateFormat.getAvailableLocales();
256         if (ICUTestCase.testingWrapper) {
257             ICUTestCase.assertArraysEqual(java.text.DateFormat.getAvailableLocales(), locales);
258         } else {
259             assertNotNull(locales);
260         }
261     }
262
263     /*
264      * Test method for 'com.ibm.icu.text.DateFormat.setCalendar(Calendar)'
265      */
266     public final void testSetCalendar() {
267         Calendar cal = Calendar.getInstance();
268         cal.setTimeZone(TimeZone.getTimeZone("EST"));
269         DateFormat df = DateFormat.getTimeInstance(DateFormat.SHORT);
270         df.setCalendar(cal);
271         assertEquals("8:17 AM", df.format(aDate));
272     }
273
274     /*
275      * Test method for 'com.ibm.icu.text.DateFormat.getCalendar()'
276      */
277     public final void testGetCalendar() {
278         Calendar cal = Calendar.getInstance();
279         cal.setTimeZone(TimeZone.getTimeZone("EST"));
280         DateFormat df = DateFormat.getTimeInstance(DateFormat.SHORT);
281         df.setCalendar(cal);
282         assertEquals(cal, df.getCalendar());
283     }
284
285     /*
286      * Test method for 'com.ibm.icu.text.DateFormat.setNumberFormat(NumberFormat)'
287      */
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());
295     }
296
297     /*
298      * Test method for 'com.ibm.icu.text.DateFormat.getNumberFormat()'
299      */
300     public final void testGetNumberFormat() {
301         // see testSetNumberFormat
302     }
303
304     /*
305      * Test method for 'com.ibm.icu.text.DateFormat.setTimeZone(TimeZone)'
306      */
307     public final void testSetTimeZone() {
308         DateFormat df = DateFormat.getTimeInstance(DateFormat.SHORT);
309         TimeZone tz = TimeZone.getTimeZone("EST");
310         df.setTimeZone(tz);
311         assertEquals("8:17 AM", df.format(aDate));
312     }
313
314     /*
315      * Test method for 'com.ibm.icu.text.DateFormat.getTimeZone()'
316      */
317     public final void testGetTimeZone() {
318         DateFormat df = DateFormat.getTimeInstance(DateFormat.SHORT);
319         TimeZone tz = TimeZone.getTimeZone("EST");
320         df.setTimeZone(tz);
321         assertEquals(tz, df.getTimeZone());
322     }
323
324     /*
325      * Test method for 'com.ibm.icu.text.DateFormat.setLenient(boolean)'
326      */
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);
331         try {
332             df.parse("2/31/90");
333             throw new Exception("strict parse should have failed");
334         }
335         catch (ParseException e) {
336             // ok, this is what we expect
337         }
338     }
339
340     /*
341      * Test method for 'com.ibm.icu.text.DateFormat.isLenient()'
342      */
343     public final void testIsLenient() {
344         DateFormat df = DateFormat.getInstance();
345         assertTrue(df.isLenient());
346         df.setLenient(false);
347         assertFalse(df.isLenient());
348     }
349
350     /*
351      * Test method for 'com.ibm.icu.text.DateFormat.getDateInstance(Calendar, int, Locale)'
352      */
353     public final void testGetDateInstanceCalendarIntLocale() {
354         assertEquals(aDateString, DateFormat.getDateInstance(aCal, DateFormat.MEDIUM, Locale.US).format(aDate));
355     }
356
357     /*
358      * Test method for 'com.ibm.icu.text.DateFormat.getDateInstance(Calendar, int, ULocale)'
359      */
360     public final void testGetDateInstanceCalendarIntULocale() {
361         assertEquals(aDateString, DateFormat.getDateInstance(aCal, DateFormat.MEDIUM, ULocale.US).format(aDate));
362     }
363
364     /*
365      * Test method for 'com.ibm.icu.text.DateFormat.getTimeInstance(Calendar, int, Locale)'
366      */
367     public final void testGetTimeInstanceCalendarIntLocale() {
368         assertEquals(anESTTimeString, DateFormat.getTimeInstance(anESTCal, DateFormat.MEDIUM, Locale.US).format(aDate));
369     }
370
371     /*
372      * Test method for 'com.ibm.icu.text.DateFormat.getTimeInstance(Calendar, int, ULocale)'
373      */
374     public final void testGetTimeInstanceCalendarIntULocale() {
375         assertEquals(anESTTimeString, DateFormat.getTimeInstance(anESTCal, DateFormat.MEDIUM, ULocale.US).format(aDate));
376     }
377
378     /*
379      * Test method for 'com.ibm.icu.text.DateFormat.getDateTimeInstance(Calendar, int, int, Locale)'
380      */
381     public final void testGetDateTimeInstanceCalendarIntIntLocale() {
382         assertEquals(aDefaultESTDateTimeString, DateFormat.getDateTimeInstance(anESTCal, DateFormat.MEDIUM, DateFormat.SHORT, Locale.US).format(aDate));
383     }
384
385     /*
386      * Test method for 'com.ibm.icu.text.DateFormat.getDateTimeInstance(Calendar, int, int, ULocale)'
387      */
388     public final void testGetDateTimeInstanceCalendarIntIntULocale() {
389         assertEquals(aDefaultESTDateTimeString, DateFormat.getDateTimeInstance(anESTCal, DateFormat.MEDIUM, DateFormat.SHORT, ULocale.US).format(aDate));
390     }
391
392     /*
393      * Test method for 'com.ibm.icu.text.DateFormat.getInstance(Calendar, Locale)'
394      */
395     public final void testGetInstanceCalendarLocale() {
396         assertEquals(aDefaultESTDateTimeString, DateFormat.getInstance(anESTCal, Locale.US).format(aDate));
397     }
398
399     /*
400      * Test method for 'com.ibm.icu.text.DateFormat.getInstance(Calendar, ULocale)'
401      */
402     public final void testGetInstanceCalendarULocale() {
403         assertEquals(aDefaultESTDateTimeString, DateFormat.getInstance(anESTCal, ULocale.US).format(aDate));
404     }
405
406     /*
407      * Test method for 'com.ibm.icu.text.DateFormat.getInstance(Calendar)'
408      */
409     public final void testGetInstanceCalendar() {
410         assertEquals(aDefaultESTDateTimeString, DateFormat.getInstance(anESTCal).format(aDate));
411     }
412
413     /*
414      * Test method for 'com.ibm.icu.text.DateFormat.getDateInstance(Calendar, int)'
415      */
416     public final void testGetDateInstanceCalendarInt() {
417         assertEquals(aDateString, DateFormat.getDateInstance(aCal, DateFormat.MEDIUM).format(aDate));
418     }
419
420     /*
421      * Test method for 'com.ibm.icu.text.DateFormat.getTimeInstance(Calendar, int)'
422      */
423     public final void testGetTimeInstanceCalendarInt() {
424         assertEquals(anESTTimeString, DateFormat.getTimeInstance(anESTCal, DateFormat.MEDIUM).format(aDate));
425     }
426
427     /*
428      * Test method for 'com.ibm.icu.text.DateFormat.getDateTimeInstance(Calendar, int, int)'
429      */
430     public final void testGetDateTimeInstanceCalendarIntInt() {
431         assertEquals(aDefaultESTDateTimeString, DateFormat.getDateTimeInstance(anESTCal, DateFormat.MEDIUM, DateFormat.SHORT).format(aDate));
432     }
433
434     /*
435      * Test method for 'com.ibm.icu.text.DateFormat.toString()'
436      */
437     public final void testToString() {
438         assertNotNull(aDF.toString());
439     }
440
441     /*
442      * Test method for 'com.ibm.icu.text.DateFormat.clone()'
443      */
444     public final void testClone() {
445         // see testHashCode
446     }
447
448     /*
449      * Test method for 'com.ibm.icu.text.DateFormat.equals(Object)'
450      */
451     public final void testEqualsObject() {
452         // see testHashCode
453     }
454 }