174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes/*
2994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more
3994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * contributor license agreements.  See the NOTICE file distributed with
4994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * this work for additional information regarding copyright ownership.
5994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
6994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * (the "License"); you may not use this file except in compliance with
7994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * the License.  You may obtain a copy of the License at
874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes *
9994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
1074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes *
11994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * Unless required by applicable law or agreed to in writing, software
12994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
13994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * See the License for the specific language governing permissions and
15994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * limitations under the License.
16994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes */
17994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughespackage org.apache.harmony.tests.java.text;
18994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
19994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.DateFormat;
20994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.DateFormatSymbols;
21994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.FieldPosition;
22994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.ParseException;
23994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.ParsePosition;
24994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.SimpleDateFormat;
25994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.util.Calendar;
26994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.util.Date;
27994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.util.GregorianCalendar;
28994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.util.Locale;
29994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.util.SimpleTimeZone;
30994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.util.TimeZone;
31994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
32994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
33994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughespublic class SimpleDateFormatTest extends junit.framework.TestCase {
34994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
35a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller    private SimpleDateFormat format;
36994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
37a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller    private SimpleDateFormat pFormat;
38018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
39018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes    private TimeZone previousDefaultTimeZone;
40018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
41018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes    @Override public void setUp() {
42018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        previousDefaultTimeZone = TimeZone.getDefault();
43018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));
44a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        format = new SimpleDateFormat("", Locale.ENGLISH);
45a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        pFormat = new SimpleDateFormat("", Locale.ENGLISH);
46018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes    }
47018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
48018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes    @Override public void tearDown() {
49018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        TimeZone.setDefault(previousDefaultTimeZone);
50018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes    }
51994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
52994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    public void test_Constructor() {
53994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // Test for method java.text.SimpleDateFormat()
54994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        SimpleDateFormat f2 = new SimpleDateFormat();
55994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        assertTrue("Wrong class", f2.getClass() == SimpleDateFormat.class);
56994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        assertTrue("Wrong default", f2.equals(DateFormat.getDateTimeInstance(
57994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes                DateFormat.SHORT, DateFormat.SHORT, Locale.getDefault())));
58a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertTrue("Wrong symbols", f2.getDateFormatSymbols().equals(new DateFormatSymbols()));
59a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertTrue("Doesn't work", f2.format(new Date()).getClass() == String.class);
60994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
61994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
62994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    public void test_ConstructorLjava_lang_String() {
63994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // Test for method java.text.SimpleDateFormat(java.lang.String)
64994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        SimpleDateFormat f2 = new SimpleDateFormat("yyyy");
65994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        assertTrue("Wrong class", f2.getClass() == SimpleDateFormat.class);
66994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        assertEquals("Wrong pattern", "yyyy", f2.toPattern());
67a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertTrue("Wrong locale", f2.equals(new SimpleDateFormat("yyyy", Locale.getDefault())));
68a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertTrue("Wrong symbols", f2.getDateFormatSymbols().equals(new DateFormatSymbols()));
69a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertTrue("Doesn't work", f2.format(new Date()).getClass() == String.class);
70994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
71994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // Invalid constructor value.
72994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        try {
73a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller            new SimpleDateFormat("this is an invalid simple date format");
74994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            fail("Expected test_ConstructorLjava_lang_String to throw IAE.");
75994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        } catch (IllegalArgumentException ex) {
76994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            // expected
7774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        }
78994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
79994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // Null string value
80994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        try {
81994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            new SimpleDateFormat(null);
82994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            fail("Expected test_ConstructorLjava_lang_String to throw NPE.");
83994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        } catch (NullPointerException ex) {
84994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            // expected
8574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        }
86994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
87994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
88994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    public void test_ConstructorLjava_lang_StringLjava_text_DateFormatSymbols() {
89994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // Test for method java.text.SimpleDateFormat(java.lang.String,
90994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // java.text.DateFormatSymbols)
91994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        DateFormatSymbols symbols = new DateFormatSymbols(Locale.ENGLISH);
92994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        symbols.setEras(new String[] { "Before", "After" });
93994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        SimpleDateFormat f2 = new SimpleDateFormat("y'y'yy", symbols);
94994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        assertTrue("Wrong class", f2.getClass() == SimpleDateFormat.class);
95994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        assertEquals("Wrong pattern", "y'y'yy", f2.toPattern());
96994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        assertTrue("Wrong symbols", f2.getDateFormatSymbols().equals(symbols));
97018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        assertTrue("Doesn't work", f2.format(new Date()).getClass() == String.class);
98018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
99018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        try {
100018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes            new SimpleDateFormat(null, symbols);
101018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes            fail();
102018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        } catch (NullPointerException expected) {
103018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        }
104018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
105018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        try {
106018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes            new SimpleDateFormat("eee", symbols);
107018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes            fail();
108018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        } catch (IllegalArgumentException expected) {
109018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        }
110994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
111994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
112994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    public void test_ConstructorLjava_lang_StringLjava_util_Locale() {
113994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // Test for method java.text.SimpleDateFormat(java.lang.String,
114994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // java.util.Locale)
115018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        SimpleDateFormat f2 = new SimpleDateFormat("'yyyy' MM yy", Locale.GERMAN);
116994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        assertTrue("Wrong class", f2.getClass() == SimpleDateFormat.class);
117994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        assertEquals("Wrong pattern", "'yyyy' MM yy", f2.toPattern());
118994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        assertTrue("Wrong symbols", f2.getDateFormatSymbols().equals(
119994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes                new DateFormatSymbols(Locale.GERMAN)));
120018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        assertTrue("Doesn't work", f2.format(new Date()).getClass() == String.class);
121018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
122018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        try {
123018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes            new SimpleDateFormat(null, Locale.GERMAN);
124018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes            fail();
125018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        } catch (NullPointerException expected) {
126018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        }
127018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        try {
128018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes            new SimpleDateFormat("eee", Locale.GERMAN);
129018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes            fail();
130018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        } catch (IllegalArgumentException expected) {
131018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        }
132994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
133994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
134994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    public void test_applyLocalizedPatternLjava_lang_String() {
135994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        SimpleDateFormat f2 = new SimpleDateFormat("y", new Locale("de", "CH"));
13674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        String pattern = "GyMdkHmsSEDFwWahKzZLc";
13774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        f2.applyLocalizedPattern(pattern);
13874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        assertEquals(pattern, f2.toPattern());
13974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        assertEquals(pattern, f2.toLocalizedPattern());
140994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
141994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // test invalid patterns
14274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        try {
14374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes            f2.applyLocalizedPattern("b");
14474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes            fail();
14574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        } catch (IllegalArgumentException expected) {
14674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        }
147994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
148994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        try {
14974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes            f2.applyLocalizedPattern("a '"); // Unterminated quote.
15074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes            fail();
15174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        } catch (IllegalArgumentException expected) {
152994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        }
153994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
154994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        try {
155994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            f2.applyLocalizedPattern(null);
15674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes            fail();
15774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        } catch (NullPointerException expected) {
158994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        }
159994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
160994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
161994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    public void test_applyPatternLjava_lang_String() {
162994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // Test for method void
163994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // java.text.SimpleDateFormat.applyPattern(java.lang.String)
164994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        SimpleDateFormat f2 = new SimpleDateFormat("y", new Locale("de", "CH"));
165994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        f2.applyPattern("GyMdkHmsSEDFwWahKz");
166994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        assertEquals("Wrong pattern", "GyMdkHmsSEDFwWahKz", f2.toPattern());
167994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
168994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // test invalid patterns
169994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        try {
170994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            f2.applyPattern("b");
171994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            fail("Expected IllegalArgumentException for pattern with invalid patter letter: b");
172994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        } catch (IllegalArgumentException e) {
173994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        }
174994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
175994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes//        try {
176994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes//            f2.applyPattern("u");
177994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes//            fail("Expected IllegalArgumentException for pattern with invalid patter letter: u");
178994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes//        } catch (IllegalArgumentException e) {
179994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes//        }
180994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
181994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        try {
182994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            f2.applyPattern("a '");
183994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            fail("Expected IllegalArgumentException for pattern with unterminated quote: a '");
184994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        } catch (IllegalArgumentException e) {
185994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        }
186994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
187994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        try {
188994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            f2.applyPattern(null);
189994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            fail("Expected NullPointerException for null pattern");
190994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        } catch (NullPointerException e) {
191994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        }
192994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
193994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
194994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    public void test_clone() {
195994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // Test for method java.lang.Object java.text.SimpleDateFormat.clone()
196994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        SimpleDateFormat f2 = new SimpleDateFormat();
197994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        SimpleDateFormat clone = (SimpleDateFormat) f2.clone();
198994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        assertTrue("Invalid clone", f2.equals(clone));
199994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        clone.applyPattern("y");
200994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        assertTrue("Format modified", !f2.equals(clone));
201994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        clone = (SimpleDateFormat) f2.clone();
202994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // Date date = clone.get2DigitYearStart();
203994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // date.setTime(0);
204994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // assertTrue("Equal after date change: " +
205994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // f2.get2DigitYearStart().getTime() + " " +
206994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // clone.get2DigitYearStart().getTime(), !f2.equals(clone));
207994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
208994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
209994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    public void test_equalsLjava_lang_Object() {
210994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // Test for method boolean
211994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // java.text.SimpleDateFormat.equals(java.lang.Object)
212994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        SimpleDateFormat format = (SimpleDateFormat) DateFormat.getInstance();
213994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        SimpleDateFormat clone = (SimpleDateFormat) format.clone();
214994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        assertTrue("clone not equal", format.equals(clone));
215994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        format.format(new Date());
216994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        assertTrue("not equal after format", format.equals(clone));
217994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
218994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
219994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    public void test_equals_afterFormat() {
220994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // Regression test for HARMONY-209
221994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        SimpleDateFormat df = new SimpleDateFormat();
222994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        df.format(new Date());
223994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        assertEquals(df, new SimpleDateFormat());
224018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes      }
225018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
226018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes    public void test_hashCode() {
227018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        SimpleDateFormat format = (SimpleDateFormat) DateFormat.getInstance();
228018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        SimpleDateFormat clone = (SimpleDateFormat) format.clone();
229018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        assertTrue("clone has not equal hash code", clone.hashCode() == format.hashCode());
230018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        format.format(new Date());
231a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertTrue("clone has not equal hash code after format",
232a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                clone.hashCode() == format.hashCode());
233018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        DateFormatSymbols symbols = new DateFormatSymbols(Locale.ENGLISH);
234018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        symbols.setEras(new String[] { "Before", "After" });
235018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        SimpleDateFormat format2 = new SimpleDateFormat("y'y'yy", symbols);
236018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        assertFalse("objects has equal hash code", format2.hashCode() == format.hashCode());
237994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
238994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
239994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    public void test_formatToCharacterIteratorLjava_lang_Object() {
240994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        try {
241994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            // Regression for HARMONY-466
242994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            new SimpleDateFormat().formatToCharacterIterator(null);
24374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes            fail();
24474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        } catch (NullPointerException expected) {
245994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        }
24674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
247994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // Test for method formatToCharacterIterator(java.lang.Object)
248994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        new Support_SimpleDateFormat(
249994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes                "test_formatToCharacterIteratorLjava_lang_Object")
250994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes                .t_formatToCharacterIterator();
251994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
252994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
253994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    public void test_formatLjava_util_DateLjava_lang_StringBufferLjava_text_FieldPosition() {
254994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // Test for method java.lang.StringBuffer
255994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // java.text.SimpleDateFormat.format(java.util.Date,
256994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // java.lang.StringBuffer, java.text.FieldPosition)
257994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
258994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        new Support_SimpleDateFormat(
259994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes                "test_formatLjava_util_DateLjava_lang_StringBufferLjava_text_FieldPosition")
260994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes                .t_format_with_FieldPosition();
261994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
262994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        Calendar cal = new GregorianCalendar(1999, Calendar.JUNE, 2, 15, 3, 6);
263a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" G", cal, " AD", DateFormat.ERA_FIELD);
264a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" GG", cal, " AD", DateFormat.ERA_FIELD);
265a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" GGG", cal, " AD", DateFormat.ERA_FIELD);
266a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" G", new GregorianCalendar(-1999, Calendar.JUNE, 2), " BC",
267a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                DateFormat.ERA_FIELD);
268994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
269018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        // This assumes Unicode behavior where 'y' and 'yyy' don't truncate,
270018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        // which means that it will fail on the RI.
271a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" y", cal, " 1999", DateFormat.YEAR_FIELD);
272a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" yy", cal, " 99", DateFormat.YEAR_FIELD);
273a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" yy", new GregorianCalendar(2001, Calendar.JUNE, 2), " 01",
274a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                DateFormat.YEAR_FIELD);
275a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" yy", new GregorianCalendar(2000, Calendar.JUNE, 2), " 00",
276a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                DateFormat.YEAR_FIELD);
277a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" yyy", new GregorianCalendar(2000, Calendar.JUNE, 2), " 2000",
278a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                DateFormat.YEAR_FIELD);
279a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" yyy", cal, " 1999", DateFormat.YEAR_FIELD);
280a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" yyyy", cal, " 1999", DateFormat.YEAR_FIELD);
281a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" yyyyy", cal, " 01999", DateFormat.YEAR_FIELD);
282a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller
283a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" M", cal, " 6", DateFormat.MONTH_FIELD);
284a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" M", new GregorianCalendar(1999, Calendar.NOVEMBER, 2), " 11",
285a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                DateFormat.MONTH_FIELD);
286a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" MM", cal, " 06", DateFormat.MONTH_FIELD);
287a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" MMM", cal, " Jun", DateFormat.MONTH_FIELD);
288a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" MMMM", cal, " June", DateFormat.MONTH_FIELD);
289a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" MMMMM", cal, " J", DateFormat.MONTH_FIELD);
290a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller
291a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" d", cal, " 2", DateFormat.DATE_FIELD);
292a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" d", new GregorianCalendar(1999, Calendar.NOVEMBER, 12), " 12",
293a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                DateFormat.DATE_FIELD);
294a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" dd", cal, " 02", DateFormat.DATE_FIELD);
295a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" dddd", cal, " 0002", DateFormat.DATE_FIELD);
296a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller
297a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" h", cal, " 3", DateFormat.HOUR1_FIELD);
298a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" h", new GregorianCalendar(1999, Calendar.NOVEMBER, 12), " 12",
299a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                DateFormat.HOUR1_FIELD);
300a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" hh", cal, " 03", DateFormat.HOUR1_FIELD);
301a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" hhhh", cal, " 0003", DateFormat.HOUR1_FIELD);
302a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller
303a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" H", cal, " 15", DateFormat.HOUR_OF_DAY0_FIELD);
304a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" H", new GregorianCalendar(1999, Calendar.NOVEMBER, 12, 4, 0), " 4",
305a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                DateFormat.HOUR_OF_DAY0_FIELD);
306a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" H", new GregorianCalendar(1999, Calendar.NOVEMBER, 12, 12, 0), " 12",
307a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                DateFormat.HOUR_OF_DAY0_FIELD);
308a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" H", new GregorianCalendar(1999, Calendar.NOVEMBER, 12), " 0",
309a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                DateFormat.HOUR_OF_DAY0_FIELD);
310a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" HH", cal, " 15", DateFormat.HOUR_OF_DAY0_FIELD);
311a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" HHHH", cal, " 0015", DateFormat.HOUR_OF_DAY0_FIELD);
312a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller
313a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" m", cal, " 3", DateFormat.MINUTE_FIELD);
314a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" m", new GregorianCalendar(1999, Calendar.NOVEMBER, 12, 4, 47), " 47",
315a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                DateFormat.MINUTE_FIELD);
316a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" mm", cal, " 03", DateFormat.MINUTE_FIELD);
317a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" mmmm", cal, " 0003", DateFormat.MINUTE_FIELD);
318a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller
319a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" s", cal, " 6", DateFormat.SECOND_FIELD);
320a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" s", new GregorianCalendar(1999, Calendar.NOVEMBER, 12, 4, 47, 13), " 13",
321a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                DateFormat.SECOND_FIELD);
322a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" ss", cal, " 06", DateFormat.SECOND_FIELD);
323a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" ssss", cal, " 0006", DateFormat.SECOND_FIELD);
324a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller
325a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" S", cal, " 0", DateFormat.MILLISECOND_FIELD);
326994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        Calendar temp = new GregorianCalendar();
327994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        temp.set(Calendar.MILLISECOND, 961);
328994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
329a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" SS", temp, " 96", DateFormat.MILLISECOND_FIELD);
330a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" SSSS", cal, " 0000", DateFormat.MILLISECOND_FIELD);
331994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
332a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" SS", cal, " 00", DateFormat.MILLISECOND_FIELD);
333994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
334a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" E", cal, " Wed", DateFormat.DAY_OF_WEEK_FIELD);
335a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" EE", cal, " Wed", DateFormat.DAY_OF_WEEK_FIELD);
336a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" EEE", cal, " Wed", DateFormat.DAY_OF_WEEK_FIELD);
337a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" EEEE", cal, " Wednesday", DateFormat.DAY_OF_WEEK_FIELD);
338a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" EEEEE", cal, " W", DateFormat.DAY_OF_WEEK_FIELD);
339994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
340a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" D", cal, " 153", DateFormat.DAY_OF_YEAR_FIELD);
341a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" DD", cal, " 153", DateFormat.DAY_OF_YEAR_FIELD);
342a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" DDDD", cal, " 0153", DateFormat.DAY_OF_YEAR_FIELD);
343994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
344a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" F", cal, " 1", DateFormat.DAY_OF_WEEK_IN_MONTH_FIELD);
345a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" F", new GregorianCalendar(1999, Calendar.NOVEMBER, 14), " 2",
346a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                DateFormat.DAY_OF_WEEK_IN_MONTH_FIELD);
347a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" FF", cal, " 01", DateFormat.DAY_OF_WEEK_IN_MONTH_FIELD);
348a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" FFFF", cal, " 0001", DateFormat.DAY_OF_WEEK_IN_MONTH_FIELD);
349994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
350018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        cal.setMinimalDaysInFirstWeek(1);
351018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        cal.setFirstDayOfWeek(1);
352018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
353a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" w", cal, " 23", DateFormat.WEEK_OF_YEAR_FIELD);
354a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" ww", cal, " 23", DateFormat.WEEK_OF_YEAR_FIELD);
355a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" wwww", cal, " 0023", DateFormat.WEEK_OF_YEAR_FIELD);
356a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller
357a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" W", cal, " 1", DateFormat.WEEK_OF_MONTH_FIELD);
358a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" WW", cal, " 01", DateFormat.WEEK_OF_MONTH_FIELD);
359a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" WWWW", cal, " 0001", DateFormat.WEEK_OF_MONTH_FIELD);
360a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller
361a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" a", cal, " PM", DateFormat.AM_PM_FIELD);
362a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" a", new GregorianCalendar(1999, Calendar.NOVEMBER, 14), " AM",
363a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                DateFormat.AM_PM_FIELD);
364a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" a", new GregorianCalendar(1999, Calendar.NOVEMBER, 14, 12, 0), " PM",
365a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                DateFormat.AM_PM_FIELD);
366a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" aa", cal, " PM", DateFormat.AM_PM_FIELD);
367a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" aaa", cal, " PM", DateFormat.AM_PM_FIELD);
368a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" aaaa", cal, " PM", DateFormat.AM_PM_FIELD);
369a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" aaaaa", cal, " PM", DateFormat.AM_PM_FIELD);
370a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller
371a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" k", cal, " 15", DateFormat.HOUR_OF_DAY1_FIELD);
372a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" k", new GregorianCalendar(1999, Calendar.NOVEMBER, 12, 4, 0), " 4",
373a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                DateFormat.HOUR_OF_DAY1_FIELD);
374a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" k", new GregorianCalendar(1999, Calendar.NOVEMBER, 12, 12, 0), " 12",
375a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                DateFormat.HOUR_OF_DAY1_FIELD);
376a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" k", new GregorianCalendar(1999, Calendar.NOVEMBER, 12), " 24",
377a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                DateFormat.HOUR_OF_DAY1_FIELD);
378a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" kk", cal, " 15", DateFormat.HOUR_OF_DAY1_FIELD);
379a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" kkkk", cal, " 0015", DateFormat.HOUR_OF_DAY1_FIELD);
380a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller
381a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" K", cal, " 3", DateFormat.HOUR0_FIELD);
382a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" K", new GregorianCalendar(1999, Calendar.NOVEMBER, 12), " 0",
383a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                DateFormat.HOUR0_FIELD);
384a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" KK", cal, " 03", DateFormat.HOUR0_FIELD);
385a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" KKKK", cal, " 0003", DateFormat.HOUR0_FIELD);
386994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
387018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        format.applyPattern("'Mkz''':.@5");
388018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        assertEquals("Wrong output", "Mkz':.@5", format.format(new Date()));
389018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
390018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        // Test invalid args to format.
391018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        SimpleDateFormat dateFormat = new SimpleDateFormat();
392018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        try {
393018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes            dateFormat.format(null, new StringBuffer(), new FieldPosition(1));
394018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes            fail();
395018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        } catch (NullPointerException expected) {
396018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        }
397018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes    }
398018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
399a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller    private void assertFormat(String pattern, Calendar cal, String expected, int field) {
400a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        StringBuffer buffer = new StringBuffer();
401a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        FieldPosition position = new FieldPosition(field);
402a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        format.applyPattern(pattern);
403a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        format.format(cal.getTime(), buffer, position);
404a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        String result = buffer.toString();
405a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertTrue("Wrong format: \"" + pattern + "\" expected: " + expected + " result: " + result,
406a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                result.equals(expected));
407a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertEquals("Wrong begin position: " + pattern + "\n" + "expected: " + expected + "\n" +
408a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                "field: " + field, 1, position.getBeginIndex());
409a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertTrue("Wrong end position: " + pattern + " expected: " + expected + " field: " + field,
410a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                position.getEndIndex() == result.length());
411a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller    }
412018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
413a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller    public void test_format_time_zones() throws Exception {
414018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        Calendar cal = new GregorianCalendar(1999, Calendar.JUNE, 2, 15, 3, 6);
415018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
416994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        format.setTimeZone(TimeZone.getTimeZone("EST"));
417a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" z", cal, " GMT-05:00", DateFormat.TIMEZONE_FIELD);
418994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        Calendar temp2 = new GregorianCalendar(1999, Calendar.JANUARY, 12);
419a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" z", temp2, " GMT-05:00", DateFormat.TIMEZONE_FIELD);
420a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" zz", cal, " GMT-05:00", DateFormat.TIMEZONE_FIELD);
421a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" zzz", cal, " GMT-05:00", DateFormat.TIMEZONE_FIELD);
422a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" zzzz", cal, " GMT-05:00", DateFormat.TIMEZONE_FIELD);
423a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" zzzz", temp2, " GMT-05:00", DateFormat.TIMEZONE_FIELD);
424a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" zzzzz", cal, " GMT-05:00", DateFormat.TIMEZONE_FIELD);
425994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
426018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        format.setTimeZone(TimeZone.getTimeZone("America/New_York"));
427a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" z", cal, " EDT", DateFormat.TIMEZONE_FIELD);
428a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" z", temp2, " EST", DateFormat.TIMEZONE_FIELD);
429a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" zz", cal, " EDT", DateFormat.TIMEZONE_FIELD);
430a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" zzz", cal, " EDT", DateFormat.TIMEZONE_FIELD);
431a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" zzzz", cal, " Eastern Daylight Time", DateFormat.TIMEZONE_FIELD);
432a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" zzzz", temp2, " Eastern Standard Time", DateFormat.TIMEZONE_FIELD);
433a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" zzzzz", cal, " Eastern Daylight Time", DateFormat.TIMEZONE_FIELD);
434018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
435018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        TimeZone tz0001 = new SimpleTimeZone(60000, "ONE MINUTE");
436018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        TimeZone tz0130 = new SimpleTimeZone(5400000, "ONE HOUR, THIRTY");
437018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        TimeZone tzMinus0130 = new SimpleTimeZone(-5400000, "NEG ONE HOUR, THIRTY");
438018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
439018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        format.setTimeZone(tz0001);
440a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller//        test(" Z", cal, " +0001", DateFormat.TIMEZONE_FIELD);
441a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller//        test(" ZZZZ", cal, " GMT+00:01", DateFormat.TIMEZONE_FIELD);
442a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller//        test(" ZZZZZ", cal, " +00:01", DateFormat.TIMEZONE_FIELD);
443018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        format.setTimeZone(tz0130);
444a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller//        test(" Z", cal, " +0130", DateFormat.TIMEZONE_FIELD);
445018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        format.setTimeZone(tzMinus0130);
446a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller//        test(" Z", cal, " -0130", DateFormat.TIMEZONE_FIELD);
447018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
448018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        format.setTimeZone(tz0001);
449a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" z", cal, " GMT+00:01", DateFormat.TIMEZONE_FIELD);
450a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" zzzz", cal, " GMT+00:01", DateFormat.TIMEZONE_FIELD);
451018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        format.setTimeZone(tz0130);
452a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" z", cal, " GMT+01:30", DateFormat.TIMEZONE_FIELD);
453018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        format.setTimeZone(tzMinus0130);
454a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertFormat(" z", cal, " GMT-01:30", DateFormat.TIMEZONE_FIELD);
455994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
456994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
457994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    public void test_timeZoneFormatting() {
458994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // tests specific to formatting of timezones
45974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        Date summerDate = new GregorianCalendar(1999, Calendar.JUNE, 2, 15, 3, 6).getTime();
46074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        Date winterDate = new GregorianCalendar(1999, Calendar.JANUARY, 12).getTime();
461994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
462a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        verifyFormatTimezone(
463a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                "America/Los_Angeles", "PDT, Pacific Daylight Time", "-0700, GMT-07:00",
464a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                summerDate);
465a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        verifyFormatTimezone(
466a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                "America/Los_Angeles", "PST, Pacific Standard Time", "-0800, GMT-08:00",
467a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                winterDate);
46874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
469a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        verifyFormatTimezone("GMT-7", "GMT-07:00, GMT-07:00", "-0700, GMT-07:00", summerDate);
470a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        verifyFormatTimezone("GMT-7", "GMT-07:00, GMT-07:00", "-0700, GMT-07:00", winterDate);
47174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
472a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        verifyFormatTimezone("GMT+14", "GMT+14:00, GMT+14:00", "+1400, GMT+14:00", summerDate);
473a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        verifyFormatTimezone("GMT+14", "GMT+14:00, GMT+14:00", "+1400, GMT+14:00", winterDate);
474994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
47574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        // this fails on the RI!
476a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        verifyFormatTimezone("America/Detroit", "EDT, Eastern Daylight Time", "-0400, GMT-04:00",
477a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                summerDate);
478a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        verifyFormatTimezone("America/Detroit", "EST, Eastern Standard Time", "-0500, GMT-05:00",
479a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                winterDate);
480994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
481994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // Pacific/Kiritimati is one of the timezones supported only in mJava
482a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        verifyFormatTimezone(
483a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                "Pacific/Kiritimati", "GMT+14:00, Line Islands Time", "+1400, GMT+14:00",
484a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                summerDate);
485a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        verifyFormatTimezone(
486a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                "Pacific/Kiritimati", "GMT+14:00, Line Islands Time", "+1400, GMT+14:00",
487a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                winterDate);
488a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller
489a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        verifyFormatTimezone("EST", "GMT-05:00, GMT-05:00", "-0500, GMT-05:00", summerDate);
490a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        verifyFormatTimezone("EST", "GMT-05:00, GMT-05:00", "-0500, GMT-05:00", winterDate);
491a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller
492a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        verifyFormatTimezone("GMT+14", "GMT+14:00, GMT+14:00", "+1400, GMT+14:00", summerDate);
493a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        verifyFormatTimezone("GMT+14", "GMT+14:00, GMT+14:00", "+1400, GMT+14:00", winterDate);
494a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller    }
49574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
496a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller    private void verifyFormatTimezone(String timeZoneId, String expected1, String expected2,
497a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller            Date date) {
498a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        format.setTimeZone(SimpleTimeZone.getTimeZone(timeZoneId));
499a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        format.applyPattern("z, zzzz");
500a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertEquals("Test z for TimeZone : " + timeZoneId, expected1, format.format(date));
50174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
502a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        format.applyPattern("Z, ZZZZ");
503a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertEquals("Test Z for TimeZone : " + timeZoneId, expected2, format.format(date));
504994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
505994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
506994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    public void test_get2DigitYearStart() {
507994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // Test for method java.util.Date
508994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // java.text.SimpleDateFormat.get2DigitYearStart()
509994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        SimpleDateFormat f1 = new SimpleDateFormat("y");
510994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        Date date = f1.get2DigitYearStart();
511994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        Calendar cal = new GregorianCalendar();
512994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        int year = cal.get(Calendar.YEAR);
513994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        cal.setTime(date);
514a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertTrue("Wrong default year start", cal.get(Calendar.YEAR) == (year - 80));
515994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
516994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
517994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    public void test_getDateFormatSymbols() {
518994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // Test for method java.text.DateFormatSymbols
519994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // java.text.SimpleDateFormat.getDateFormatSymbols()
520994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        SimpleDateFormat df = (SimpleDateFormat) DateFormat.getInstance();
521994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        DateFormatSymbols dfs = df.getDateFormatSymbols();
522994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        assertTrue("Symbols identical", dfs != df.getDateFormatSymbols());
523994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
524994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
525018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes    public void test_parseLjava_lang_StringLjava_text_ParsePosition() throws Exception {
526994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // Test for method java.util.Date
527994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // java.text.SimpleDateFormat.parse(java.lang.String,
528994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // java.text.ParsePosition)
529994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        Calendar cal = new GregorianCalendar(1970, Calendar.JANUARY, 1);
530994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        Date time = cal.getTime();
531a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("h", " 12", time, 1, 3);
532a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("H", " 0", time, 1, 2);
533a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("k", " 24", time, 1, 3);
534a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("K", " 0", time, 1, 2);
535994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
536994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        cal = new GregorianCalendar(1970, Calendar.JANUARY, 1, 1, 0);
537994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        time = cal.getTime();
538a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("h", "1", time, 0, 1);
539a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("H", "1 ", time, 0, 1);
540a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("k", "1", time, 0, 1);
541a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("K", "1", time, 0, 1);
542994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
543994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        cal = new GregorianCalendar(1970, Calendar.JANUARY, 1, 11, 0);
544994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        time = cal.getTime();
545a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("h", "0011 ", time, 0, 4);
546a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("K", "11", time, 0, 2);
547994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        cal = new GregorianCalendar(1970, Calendar.JANUARY, 1, 23, 0);
548994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        time = cal.getTime();
549a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("H", "23", time, 0, 2);
550a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("k", "23", time, 0, 2);
551994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
552a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("h a", " 3 AM", new GregorianCalendar(1970,
553994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes                Calendar.JANUARY, 1, 3, 0).getTime(), 1, 5);
554a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("K a", " 3 pm ", new GregorianCalendar(1970,
555994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes                Calendar.JANUARY, 1, 15, 0).getTime(), 1, 5);
556a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("m:s", "0:59 ", new GregorianCalendar(1970,
557994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes                Calendar.JANUARY, 1, 0, 0, 59).getTime(), 0, 4);
558a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("m:s", "59:0", new GregorianCalendar(1970, Calendar.JANUARY,
559994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes                1, 0, 59, 0).getTime(), 0, 4);
560a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("ms", "059", new GregorianCalendar(1970, Calendar.JANUARY,
561994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes                1, 0, 0, 59).getTime(), 0, 3);
562994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
563994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        cal = new GregorianCalendar(1970, Calendar.JANUARY, 1);
564a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("S", "0", cal.getTime(), 0, 1);
565994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        cal.setTimeZone(TimeZone.getTimeZone("HST"));
566994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        cal.set(Calendar.MILLISECOND, 999);
567a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("S z", "999 HST", cal.getTime(), 0, 7);
568994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
569994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        cal = new GregorianCalendar(1970, Calendar.JANUARY, 1);
570994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        cal.set(Calendar.ERA, GregorianCalendar.BC);
571a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("G", "Bc ", cal.getTime(), 0, 2);
572a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller
573a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("y", "00", new GregorianCalendar(2000, Calendar.JANUARY, 1).getTime(), 0, 2);
574a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("y", "99", new GregorianCalendar(1999, Calendar.JANUARY, 1).getTime(), 0, 2);
575a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("y", "1", new GregorianCalendar(1, Calendar.JANUARY, 1).getTime(), 0, 1);
576a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("y", "-1", new GregorianCalendar(-1, Calendar.JANUARY, 1).getTime(), 0, 2);
577a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("y", "001", new GregorianCalendar(1, Calendar.JANUARY, 1).getTime(), 0, 3);
578a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("y", "2005", new GregorianCalendar(2005, Calendar.JANUARY, 1).getTime(), 0, 4);
579a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("yy", "00", new GregorianCalendar(2000, Calendar.JANUARY, 1).getTime(), 0, 2);
580a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("yy", "99", new GregorianCalendar(1999, Calendar.JANUARY, 1).getTime(), 0, 2);
581a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("yy", "1", new GregorianCalendar(1, Calendar.JANUARY, 1).getTime(), 0, 1);
582a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("yy", "-1", new GregorianCalendar(-1, Calendar.JANUARY, 1).getTime(), 0, 2);
583a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("yy", "001", new GregorianCalendar(1, Calendar.JANUARY, 1).getTime(), 0, 3);
584a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("yy", "2005", new GregorianCalendar(2005, Calendar.JANUARY, 1).getTime(), 0, 4);
585a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("yyy", "99", new GregorianCalendar(99, Calendar.JANUARY, 1).getTime(), 0, 2);
586a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("yyy", "1", new GregorianCalendar(1, Calendar.JANUARY, 1).getTime(), 0, 1);
587a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("yyy", "-1", new GregorianCalendar(-1, Calendar.JANUARY, 1).getTime(), 0, 2);
588a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("yyy", "001", new GregorianCalendar(1, Calendar.JANUARY, 1).getTime(), 0, 3);
589a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("yyy", "2005", new GregorianCalendar(2005, Calendar.JANUARY, 1).getTime(),
590a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                0, 4);
591a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("yyyy", "99", new GregorianCalendar(99, Calendar.JANUARY, 1).getTime(), 0, 2);
592a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("yyyy", "  1999", new GregorianCalendar(1999, Calendar.JANUARY, 1).getTime(),
593a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                2, 6);
594a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("MM'M'", "4M", new GregorianCalendar(1970, Calendar.APRIL, 1).getTime(), 0, 2);
595a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("MMM", "Feb", new GregorianCalendar(1970, Calendar.FEBRUARY, 1).getTime(),
596a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                0, 3);
597a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("MMMM d", "April 14 ",
598a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                new GregorianCalendar(1970, Calendar.APRIL, 14).getTime(), 0, 8);
599a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("MMMMd", "April14 ", new GregorianCalendar(1970, Calendar.APRIL, 14).getTime(),
600a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                0, 7);
601a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("E w", "Mon 12", new GregorianCalendar(1970, Calendar.MARCH, 16).getTime(),
602a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                0, 6);
603a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("Ew", "Mon12", new GregorianCalendar(1970, Calendar.MARCH, 16).getTime(), 0, 5);
604a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("M EE ''W", "5 Tue '2", new GregorianCalendar(1970, Calendar.MAY, 5).getTime(),
605a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                0, 8);
606a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("MEE''W", "5Tue'2", new GregorianCalendar(1970, Calendar.MAY, 5).getTime(),
607a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                0, 6);
608a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("MMM EEE F", " JUL Sunday 3",
609a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                new GregorianCalendar(1970, Calendar.JULY, 19).getTime(), 1, 13);
610a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("MMMEEEF", " JULSunday3",
611a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                new GregorianCalendar(1970, Calendar.JULY, 19).getTime(), 1, 11);
612994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
613994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        cal = new GregorianCalendar(1970, Calendar.JANUARY, 1);
614994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        cal.setTimeZone(TimeZone.getTimeZone("GMT+0:1"));
615994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        cal.set(Calendar.DAY_OF_YEAR, 243);
616a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("D z", "243 GMT+0:0", cal.getTime(), 0, 11);
617994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        cal.setTimeZone(TimeZone.getTimeZone("EST"));
618994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        cal.set(1970, Calendar.JANUARY, 1, 4, 30);
619a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("h:m z", "4:30 GMT-5 ", cal.getTime(), 0, 10);
620a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("h z", "14 GMT-24 ", new Date(51840000), 0, 9);
621a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("h z", "14 GMT-23 ", new Date(133200000), 0, 9);
622a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("h z", "14 GMT-0001 ", new Date(54000000), 0, 11);
623a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("h z", "14 GMT+24 ", new Date(48960000), 0, 9);
624a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("h z", "14 GMT+23 ", new Date(-32400000), 0, 9);
625a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("h z", "14 GMT+0001 ", new Date(46800000), 0, 11);
626a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("h z", "14 +0001 ", new Date(46800000), 0, 8);
627a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("h z", "14 -0001 ", new Date(54000000), 0, 8);
628a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller
629a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertParse("yyyyMMddHHmmss", "19990913171901",
630a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                new GregorianCalendar(1999, Calendar.SEPTEMBER, 13, 17, 19, 1).getTime(), 0, 14);
631994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
632994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        Date d = new Date(1015822800000L);
633994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        SimpleDateFormat df = new SimpleDateFormat("", new Locale("en", "US"));
634994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        df.setTimeZone(TimeZone.getTimeZone("EST"));
635994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
636018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        df.applyPattern("dd MMMM yyyy EEEE");
637018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        String output = df.format(d);
638018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        Date date = df.parse(output);
639018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        assertTrue("Invalid result 1: " + date, d.equals(date));
640018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
641018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        df.applyPattern("dd MMMM yyyy F");
642018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        output = df.format(d);
643018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        date = df.parse(output);
644018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        assertTrue("Invalid result 2: " + date, d.equals(date));
645018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
646018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        df.applyPattern("dd MMMM yyyy w");
647018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        output = df.format(d);
648018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        date = df.parse(output);
649018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        assertTrue("Invalid result 3: " + date, d.equals(date));
650018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
651018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        df.applyPattern("dd MMMM yyyy W");
652018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        output = df.format(d);
653018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        date = df.parse(output);
654018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        assertTrue("Invalid result 4: " + date, d.equals(date));
655018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
656018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        df.applyPattern("dd MMMM yyyy D");
657018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        date = df.parse("5 January 2002 70");
658018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        assertTrue("Invalid result 5: " + date, d.equals(date));
659018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
660018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        df.applyPattern("W w dd MMMM yyyy EEEE");
661018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        output = df.format(d);
662018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        date = df.parse("3 12 5 March 2002 Monday");
663018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        assertTrue("Invalid result 6: " + date, d.equals(date));
664018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
665018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        df.applyPattern("w W dd MMMM yyyy EEEE");
666018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        output = df.format(d);
667018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        date = df.parse("12 3 5 March 2002 Monday");
668018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        assertTrue("Invalid result 6a: " + date, d.equals(date));
669018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
670018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        df.applyPattern("F dd MMMM yyyy EEEE");
671018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        output = df.format(d);
672018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        date = df.parse("2 5 March 2002 Monday");
673018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        assertTrue("Invalid result 7: " + date, d.equals(date));
674018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
675018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        df.applyPattern("w dd MMMM yyyy EEEE");
676018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        output = df.format(d);
677018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        date = df.parse("11 5 January 2002 Monday");
678018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        assertTrue("Invalid result 8: " + date, d.equals(date));
679018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
680018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        df.applyPattern("w dd yyyy EEEE MMMM");
681018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        output = df.format(d);
682018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        date = df.parse("11 5 2002 Monday January");
683018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        assertTrue("Invalid result 9: " + date, d.equals(date));
684018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
685018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        df.applyPattern("w yyyy EEEE MMMM dd");
686018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        output = df.format(d);
687018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        date = df.parse("17 2002 Monday March 11");
688018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        assertTrue("Invalid result 10: " + date, d.equals(date));
689018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
690018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        df.applyPattern("dd D yyyy MMMM");
691018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        output = df.format(d);
692018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        date = df.parse("5 70 2002 January");
693018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        assertTrue("Invalid result 11: " + date, d.equals(date));
694018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
695018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        df.applyPattern("D dd yyyy MMMM");
696018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        output = df.format(d);
697018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        date = df.parse("240 11 2002 March");
698018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        assertTrue("Invalid result 12: " + date, d.equals(date));
699018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
700994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        try {
701018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes            format.parse("240 11 2002 March", null);
702018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes            fail();
703018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        } catch (NullPointerException expected) {
704018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        }
705018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
706018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        try {
707018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes            format.parse(null, new ParsePosition(0));
708018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes            fail();
709018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        } catch (NullPointerException expected) {
710994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        }
711994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
712994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
713a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller    private void assertParse(String pattern, String input, Date expected, int start, int end) {
714a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        pFormat.applyPattern(pattern);
715a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        ParsePosition position = new ParsePosition(start);
716a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        Date result = pFormat.parse(input, position);
717a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertTrue("Wrong result: " + pattern + " input: " + input + " expected: " + expected +
718a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                " result: " + result, expected.equals(result));
719a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        assertTrue("Wrong end position: " + pattern + " input: " + input,
720a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                position.getIndex() == end);
721a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller    }
722a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller
723994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    public void test_set2DigitYearStartLjava_util_Date() {
724994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // Test for method void
725994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // java.text.SimpleDateFormat.set2DigitYearStart(java.util.Date)
726994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        SimpleDateFormat f1 = new SimpleDateFormat("yy");
727a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        f1.set2DigitYearStart(new GregorianCalendar(1950, Calendar.JANUARY, 1).getTime());
728994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        Calendar cal = new GregorianCalendar();
729994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        try {
730994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            cal.setTime(f1.parse("49"));
731994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            assertEquals("Incorrect year 2049", 2049, cal.get(Calendar.YEAR));
732994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            cal.setTime(f1.parse("50"));
733994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            int year = cal.get(Calendar.YEAR);
734994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            assertTrue("Incorrect year 1950: " + year, year == 1950);
735994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            f1.applyPattern("y");
736994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            cal.setTime(f1.parse("00"));
737994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            assertEquals("Incorrect year 2000", 2000, cal.get(Calendar.YEAR));
738994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            f1.applyPattern("yyy");
739994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            cal.setTime(f1.parse("50"));
740994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            assertEquals("Incorrect year 50", 50, cal.get(Calendar.YEAR));
741994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        } catch (ParseException e) {
742994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            fail("ParseException");
743994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        }
744994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
745994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
746994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    public void test_setDateFormatSymbolsLjava_text_DateFormatSymbols() {
747994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // Test for method void
748994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // java.text.SimpleDateFormat.setDateFormatSymbols(java.text.DateFormatSymbols)
749994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        SimpleDateFormat f1 = new SimpleDateFormat("a");
750994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        DateFormatSymbols symbols = new DateFormatSymbols();
751994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        symbols.setAmPmStrings(new String[] { "morning", "night" });
752994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        f1.setDateFormatSymbols(symbols);
753994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        DateFormatSymbols newSym = f1.getDateFormatSymbols();
754994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        assertTrue("Set incorrectly", newSym.equals(symbols));
755994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        assertTrue("Not a clone", f1.getDateFormatSymbols() != symbols);
756a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller        String result = f1.format(new GregorianCalendar(1999, Calendar.JUNE, 12, 3, 0).getTime());
757994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        assertEquals("Incorrect symbols used", "morning", result);
758994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        symbols.setEras(new String[] { "before", "after" });
759018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        assertTrue("Identical symbols", !f1.getDateFormatSymbols().equals(symbols));
760018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
761018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        try {
762018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes            f1.setDateFormatSymbols(null);
763018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes            fail();
764018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        } catch (NullPointerException expected) {
765018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        }
766018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes    }
767018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
768018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes    public void test_toPattern() {
769018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        String pattern = "yyyy mm dd";
770018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        SimpleDateFormat f = new SimpleDateFormat(pattern);
771018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        assertEquals("Wrong pattern: " + pattern, pattern, f.toPattern());
772018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
773018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        pattern = "GyMdkHmsSEDFwWahKz";
774018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        f = new SimpleDateFormat("GyMdkHmsSEDFwWahKz", new Locale("de", "CH"));
775018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        assertTrue("Wrong pattern: " + pattern, f.toPattern().equals(pattern));
776018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes
777018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        pattern = "G y M d Z";
778018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        f = new SimpleDateFormat(pattern, new Locale("de", "CH"));
779018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        pattern = f.toPattern();
780018b61546e6a69ff9c5105ec017c85df641766c4Elliott Hughes        assertTrue("Wrong pattern: " + pattern, f.toPattern().equals(pattern));
781994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
782994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
783994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    public void test_toLocalizedPattern() {
78474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        SimpleDateFormat f2 = new SimpleDateFormat("GyMdkHmsSEDFwWahKzZLc", new Locale("de", "CH"));
78574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        assertEquals(f2.toPattern(), f2.toLocalizedPattern());
786994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
787994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
788994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    public void test_parse_with_spaces() {
789994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        // Regression for HARMONY-502
790994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
791994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        df.setLenient(false);
792994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
793994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        char allowed_chars[] = { 0x9, 0x20 };
794994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        String allowed_char_names[] = { "tab", "space" };
795994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        for (int i = 0; i < allowed_chars.length; i++) {
796a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller            Date expected = new GregorianCalendar(1970, Calendar.JANUARY, 1, 9, 7, 6).getTime();
797994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            ParsePosition pp = new ParsePosition(0);
798994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            Date d = df.parse(allowed_chars[i] + "9:07:06", pp);
799994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            assertNotNull("hour may be prefixed by " + allowed_char_names[i], d);
800994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            assertEquals(expected, d);
801994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
802994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            pp = new ParsePosition(0);
803994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            d = df.parse("09:" + allowed_chars[i] + "7:06", pp);
804a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller            assertNotNull("minute may be prefixed by " + allowed_char_names[i], d);
805994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            assertEquals(expected, d);
806994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
807994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            pp = new ParsePosition(0);
808994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            d = df.parse("09:07:" + allowed_chars[i] + "6", pp);
809a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller            assertNotNull("second may be prefixed by " + allowed_char_names[i], d);
810994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            assertEquals(expected, d);
811994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        }
812994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
813994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        char not_allowed_chars[] = {
814a4b67b6f5ba9d233023c55c816121070770e4ac5Neil Fuller                // whitespace
815994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes                0x1c, 0x1d, 0x1e, 0x1f, 0xa, 0xb, 0xc, 0xd, 0x2001, 0x2002,
816994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes                0x2003, 0x2004, 0x2005, 0x2006, 0x2008, 0x2009, 0x200a, 0x200b,
817994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes                0x2028, 0x2029, 0x3000,
818994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes                // non-breaking space
819994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes                0xA0, 0x2007, 0x202F };
820994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
821994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        for (int i = 0; i < not_allowed_chars.length; i++) {
822994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            ParsePosition pp = new ParsePosition(0);
823994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            Date d = df.parse(not_allowed_chars[i] + "9:07", pp);
824994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            assertNull(d);
825994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
826994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            pp = new ParsePosition(0);
827994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            d = df.parse("09:" + not_allowed_chars[i] + "7", pp);
828994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            assertNull(d);
829994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
830994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            pp = new ParsePosition(0);
831994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            d = df.parse("09:07:" + not_allowed_chars[i] + "6", pp);
832994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes            assertNull(d);
833994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes        }
834994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
835994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes}
836