001 /*
002 * Copyright 2001-2012 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.util.Locale;
019
020 import junit.framework.TestCase;
021 import junit.framework.TestSuite;
022
023 import org.joda.time.Period;
024
025 /**
026 * This class is a Junit unit test for PeriodFormat.
027 *
028 * @author Stephen Colebourne
029 */
030 public class TestPeriodFormat extends TestCase {
031
032 private static final Locale EN = new Locale("en");
033 private static final Locale FR = new Locale("fr");
034 private static final Locale PT = new Locale("pt");
035 private static final Locale ES = new Locale("es");
036 private static final Locale DE = new Locale("de");
037 private static final Locale NL = new Locale("nl");
038 private static final Locale DA = new Locale("da");
039 private static final Locale JA = new Locale("ja");
040
041 private Locale originalLocale = null;
042
043 public static void main(String[] args) {
044 junit.textui.TestRunner.run(suite());
045 }
046
047 public static TestSuite suite() {
048 return new TestSuite(TestPeriodFormat.class);
049 }
050
051 public TestPeriodFormat(String name) {
052 super(name);
053 }
054
055 protected void setUp() throws Exception {
056 originalLocale = Locale.getDefault();
057 Locale.setDefault(DE);
058 }
059
060 protected void tearDown() throws Exception {
061 Locale.setDefault(originalLocale);
062 originalLocale = null;
063 }
064
065 //-----------------------------------------------------------------------
066 public void testSubclassableConstructor() {
067 PeriodFormat f = new PeriodFormat() {
068 // test constructor is protected
069 };
070 assertNotNull(f);
071 }
072
073 //-----------------------------------------------------------------------
074 // getDefault()
075 //-----------------------------------------------------------------------
076 public void test_getDefault_formatStandard() {
077 Period p = new Period(0, 0, 0, 1, 5, 6 ,7, 8);
078 assertEquals("1 day, 5 hours, 6 minutes, 7 seconds and 8 milliseconds", PeriodFormat.getDefault().print(p));
079 }
080
081 //-----------------------------------------------------------------------
082 public void test_getDefault_FormatOneField() {
083 Period p = Period.days(2);
084 assertEquals("2 days", PeriodFormat.getDefault().print(p));
085 }
086
087 //-----------------------------------------------------------------------
088 public void test_getDefault_formatTwoFields() {
089 Period p = Period.days(2).withHours(5);
090 assertEquals("2 days and 5 hours", PeriodFormat.getDefault().print(p));
091 }
092
093 //-----------------------------------------------------------------------
094 public void test_getDefault_parseOneField() {
095 Period p = Period.days(2);
096 assertEquals(p, PeriodFormat.getDefault().parsePeriod("2 days"));
097 }
098
099 //-----------------------------------------------------------------------
100 public void test_getDefault_parseTwoFields() {
101 Period p = Period.days(2).withHours(5);
102 assertEquals(p, PeriodFormat.getDefault().parsePeriod("2 days and 5 hours"));
103 }
104
105 //-----------------------------------------------------------------------
106 public void test_getDefault_checkRedundantSeparator() {
107 try {
108 PeriodFormat.getDefault().parsePeriod("2 days and 5 hours ");
109 fail("No exception was caught");
110 } catch (Exception e) {
111 assertEquals(IllegalArgumentException.class, e.getClass());
112 }
113 }
114
115 //-----------------------------------------------------------------------
116 public void test_getDefault_cached() {
117 assertSame(PeriodFormat.getDefault(), PeriodFormat.getDefault());
118 }
119
120 //-----------------------------------------------------------------------
121 // wordBased() - default locale (de)
122 //-----------------------------------------------------------------------
123 public void test_wordBased_default() {
124 Period p = new Period(0, 0, 0, 1, 5, 6 ,7, 8);
125 assertEquals("1 Tag, 5 Stunden, 6 Minuten, 7 Sekunden und 8 Millisekunden", PeriodFormat.wordBased().print(p));
126 }
127
128 //-----------------------------------------------------------------------
129 // wordBased(Locale.FRENCH)
130 //-----------------------------------------------------------------------
131 public void test_wordBased_fr_formatStandard() {
132 Period p = new Period(0, 0, 0, 1, 5, 6 ,7, 8);
133 assertEquals("1 jour, 5 heures, 6 minutes, 7 secondes et 8 millisecondes", PeriodFormat.wordBased(FR).print(p));
134 }
135
136 //-----------------------------------------------------------------------
137 public void test_wordBased_fr_FormatOneField() {
138 Period p = Period.days(2);
139 assertEquals("2 jours", PeriodFormat.wordBased(FR).print(p));
140 }
141
142 //-----------------------------------------------------------------------
143 public void test_wordBased_fr_formatTwoFields() {
144 Period p = Period.days(2).withHours(5);
145 assertEquals("2 jours et 5 heures", PeriodFormat.wordBased(FR).print(p));
146 }
147
148 //-----------------------------------------------------------------------
149 public void test_wordBased_fr_parseOneField() {
150 Period p = Period.days(2);
151 assertEquals(p, PeriodFormat.wordBased(FR).parsePeriod("2 jours"));
152 }
153
154 //-----------------------------------------------------------------------
155 public void test_wordBased_fr_parseTwoFields() {
156 Period p = Period.days(2).withHours(5);
157 assertEquals(p, PeriodFormat.wordBased(FR).parsePeriod("2 jours et 5 heures"));
158 }
159
160 //-----------------------------------------------------------------------
161 public void test_wordBased_fr_cached() {
162 assertSame(PeriodFormat.wordBased(FR), PeriodFormat.wordBased(FR));
163 }
164
165 //-----------------------------------------------------------------------
166 // wordBased(Locale pt)
167 //-----------------------------------------------------------------------
168 public void test_wordBased_pt_formatStandard() {
169 Period p = new Period(0, 0, 0, 1, 5, 6 ,7, 8);
170 assertEquals("1 dia, 5 horas, 6 minutos, 7 segundos e 8 milissegundos", PeriodFormat.wordBased(PT).print(p));
171 }
172
173 //-----------------------------------------------------------------------
174 public void test_wordBased_pt_FormatOneField() {
175 Period p = Period.days(2);
176 assertEquals("2 dias", PeriodFormat.wordBased(PT).print(p));
177 }
178
179 //-----------------------------------------------------------------------
180 public void test_wordBased_pt_formatTwoFields() {
181 Period p = Period.days(2).withHours(5);
182 assertEquals("2 dias e 5 horas", PeriodFormat.wordBased(PT).print(p));
183 }
184
185 //-----------------------------------------------------------------------
186 public void test_wordBased_pt_parseOneField() {
187 Period p = Period.days(2);
188 assertEquals(p, PeriodFormat.wordBased(PT).parsePeriod("2 dias"));
189 }
190
191 //-----------------------------------------------------------------------
192 public void test_wordBased_pt_parseTwoFields() {
193 Period p = Period.days(2).withHours(5);
194 assertEquals(p, PeriodFormat.wordBased(PT).parsePeriod("2 dias e 5 horas"));
195 }
196
197 //-----------------------------------------------------------------------
198 public void test_wordBased_pt_cached() {
199 assertSame(PeriodFormat.wordBased(PT), PeriodFormat.wordBased(PT));
200 }
201
202 //-----------------------------------------------------------------------
203 // wordBased(Locale es)
204 //-----------------------------------------------------------------------
205 public void test_wordBased_es_formatStandard() {
206 Period p = new Period(0, 0, 0, 1, 5, 6 ,7, 8);
207 assertEquals("1 d\u00EDa, 5 horas, 6 minutos, 7 segundos y 8 milisegundos", PeriodFormat.wordBased(ES).print(p));
208 }
209
210 //-----------------------------------------------------------------------
211 public void test_wordBased_es_FormatOneField() {
212 Period p = Period.days(2);
213 assertEquals("2 d\u00EDas", PeriodFormat.wordBased(ES).print(p));
214 }
215
216 //-----------------------------------------------------------------------
217 public void test_wordBased_es_formatTwoFields() {
218 Period p = Period.days(2).withHours(5);
219 assertEquals("2 d\u00EDas y 5 horas", PeriodFormat.wordBased(ES).print(p));
220 }
221
222 //-----------------------------------------------------------------------
223 public void test_wordBased_es_parseOneField() {
224 Period p = Period.days(2);
225 assertEquals(p, PeriodFormat.wordBased(ES).parsePeriod("2 d\u00EDas"));
226 }
227
228 //-----------------------------------------------------------------------
229 public void test_wordBased_es_parseTwoFields() {
230 Period p = Period.days(2).withHours(5);
231 assertEquals(p, PeriodFormat.wordBased(ES).parsePeriod("2 d\u00EDas y 5 horas"));
232 }
233
234 //-----------------------------------------------------------------------
235 public void test_wordBased_es_cached() {
236 assertSame(PeriodFormat.wordBased(ES), PeriodFormat.wordBased(ES));
237 }
238
239 //-----------------------------------------------------------------------
240 // wordBased(Locale de)
241 //-----------------------------------------------------------------------
242 public void test_wordBased_de_formatStandard() {
243 Period p = new Period(0, 0, 0, 1, 5, 6 ,7, 8);
244 assertEquals("1 Tag, 5 Stunden, 6 Minuten, 7 Sekunden und 8 Millisekunden", PeriodFormat.wordBased(DE).print(p));
245 }
246
247 //-----------------------------------------------------------------------
248 public void test_wordBased_de_FormatOneField() {
249 Period p = Period.days(2);
250 assertEquals("2 Tage", PeriodFormat.wordBased(DE).print(p));
251 }
252
253 //-----------------------------------------------------------------------
254 public void test_wordBased_de_formatTwoFields() {
255 Period p = Period.days(2).withHours(5);
256 assertEquals("2 Tage und 5 Stunden", PeriodFormat.wordBased(DE).print(p));
257 }
258
259 //-----------------------------------------------------------------------
260 public void test_wordBased_de_parseOneField() {
261 Period p = Period.days(2);
262 assertEquals(p, PeriodFormat.wordBased(DE).parsePeriod("2 Tage"));
263 }
264
265 //-----------------------------------------------------------------------
266 public void test_wordBased_de_parseTwoFields() {
267 Period p = Period.days(2).withHours(5);
268 assertEquals(p, PeriodFormat.wordBased(DE).parsePeriod("2 Tage und 5 Stunden"));
269 }
270
271 //-----------------------------------------------------------------------
272 public void test_wordBased_de_cached() {
273 assertSame(PeriodFormat.wordBased(DE), PeriodFormat.wordBased(DE));
274 }
275
276 //-----------------------------------------------------------------------
277 // wordBased(Locale nl)
278 //-----------------------------------------------------------------------
279 public void test_wordBased_nl_formatStandard() {
280 Period p = new Period(0, 0, 0, 1, 5, 6 ,7, 8);
281 assertEquals("1 dag, 5 uur, 6 minuten, 7 seconden en 8 milliseconden", PeriodFormat.wordBased(NL).print(p));
282 }
283
284 //-----------------------------------------------------------------------
285 public void test_wordBased_nl_FormatOneField() {
286 Period p = Period.days(2);
287 assertEquals("2 dagen", PeriodFormat.wordBased(NL).print(p));
288 }
289
290 //-----------------------------------------------------------------------
291 public void test_wordBased_nl_formatTwoFields() {
292 Period p = Period.days(2).withHours(5);
293 assertEquals("2 dagen en 5 uur", PeriodFormat.wordBased(NL).print(p));
294 }
295
296 //-----------------------------------------------------------------------
297 public void test_wordBased_nl_parseOneField() {
298 Period p = Period.days(2);
299 assertEquals(p, PeriodFormat.wordBased(NL).parsePeriod("2 dagen"));
300 }
301
302 //-----------------------------------------------------------------------
303 public void test_wordBased_nl_parseTwoFields() {
304 Period p = Period.days(2).withHours(5);
305 assertEquals(p, PeriodFormat.wordBased(NL).parsePeriod("2 dagen en 5 uur"));
306 }
307
308 //-----------------------------------------------------------------------
309 public void test_wordBased_nl_cached() {
310 assertSame(PeriodFormat.wordBased(NL), PeriodFormat.wordBased(NL));
311 }
312
313 //-----------------------------------------------------------------------
314 // wordBased(Locale da)
315 //-----------------------------------------------------------------------
316 public void test_wordBased_da_formatMultiple() {
317 Period p = new Period(2, 3, 4, 2, 5, 6 ,7, 8);
318 assertEquals("2 \u00E5r, 3 m\u00E5neder, 4 uger, 2 dage, 5 timer, 6 minutter, 7 sekunder og 8 millisekunder", PeriodFormat.wordBased(DA).print(p));
319 }
320
321 //-----------------------------------------------------------------------
322 public void test_wordBased_da_formatSinglular() {
323 Period p = new Period(1, 1, 1, 1, 1, 1, 1, 1);
324 assertEquals("1 \u00E5r, 1 m\u00E5ned, 1 uge, 1 dag, 1 time, 1 minut, 1 sekund og 1 millisekund", PeriodFormat.wordBased(DA).print(p));
325 }
326
327 //-----------------------------------------------------------------------
328 public void test_wordBased_da_cached() {
329 assertSame(PeriodFormat.wordBased(DA), PeriodFormat.wordBased(DA));
330 }
331
332 //-----------------------------------------------------------------------
333 // wordBased(Locale ja)
334 //-----------------------------------------------------------------------
335 public void test_wordBased_ja_formatMultiple() {
336 Period p = new Period(2, 3, 4, 2, 5, 6 ,7, 8);
337 assertEquals("2\u5E743\u304B\u67084\u9031\u95932\u65E55\u6642\u95936\u52067\u79D28\u30DF\u30EA\u79D2", PeriodFormat.wordBased(JA).print(p));
338 }
339
340 //-----------------------------------------------------------------------
341 public void test_wordBased_ja_formatSingular() {
342 Period p = new Period(1, 1, 1, 1, 1, 1, 1, 1);
343 assertEquals("1\u5E741\u304B\u67081\u9031\u95931\u65E51\u6642\u95931\u52061\u79D21\u30DF\u30EA\u79D2", PeriodFormat.wordBased(JA).print(p));
344 }
345
346 //-----------------------------------------------------------------------
347 public void test_wordBased_ja_cached() {
348 assertSame(PeriodFormat.wordBased(JA), PeriodFormat.wordBased(JA));
349 }
350
351 //-----------------------------------------------------------------------
352 public void test_wordBased_ja_parseOneField() {
353 Period p = Period.days(2);
354 assertEquals(p, PeriodFormat.wordBased(JA).parsePeriod("2\u65E5"));
355 }
356
357 //-----------------------------------------------------------------------
358 public void test_wordBased_ja_parseTwoFields() {
359 Period p = Period.days(2).withHours(5);
360 assertEquals(p, PeriodFormat.wordBased(JA).parsePeriod("2\u65E55\u6642\u9593"));
361 }
362
363 //-----------------------------------------------------------------------
364 public void test_wordBased_ja_checkRedundantSeparator() {
365 try {
366 // Spaces are not valid separators in Japanese
367 PeriodFormat.wordBased(JA).parsePeriod("2\u65E5 ");
368 fail("No exception was caught");
369 } catch (Exception e) {
370 assertEquals(IllegalArgumentException.class, e.getClass());
371 }
372 }
373
374 //-----------------------------------------------------------------------
375 // Cross check languages
376 //-----------------------------------------------------------------------
377 public void test_wordBased_fr_from_de() {
378 Locale.setDefault(DE);
379 Period p = new Period(0, 0, 0, 1, 5, 6 ,7, 8);
380 assertEquals("1 jour, 5 heures, 6 minutes, 7 secondes et 8 millisecondes", PeriodFormat.wordBased(FR).print(p));
381 }
382
383 public void test_wordBased_fr_from_nl() {
384 Locale.setDefault(NL);
385 Period p = new Period(0, 0, 0, 1, 5, 6 ,7, 8);
386 assertEquals("1 jour, 5 heures, 6 minutes, 7 secondes et 8 millisecondes", PeriodFormat.wordBased(FR).print(p));
387 }
388
389 public void test_wordBased_en_from_de() {
390 Locale.setDefault(DE);
391 Period p = new Period(0, 0, 0, 1, 5, 6 ,7, 8);
392 assertEquals("1 day, 5 hours, 6 minutes, 7 seconds and 8 milliseconds", PeriodFormat.wordBased(EN).print(p));
393 }
394
395 public void test_wordBased_en_from_nl() {
396 Locale.setDefault(NL);
397 Period p = new Period(0, 0, 0, 1, 5, 6 ,7, 8);
398 assertEquals("1 day, 5 hours, 6 minutes, 7 seconds and 8 milliseconds", PeriodFormat.wordBased(EN).print(p));
399 }
400
401 }