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 }