1// © 2016 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html#License
3/*
4 *******************************************************************************
5 * Copyright (C) 2006-2011, International Business Machines Corporation and    *
6 * others. All Rights Reserved.                                                *
7 *******************************************************************************
8 */
9
10package com.ibm.icu.tests;
11
12import java.text.FieldPosition;
13import java.text.ParseException;
14import java.text.ParsePosition;
15import java.util.Date;
16import java.util.Locale;
17
18import com.ibm.icu.text.DateFormatSymbols;
19import com.ibm.icu.text.SimpleDateFormat;
20import com.ibm.icu.util.Calendar;
21import com.ibm.icu.util.TimeZone;
22import com.ibm.icu.util.ULocale;
23
24public class SimpleDateFormatTest extends ICUTestCase {
25    private static final String mdy = "MMM dd yyyy";
26    private static final String md2 = "MMM dd yy";
27    private static final String hmz = "'The time is' HH:mm:ss zzz";
28    private static final String hmzmdy = hmz + " 'on' " + mdy;
29    private static final String hmzmdyStr = "The time is 15:05:20 CST on Jan 10 2006";
30
31    private static final TimeZone tzc = TimeZone.getTimeZone("CST");
32    private static final TimeZone tzp = TimeZone.getTimeZone("PST");
33    private static final Calendar cal = Calendar.getInstance(tzc);
34    private static final Date date;
35    static {
36        cal.clear();
37        cal.set(2006, 0, 10, 15, 5, 20); // arrgh, doesn't clear millis
38        date = cal.getTime();
39    }
40
41    /*
42     * Test method for 'com.ibm.icu.text.SimpleDateFormat.format(Calendar, StringBuffer, FieldPosition)'
43     */
44    public void testFormatCalendarStringBufferFieldPosition() {
45        StringBuffer buf = new StringBuffer();
46        FieldPosition fp = new FieldPosition(0);
47        SimpleDateFormat sdf = new SimpleDateFormat(hmzmdy);
48        sdf.format(cal, buf, fp);
49        assertEquals(hmzmdyStr, buf.toString());
50    }
51
52    /*
53     * Test method for 'com.ibm.icu.text.SimpleDateFormat.parse(String, Calendar, ParsePosition)'
54     */
55    public void testParseStringCalendarParsePosition() {
56        Calendar cal = Calendar.getInstance(tzp);
57        cal.clear();
58        ParsePosition pp = new ParsePosition(0);
59        SimpleDateFormat sdf = new SimpleDateFormat(hmzmdy);
60        sdf.parse(hmzmdyStr, cal, pp);
61        assertEquals(date, cal.getTime());
62        // note: java doesn't return the parsed time zone
63    }
64
65    /*
66     * Test method for 'com.ibm.icu.text.SimpleDateFormat.clone()'
67     */
68    public void testClone() {
69
70    }
71
72    /*
73     * Test method for 'com.ibm.icu.text.SimpleDateFormat.SimpleDateFormat()'
74     */
75    public void testSimpleDateFormat() {
76        SimpleDateFormat sdf = new SimpleDateFormat();
77        java.text.SimpleDateFormat jsdf = new java.text.SimpleDateFormat();
78        assertEquals(jsdf.format(date), sdf.format(date));
79    }
80
81    /*
82     * Test method for 'com.ibm.icu.text.SimpleDateFormat.SimpleDateFormat(String)'
83     */
84    public void testSimpleDateFormatString() {
85        SimpleDateFormat sdf = new SimpleDateFormat(mdy);
86        java.text.SimpleDateFormat jsdf = new java.text.SimpleDateFormat(mdy);
87        assertEquals(jsdf.format(date), sdf.format(date));
88    }
89
90    /*
91     * Test method for 'com.ibm.icu.text.SimpleDateFormat.SimpleDateFormat(String, Locale)'
92     */
93    public void testSimpleDateFormatStringLocale() {
94        Locale l = Locale.JAPAN;
95        SimpleDateFormat sdf = new SimpleDateFormat(mdy, l);
96        java.text.SimpleDateFormat jsdf = new java.text.SimpleDateFormat(mdy, l);
97        assertEquals(jsdf.format(date), sdf.format(date));
98    }
99
100    /*
101     * Test method for 'com.ibm.icu.text.SimpleDateFormat.SimpleDateFormat(String, ULocale)'
102     */
103    public void testSimpleDateFormatStringULocale() {
104        ULocale l = ULocale.JAPAN;
105        SimpleDateFormat sdf = new SimpleDateFormat(mdy, l);
106        java.text.SimpleDateFormat jsdf = new java.text.SimpleDateFormat(mdy, l.toLocale());
107        assertEquals(jsdf.format(date), sdf.format(date));
108    }
109
110    /*
111     * Test method for 'com.ibm.icu.text.SimpleDateFormat.SimpleDateFormat(String, DateFormatSymbols)'
112     */
113    public void testSimpleDateFormatStringDateFormatSymbols() {
114        Locale l = Locale.US;
115        DateFormatSymbols dfs = new DateFormatSymbols(l);
116        java.text.DateFormatSymbols jdfs = new java.text.DateFormatSymbols(l);
117        SimpleDateFormat sdf = new SimpleDateFormat(mdy, dfs);
118        java.text.SimpleDateFormat jsdf = new java.text.SimpleDateFormat(mdy, jdfs);
119        assertEquals(jsdf.format(date), sdf.format(date));
120    }
121
122    /*
123     * Test method for 'com.ibm.icu.text.SimpleDateFormat.set2DigitYearStart(Date)'
124     */
125    public void testSet2DigitYearStart() {
126        SimpleDateFormat sdf = new SimpleDateFormat(md2);
127        sdf.set2DigitYearStart(date);
128        try {
129            Date d = sdf.parse("Jan 15 04");
130            assertNotEqual(-1, d.toString().indexOf("2104"));
131        }
132        catch (ParseException pe) {
133            fail(pe.getMessage());
134        }
135    }
136
137    /*
138     * Test method for 'com.ibm.icu.text.SimpleDateFormat.get2DigitYearStart()'
139     */
140    public void testGet2DigitYearStart() {
141        SimpleDateFormat sdf = new SimpleDateFormat(md2);
142        sdf.set2DigitYearStart(date);
143        assertEquals(date, sdf.get2DigitYearStart());
144    }
145
146    /*
147     * Test method for 'com.ibm.icu.text.SimpleDateFormat.toPattern()'
148     */
149    public void testToPattern() {
150        SimpleDateFormat sdf = new SimpleDateFormat(mdy);
151        assertEquals(mdy, sdf.toPattern());
152    }
153
154    /*
155     * Test method for 'com.ibm.icu.text.SimpleDateFormat.toLocalizedPattern()'
156     */
157    public void testToLocalizedPattern() {
158        Locale l = Locale.getDefault();
159        Locale.setDefault(Locale.US);
160        SimpleDateFormat sdf = new SimpleDateFormat(mdy);
161        assertEquals(mdy, sdf.toLocalizedPattern());
162        Locale.setDefault(l);
163    }
164
165    /*
166     * Test method for 'com.ibm.icu.text.SimpleDateFormat.applyPattern(String)'
167     */
168    public void testApplyPattern() {
169        SimpleDateFormat sdf = new SimpleDateFormat();
170        sdf.setTimeZone(tzc);
171        sdf.applyPattern(hmzmdy);
172        assertEquals(hmzmdyStr, sdf.format(date));
173    }
174
175    /*
176     * Test method for 'com.ibm.icu.text.SimpleDateFormat.applyLocalizedPattern(String)'
177     */
178    public void testApplyLocalizedPattern() {
179        SimpleDateFormat sdf = new SimpleDateFormat();
180        sdf.setTimeZone(tzc);
181        sdf.applyLocalizedPattern(hmzmdy);
182        assertEquals(hmzmdyStr, sdf.format(date));
183    }
184
185    /*
186     * Test method for 'com.ibm.icu.text.SimpleDateFormat.getDateFormatSymbols()'
187     */
188    public void testGetDateFormatSymbols() {
189        DateFormatSymbols dfs = new DateFormatSymbols(Locale.US);
190        SimpleDateFormat sdf = new SimpleDateFormat(mdy, dfs);
191        assertEquals(dfs, sdf.getDateFormatSymbols());
192    }
193
194    /*
195     * Test method for 'com.ibm.icu.text.SimpleDateFormat.setDateFormatSymbols(DateFormatSymbols)'
196     */
197    public void testSetDateFormatSymbols() {
198        DateFormatSymbols dfs = new DateFormatSymbols(Locale.JAPAN);
199        SimpleDateFormat sdf = new SimpleDateFormat(hmzmdy);
200        sdf.setDateFormatSymbols(dfs);
201        // assumes Japanese symbols do not have gregorian month names
202        assertEquals(-1, sdf.format(date).indexOf("Jan"));
203    }
204}
205