001 /*
002 * Copyright 2001-2005 Stephen Colebourne
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.joda.time.format;
017
018 import java.text.DateFormat;
019 import java.util.Locale;
020 import java.util.SimpleTimeZone;
021 import java.util.TimeZone;
022
023 import junit.framework.TestCase;
024 import junit.framework.TestSuite;
025
026 import org.joda.time.DateTime;
027 import org.joda.time.DateTimeConstants;
028 import org.joda.time.DateTimeUtils;
029 import org.joda.time.DateTimeZone;
030
031 /**
032 * This class is a Junit unit test for DateTimeFormat styles.
033 *
034 * @author Stephen Colebourne
035 */
036 public class TestDateTimeFormatStyle extends TestCase {
037
038 private static final Locale UK = Locale.UK;
039 private static final Locale US = Locale.US;
040 private static final Locale FRANCE = Locale.FRANCE;
041 private static final DateTimeZone UTC = DateTimeZone.UTC;
042 private static final DateTimeZone PARIS = DateTimeZone.forID("Europe/Paris");
043 private static final DateTimeZone LONDON = DateTimeZone.forID("Europe/London");
044 private static final DateTimeZone TOKYO = DateTimeZone.forID("Asia/Tokyo");
045 private static final DateTimeZone NEWYORK = DateTimeZone.forID("America/New_York");
046
047 long y2002days = 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 +
048 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 +
049 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 +
050 366 + 365;
051 // 2002-06-09
052 private long TEST_TIME_NOW =
053 (y2002days + 31L + 28L + 31L + 30L + 31L + 9L -1L) * DateTimeConstants.MILLIS_PER_DAY;
054
055 private DateTimeZone originalDateTimeZone = null;
056 private TimeZone originalTimeZone = null;
057 private Locale originalLocale = null;
058
059 public static void main(String[] args) {
060 junit.textui.TestRunner.run(suite());
061 }
062
063 public static TestSuite suite() {
064 return new TestSuite(TestDateTimeFormatStyle.class);
065 }
066
067 public TestDateTimeFormatStyle(String name) {
068 super(name);
069 }
070
071 protected void setUp() throws Exception {
072 DateTimeUtils.setCurrentMillisFixed(TEST_TIME_NOW);
073 originalDateTimeZone = DateTimeZone.getDefault();
074 originalTimeZone = TimeZone.getDefault();
075 originalLocale = Locale.getDefault();
076 DateTimeZone.setDefault(LONDON);
077 TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
078 Locale.setDefault(UK);
079 }
080
081 protected void tearDown() throws Exception {
082 DateTimeUtils.setCurrentMillisSystem();
083 DateTimeZone.setDefault(originalDateTimeZone);
084 TimeZone.setDefault(originalTimeZone);
085 Locale.setDefault(originalLocale);
086 originalDateTimeZone = null;
087 originalTimeZone = null;
088 originalLocale = null;
089 }
090
091 //-----------------------------------------------------------------------
092 public void testForStyle_stringLengths() {
093 try {
094 DateTimeFormat.forStyle(null);
095 fail();
096 } catch (IllegalArgumentException ex) {}
097 try {
098 DateTimeFormat.forStyle("");
099 fail();
100 } catch (IllegalArgumentException ex) {}
101 try {
102 DateTimeFormat.forStyle("S");
103 fail();
104 } catch (IllegalArgumentException ex) {}
105 try {
106 DateTimeFormat.forStyle("SSS");
107 fail();
108 } catch (IllegalArgumentException ex) {}
109 }
110
111 public void testForStyle_invalidStrings() {
112 try {
113 DateTimeFormat.forStyle("AA");
114 fail();
115 } catch (IllegalArgumentException ex) {}
116 try {
117 DateTimeFormat.forStyle("--");
118 fail();
119 } catch (IllegalArgumentException ex) {}
120 try {
121 DateTimeFormat.forStyle("ss");
122 fail();
123 } catch (IllegalArgumentException ex) {}
124 }
125
126 //-----------------------------------------------------------------------
127 public void testForStyle_shortDate() throws Exception {
128 DateTimeFormatter f = DateTimeFormat.shortDate();
129 DateTimeFormatter g = DateTimeFormat.forStyle("S-");
130 assertSame(g, f);
131 DateTime dt = new DateTime(2004, 6, 9, 10, 20, 30, 0);
132 String expect = DateFormat.getDateInstance(DateFormat.SHORT, UK).format(dt.toDate());
133 assertEquals(expect, f.print(dt));
134 expect = DateFormat.getDateInstance(DateFormat.SHORT, US).format(dt.toDate());
135 assertEquals(expect, f.withLocale(US).print(dt));
136 expect = DateFormat.getDateInstance(DateFormat.SHORT, FRANCE).format(dt.toDate());
137 assertEquals(expect, f.withLocale(FRANCE).print(dt));
138
139 DateTime date = new DateTime(
140 DateFormat.getDateInstance(DateFormat.SHORT, FRANCE).parse(expect));
141 assertEquals(date, f.withLocale(FRANCE).parseDateTime(expect));
142 }
143
144 public void testForStyle_shortTime() throws Exception {
145 DateTimeFormatter f = DateTimeFormat.shortTime();
146 DateTimeFormatter g = DateTimeFormat.forStyle("-S");
147 assertSame(g, f);
148 DateTime dt = new DateTime(2004, 6, 9, 10, 20, 30, 0);
149 String expect = DateFormat.getTimeInstance(DateFormat.SHORT, UK).format(dt.toDate());
150 assertEquals(expect, f.print(dt));
151 expect = DateFormat.getTimeInstance(DateFormat.SHORT, US).format(dt.toDate());
152 assertEquals(expect, f.withLocale(US).print(dt));
153 expect = DateFormat.getTimeInstance(DateFormat.SHORT, FRANCE).format(dt.toDate());
154 assertEquals(expect, f.withLocale(FRANCE).print(dt));
155
156 if (TimeZone.getDefault() instanceof SimpleTimeZone) {
157 // skip test, as it needs historical time zone info
158 } else {
159 DateTime date = new DateTime(
160 DateFormat.getTimeInstance(DateFormat.SHORT, FRANCE).parse(expect));
161 assertEquals(date, f.withLocale(FRANCE).parseDateTime(expect));
162 }
163 }
164
165 public void testForStyle_shortDateTime() throws Exception {
166 DateTimeFormatter f = DateTimeFormat.shortDateTime();
167 DateTimeFormatter g = DateTimeFormat.forStyle("SS");
168 assertSame(g, f);
169 DateTime dt = new DateTime(2004, 6, 9, 10, 20, 30, 0);
170 String expect = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, UK).format(dt.toDate());
171 assertEquals(expect, f.print(dt));
172 expect = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, US).format(dt.toDate());
173 assertEquals(expect, f.withLocale(US).print(dt));
174 expect = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, FRANCE).format(dt.toDate());
175 assertEquals(expect, f.withLocale(FRANCE).print(dt));
176
177 DateTime date = new DateTime(
178 DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, FRANCE).parse(expect));
179 assertEquals(date, f.withLocale(FRANCE).parseDateTime(expect));
180 }
181
182 //-----------------------------------------------------------------------
183 public void testForStyle_mediumDate() throws Exception {
184 DateTimeFormatter f = DateTimeFormat.mediumDate();
185 DateTimeFormatter g = DateTimeFormat.forStyle("M-");
186 assertSame(g, f);
187 DateTime dt = new DateTime(2004, 6, 9, 10, 20, 30, 0);
188 String expect = DateFormat.getDateInstance(DateFormat.MEDIUM, UK).format(dt.toDate());
189 assertEquals(expect, f.print(dt));
190 expect = DateFormat.getDateInstance(DateFormat.MEDIUM, US).format(dt.toDate());
191 assertEquals(expect, f.withLocale(US).print(dt));
192 expect = DateFormat.getDateInstance(DateFormat.MEDIUM, FRANCE).format(dt.toDate());
193 assertEquals(expect, f.withLocale(FRANCE).print(dt));
194 }
195
196 public void testForStyle_mediumTime() throws Exception {
197 DateTimeFormatter f = DateTimeFormat.mediumTime();
198 DateTimeFormatter g = DateTimeFormat.forStyle("-M");
199 assertSame(g, f);
200 DateTime dt = new DateTime(2004, 6, 9, 10, 20, 30, 0);
201 String expect = DateFormat.getTimeInstance(DateFormat.MEDIUM, UK).format(dt.toDate());
202 assertEquals(expect, f.print(dt));
203 expect = DateFormat.getTimeInstance(DateFormat.MEDIUM, US).format(dt.toDate());
204 assertEquals(expect, f.withLocale(US).print(dt));
205 expect = DateFormat.getTimeInstance(DateFormat.MEDIUM, FRANCE).format(dt.toDate());
206 assertEquals(expect, f.withLocale(FRANCE).print(dt));
207 }
208
209 public void testForStyle_mediumDateTime() throws Exception {
210 DateTimeFormatter f = DateTimeFormat.mediumDateTime();
211 DateTimeFormatter g = DateTimeFormat.forStyle("MM");
212 assertSame(g, f);
213 DateTime dt = new DateTime(2004, 6, 9, 10, 20, 30, 0);
214 String expect = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, UK).format(dt.toDate());
215 assertEquals(expect, f.print(dt));
216 expect = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, US).format(dt.toDate());
217 assertEquals(expect, f.withLocale(US).print(dt));
218 expect = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, FRANCE).format(dt.toDate());
219 assertEquals(expect, f.withLocale(FRANCE).print(dt));
220 }
221
222 //-----------------------------------------------------------------------
223 public void testForStyle_longDate() throws Exception {
224 DateTimeFormatter f = DateTimeFormat.longDate();
225 DateTimeFormatter g = DateTimeFormat.forStyle("L-");
226 assertSame(g, f);
227 DateTime dt = new DateTime(2004, 6, 9, 10, 20, 30, 0);
228 String expect = DateFormat.getDateInstance(DateFormat.LONG, UK).format(dt.toDate());
229 assertEquals(expect, f.print(dt));
230 expect = DateFormat.getDateInstance(DateFormat.LONG, US).format(dt.toDate());
231 assertEquals(expect, f.withLocale(US).print(dt));
232 expect = DateFormat.getDateInstance(DateFormat.LONG, FRANCE).format(dt.toDate());
233 assertEquals(expect, f.withLocale(FRANCE).print(dt));
234 }
235
236 public void testForStyle_longTime() throws Exception {
237 DateTimeFormatter f = DateTimeFormat.longTime();
238 DateTimeFormatter g = DateTimeFormat.forStyle("-L");
239 assertSame(g, f);
240 DateTime dt = new DateTime(2004, 6, 9, 10, 20, 30, 0);
241 String expect = DateFormat.getTimeInstance(DateFormat.LONG, UK).format(dt.toDate());
242 assertEquals(expect, f.print(dt));
243 expect = DateFormat.getTimeInstance(DateFormat.LONG, US).format(dt.toDate());
244 assertEquals(expect, f.withLocale(US).print(dt));
245 expect = DateFormat.getTimeInstance(DateFormat.LONG, FRANCE).format(dt.toDate());
246 assertEquals(expect, f.withLocale(FRANCE).print(dt));
247 }
248
249 public void testForStyle_longDateTime() throws Exception {
250 DateTimeFormatter f = DateTimeFormat.longDateTime();
251 DateTimeFormatter g = DateTimeFormat.forStyle("LL");
252 assertSame(g, f);
253 DateTime dt = new DateTime(2004, 6, 9, 10, 20, 30, 0);
254 String expect = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, UK).format(dt.toDate());
255 assertEquals(expect, f.print(dt));
256 expect = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, US).format(dt.toDate());
257 assertEquals(expect, f.withLocale(US).print(dt));
258 expect = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, FRANCE).format(dt.toDate());
259 assertEquals(expect, f.withLocale(FRANCE).print(dt));
260 }
261
262 //-----------------------------------------------------------------------
263 public void testForStyle_fullDate() throws Exception {
264 DateTimeFormatter f = DateTimeFormat.fullDate();
265 DateTimeFormatter g = DateTimeFormat.forStyle("F-");
266 assertSame(g, f);
267 DateTime dt = new DateTime(2004, 6, 9, 10, 20, 30, 0);
268 String expect = DateFormat.getDateInstance(DateFormat.FULL, UK).format(dt.toDate());
269 assertEquals(expect, f.print(dt));
270 expect = DateFormat.getDateInstance(DateFormat.FULL, US).format(dt.toDate());
271 assertEquals(expect, f.withLocale(US).print(dt));
272 expect = DateFormat.getDateInstance(DateFormat.FULL, FRANCE).format(dt.toDate());
273 assertEquals(expect, f.withLocale(FRANCE).print(dt));
274 }
275
276 public void testForStyle_fullTime() throws Exception {
277 DateTimeFormatter f = DateTimeFormat.fullTime();
278 DateTimeFormatter g = DateTimeFormat.forStyle("-F");
279 assertSame(g, f);
280 DateTime dt = new DateTime(2004, 6, 9, 10, 20, 30, 0);
281 String expect = DateFormat.getTimeInstance(DateFormat.FULL, UK).format(dt.toDate());
282 assertEquals(expect, f.print(dt));
283 expect = DateFormat.getTimeInstance(DateFormat.FULL, US).format(dt.toDate());
284 assertEquals(expect, f.withLocale(US).print(dt));
285 expect = DateFormat.getTimeInstance(DateFormat.FULL, FRANCE).format(dt.toDate());
286 assertEquals(expect, f.withLocale(FRANCE).print(dt));
287 }
288
289 public void testForStyle_fullDateTime() throws Exception {
290 DateTimeFormatter f = DateTimeFormat.fullDateTime();
291 DateTimeFormatter g = DateTimeFormat.forStyle("FF");
292 assertSame(g, f);
293 DateTime dt = new DateTime(2004, 6, 9, 10, 20, 30, 0);
294 String expect = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, UK).format(dt.toDate());
295 assertEquals(expect, f.print(dt));
296 expect = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, US).format(dt.toDate());
297 assertEquals(expect, f.withLocale(US).print(dt));
298 expect = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, FRANCE).format(dt.toDate());
299 assertEquals(expect, f.withLocale(FRANCE).print(dt));
300 }
301
302 //-----------------------------------------------------------------------
303 public void testForStyle_shortMediumDateTime() throws Exception {
304 DateTimeFormatter f = DateTimeFormat.forStyle("SM");
305 DateTime dt = new DateTime(2004, 6, 9, 10, 20, 30, 0);
306 String expect = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM, UK).format(dt.toDate());
307 assertEquals(expect, f.print(dt));
308 expect = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM, US).format(dt.toDate());
309 assertEquals(expect, f.withLocale(US).print(dt));
310 expect = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM, FRANCE).format(dt.toDate());
311 assertEquals(expect, f.withLocale(FRANCE).print(dt));
312 }
313
314 public void testForStyle_shortLongDateTime() throws Exception {
315 DateTimeFormatter f = DateTimeFormat.forStyle("SL");
316 DateTime dt = new DateTime(2004, 6, 9, 10, 20, 30, 0);
317 String expect = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG, UK).format(dt.toDate());
318 assertEquals(expect, f.print(dt));
319 expect = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG, US).format(dt.toDate());
320 assertEquals(expect, f.withLocale(US).print(dt));
321 expect = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG, FRANCE).format(dt.toDate());
322 assertEquals(expect, f.withLocale(FRANCE).print(dt));
323 }
324
325 public void testForStyle_shortFullDateTime() throws Exception {
326 DateTimeFormatter f = DateTimeFormat.forStyle("SF");
327 DateTime dt = new DateTime(2004, 6, 9, 10, 20, 30, 0);
328 String expect = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.FULL, UK).format(dt.toDate());
329 assertEquals(expect, f.print(dt));
330 expect = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.FULL, US).format(dt.toDate());
331 assertEquals(expect, f.withLocale(US).print(dt));
332 expect = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.FULL, FRANCE).format(dt.toDate());
333 assertEquals(expect, f.withLocale(FRANCE).print(dt));
334 }
335
336 //-----------------------------------------------------------------------
337 public void testForStyle_mediumShortDateTime() throws Exception {
338 DateTimeFormatter f = DateTimeFormat.forStyle("MS");
339 DateTime dt = new DateTime(2004, 6, 9, 10, 20, 30, 0);
340 String expect = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, UK).format(dt.toDate());
341 assertEquals(expect, f.print(dt));
342 expect = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, US).format(dt.toDate());
343 assertEquals(expect, f.withLocale(US).print(dt));
344 expect = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, FRANCE).format(dt.toDate());
345 assertEquals(expect, f.withLocale(FRANCE).print(dt));
346 }
347
348 public void testForStyle_mediumLongDateTime() throws Exception {
349 DateTimeFormatter f = DateTimeFormat.forStyle("ML");
350 DateTime dt = new DateTime(2004, 6, 9, 10, 20, 30, 0);
351 String expect = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.LONG, UK).format(dt.toDate());
352 assertEquals(expect, f.print(dt));
353 expect = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.LONG, US).format(dt.toDate());
354 assertEquals(expect, f.withLocale(US).print(dt));
355 expect = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.LONG, FRANCE).format(dt.toDate());
356 assertEquals(expect, f.withLocale(FRANCE).print(dt));
357 }
358
359 public void testForStyle_mediumFullDateTime() throws Exception {
360 DateTimeFormatter f = DateTimeFormat.forStyle("MF");
361 DateTime dt = new DateTime(2004, 6, 9, 10, 20, 30, 0);
362 String expect = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.FULL, UK).format(dt.toDate());
363 assertEquals(expect, f.print(dt));
364 expect = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.FULL, US).format(dt.toDate());
365 assertEquals(expect, f.withLocale(US).print(dt));
366 expect = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.FULL, FRANCE).format(dt.toDate());
367 assertEquals(expect, f.withLocale(FRANCE).print(dt));
368 }
369
370 }