1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.apache.harmony.text.tests.java.text; 18 19 import java.io.File; 20 import java.net.URL; 21 import java.io.ByteArrayInputStream; 22 import java.io.ByteArrayOutputStream; 23 import java.io.ObjectInputStream; 24 import java.io.ObjectOutputStream; 25 import java.text.DateFormatSymbols; 26 import java.util.Arrays; 27 import java.util.Locale; 28 import java.util.ServiceConfigurationError; 29 30 import org.apache.harmony.text.tests.java.text.MockedDateFormatSymbolsProvider.MockedDateFormatSymbols; 31 32 public class DateFormatSymbolsTest extends junit.framework.TestCase { 33 34 private DateFormatSymbols dfs; 35 36 /** 37 * @tests java.text.DateFormatSymbols#DateFormatSymbols() 38 */ 39 public void test_Constructor() { 40 // Test for method java.text.DateFormatSymbols() 41 // Used in tests 42 new DateFormatSymbols(); 43 } 44 45 /** 46 * @tests java.text.DateFormatSymbols#DateFormatSymbols(java.util.Locale) 47 */ 48 public void test_ConstructorLjava_util_Locale() { 49 // Test for method java.text.DateFormatSymbols(java.util.Locale) 50 new DateFormatSymbols(new Locale("en", "us")); 51 } 52 53 /** 54 * @tests java.text.DateFormatSymbols#getAvailableLocales() 55 */ 56 public void test_getAvailableLocales_no_provider() throws Exception { 57 Locale[] locales = DateFormatSymbols.getAvailableLocales(); 58 assertNotNull(locales); 59 // must contain Locale.US 60 boolean flag = false; 61 for (Locale locale : locales) { 62 if (locale.equals(Locale.US)) { 63 flag = true; 64 break; 65 } 66 } 67 assertTrue(flag); 68 } 69 70 /** 71 * @tests java.text.DateFormatSymbols#getAvailableLocales() 72 */ 73 public void test_getAvailableLocales_correct_provider() throws Exception { 74 URL path1 = new File("src/test/resources/provider/correct").toURL(); 75 URL path2 = new File("resources/provider/correct").toURL(); 76 LoadLocaleProviderTestHelper helper = new LoadLocaleProviderTestHelper( 77 new URL[] { path1, path2 }) { 78 @Override 79 public void test() { 80 Locale[] locales = DateFormatSymbols.getAvailableLocales(); 81 assertNotNull(locales); 82 // must contain mock Locale 83 boolean flag = false; 84 for (Locale locale : locales) { 85 if (locale.getLanguage().equals("mock")) { 86 flag = true; 87 break; 88 } 89 } 90 assertTrue(flag); 91 } 92 93 }; 94 95 if (helper.getThrowable() != null) { 96 throw new Exception(helper.getThrowable()); 97 } 98 } 99 100 /** 101 * @tests java.text.DateFormatSymbols#getAvailableLocales() 102 */ 103 public void test_getAvailableLocales_wrong_provider() throws Exception { 104 URL path1 = new File("src/test/resources/provider/wrong").toURL(); 105 URL path2 = new File("resources/provider/wrong").toURL(); 106 LoadLocaleProviderTestHelper helper = new LoadLocaleProviderTestHelper( 107 new URL[] { path1, path2 }) { 108 @Override 109 public void test() { 110 try { 111 DateFormatSymbols.getAvailableLocales(); 112 fail("Should throw ServiceConfigurationError"); 113 } catch (ServiceConfigurationError e) { 114 // expected 115 } 116 } 117 }; 118 119 if (helper.getThrowable() != null) { 120 throw new Exception(helper.getThrowable()); 121 } 122 } 123 124 /** 125 * @tests java.text.DateFormatSymbols#getInstance() 126 */ 127 public void test_getInstance() { 128 DateFormatSymbols.getInstance(); 129 assertEquals(new DateFormatSymbols(), DateFormatSymbols.getInstance()); 130 assertEquals(new DateFormatSymbols(Locale.getDefault()), 131 DateFormatSymbols.getInstance()); 132 133 assertNotSame(DateFormatSymbols.getInstance(), DateFormatSymbols.getInstance()); 134 } 135 136 public void test_getInstanceLjava_util_Locale() { 137 try { 138 DateFormatSymbols.getInstance(null); 139 fail("Should throw NullPointerException"); 140 } catch (NullPointerException e) { 141 // expected 142 } 143 144 assertEquals(new DateFormatSymbols(Locale.GERMANY), DateFormatSymbols 145 .getInstance(Locale.GERMANY)); 146 147 Locale locale = new Locale("not exist language", "not exist country"); 148 DateFormatSymbols symbols = DateFormatSymbols.getInstance(locale); 149 assertNotNull(symbols); 150 assertEquals(DateFormatSymbols.getInstance(), symbols); 151 } 152 153 /** 154 * @tests java.text.DateFormatSymbols#getInstance(Locale) 155 */ 156 public void test_getInstanceLjava_util_Locale_no_provider() { 157 try { 158 DateFormatSymbols.getInstance(null); 159 fail("Should throw NullPointerException"); 160 } catch (NullPointerException e) { 161 // expected 162 } 163 164 assertEquals(new DateFormatSymbols(Locale.GERMANY), DateFormatSymbols 165 .getInstance(Locale.GERMANY)); 166 167 Locale locale = new Locale("not exist language", "not exist country"); 168 DateFormatSymbols symbols = DateFormatSymbols.getInstance(locale); 169 assertNotNull(symbols); 170 assertEquals(DateFormatSymbols.getInstance(), symbols); 171 } 172 173 /** 174 * @tests java.text.DateFormatSymbols#getInstance(Locale) 175 */ 176 public void test_getInstanceLjava_util_Locale_correct_provider() 177 throws Exception { 178 URL path1 = new File("src/test/resources/provider/correct").toURL(); 179 URL path2 = new File("resources/provider/correct").toURL(); 180 LoadLocaleProviderTestHelper helper = new LoadLocaleProviderTestHelper( 181 new URL[] { path1, path2 }) { 182 @Override 183 public void test() { 184 DateFormatSymbols symbols = DateFormatSymbols 185 .getInstance(new Locale("Mock")); 186 assertTrue(symbols instanceof MockedDateFormatSymbols); 187 188 } 189 }; 190 191 if (helper.getThrowable() != null) { 192 throw new Exception(helper.getThrowable()); 193 } 194 } 195 196 /** 197 * @tests java.text.DateFormatSymbols#getInstance(Locale) 198 */ 199 public void test_getInstanceLjava_util_Locale_wrong_provider() 200 throws Exception { 201 URL path1 = new File("src/test/resources/provider/wrong").toURL(); 202 URL path2 = new File("resources/provider/wrong").toURL(); 203 LoadLocaleProviderTestHelper helper = new LoadLocaleProviderTestHelper( 204 new URL[] { path1, path2 }) { 205 @Override 206 public void test() { 207 try { 208 DateFormatSymbols.getInstance(new Locale("Mock")); 209 fail("Should throw ServiceConfigurationError"); 210 } catch (ServiceConfigurationError e) { 211 // expected 212 } 213 } 214 }; 215 216 if (helper.getThrowable() != null) { 217 throw new Exception(helper.getThrowable()); 218 } 219 } 220 221 /** 222 * @tests java.text.DateFormatSymbols#clone() 223 */ 224 public void test_clone() { 225 // Test for method java.lang.Object java.text.DateFormatSymbols.clone() 226 DateFormatSymbols symbols = new DateFormatSymbols(); 227 DateFormatSymbols clone = (DateFormatSymbols) symbols.clone(); 228 assertTrue("Not equal", symbols.equals(clone)); 229 } 230 231 /** 232 * @tests java.text.DateFormatSymbols#equals(java.lang.Object) 233 */ 234 public void test_equalsLjava_lang_Object() { 235 // Test for method boolean 236 // java.text.DateFormatSymbols.equals(java.lang.Object) 237 assertTrue("Equal object returned true", dfs.equals(dfs.clone())); 238 dfs.setLocalPatternChars("KKKKKKKKK"); 239 assertTrue("Un-Equal objects returned false", !dfs 240 .equals(new DateFormatSymbols())); 241 } 242 243 /** 244 * @tests java.text.DateFormatSymbols#getAmPmStrings() 245 */ 246 public void test_getAmPmStrings() { 247 // Test for method java.lang.String [] 248 // java.text.DateFormatSymbols.getAmPmStrings() 249 String[] retVal = dfs.getAmPmStrings(); 250 String[] val = { "AM", "PM" }; 251 if (retVal.length != val.length) 252 fail("Returned wrong array"); 253 for (int i = 0; i < val.length; i++) 254 assertTrue("Array values do not match", retVal[i].equals(val[i])); 255 } 256 257 /** 258 * @tests java.text.DateFormatSymbols#getEras() 259 */ 260 public void test_getEras() { 261 // Test for method java.lang.String [] 262 // java.text.DateFormatSymbols.getEras() 263 String[] retVal = dfs.getEras(); 264 String[] val = { "BC", "AD" }; 265 if (retVal.length != val.length) 266 fail("Returned wrong array"); 267 for (int i = 0; i < val.length; i++) 268 assertTrue("Array values do not match", retVal[i].equals(val[i])); 269 } 270 271 /** 272 * @tests java.text.DateFormatSymbols#getLocalPatternChars() 273 */ 274 public void test_getLocalPatternChars() { 275 // Test for method java.lang.String 276 // java.text.DateFormatSymbols.getLocalPatternChars() 277 String retVal = dfs.getLocalPatternChars(); 278 279 String val = "GyMdkHmsSEDFwWahKzYeugAZvcLQqV"; 280 281 assertEquals("Returned incorrect pattern string", val, retVal); 282 } 283 284 /** 285 * @tests java.text.DateFormatSymbols#getMonths() 286 */ 287 public void test_getMonths() { 288 // Test for method java.lang.String [] 289 // java.text.DateFormatSymbols.getMonths() 290 String[] retVal = dfs.getMonths(); 291 String[] val = { "January", "February", "March", "April", "May", 292 "June", "July", "August", "September", "October", "November", 293 "December"}; 294 assertEquals("Returned wrong array: ", val.length, retVal.length); 295 for (int i = 0; i < val.length; i++) 296 assertTrue("Array values do not match", retVal[i].equals(val[i])); 297 } 298 299 /** 300 * @tests java.text.DateFormatSymbols#getShortMonths() 301 */ 302 public void test_getShortMonths() { 303 // Test for method java.lang.String [] 304 // java.text.DateFormatSymbols.getShortMonths() 305 String[] retVal = dfs.getShortMonths(); 306 String[] val = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", 307 "Aug", "Sep", "Oct", "Nov", "Dec"}; 308 assertEquals("Returned wrong array: ", val.length, retVal.length); 309 for (int i = 0; i < val.length; i++) 310 assertTrue("Array values do not match", retVal[i].equals(val[i])); 311 } 312 313 /** 314 * @tests java.text.DateFormatSymbols#getShortWeekdays() 315 */ 316 public void test_getShortWeekdays() { 317 // Test for method java.lang.String [] 318 // java.text.DateFormatSymbols.getShortWeekdays() 319 String[] retVal = dfs.getShortWeekdays(); 320 String[] val = { "", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; 321 if (retVal.length != val.length) 322 fail("Returned wrong array"); 323 for (int i = 0; i < val.length; i++) 324 assertTrue("Array values do not match", retVal[i].equals(val[i])); 325 } 326 327 /** 328 * @tests java.text.DateFormatSymbols#getWeekdays() 329 */ 330 public void test_getWeekdays() { 331 // Test for method java.lang.String [] 332 // java.text.DateFormatSymbols.getWeekdays() 333 String[] retVal = dfs.getWeekdays(); 334 String[] val = { "", "Sunday", "Monday", "Tuesday", "Wednesday", 335 "Thursday", "Friday", "Saturday" }; 336 if (retVal.length != val.length) 337 fail("Returned wrong array"); 338 for (int i = 0; i < val.length; i++) 339 assertTrue("Array values do not match", retVal[i].equals(val[i])); 340 } 341 342 /** 343 * @tests java.text.DateFormatSymbols#getZoneStrings() 344 */ 345 public void test_getZoneStrings() { 346 // Test for method java.lang.String [][] 347 // java.text.DateFormatSymbols.getZoneStrings() 348 String[][] val = { { "XX", "XX", "XX", "XX", "XX" }, 349 { "YY", "YY", "YY", "YY", "YY" } }; 350 dfs.setZoneStrings(val); 351 String[][] retVal = dfs.getZoneStrings(); 352 if (retVal.length != val.length) 353 fail("Returned wrong array"); 354 for (int i = 0; i < val.length; i++) 355 assertTrue("Failed to set strings", Arrays 356 .equals(retVal[i], val[i])); 357 } 358 359 /** 360 * @tests java.text.DateFormatSymbols#hashCode() 361 */ 362 public void test_hashCode() { 363 // Test for method int java.text.DateFormatSymbols.hashCode() 364 int hc1 = dfs.hashCode(); 365 int hc2 = dfs.hashCode(); 366 assertTrue("hashCode() returned inconsistent number : " + hc1 + " - " + hc2, hc1 == hc2); 367 368 assertTrue("hashCode() returns different values for equal() objects", 369 dfs.hashCode() == dfs.clone().hashCode()); 370 } 371 372 /** 373 * @tests java.text.DateFormatSymbols#setAmPmStrings(java.lang.String[]) 374 */ 375 public void test_setAmPmStrings$Ljava_lang_String() { 376 // Test for method void 377 // java.text.DateFormatSymbols.setAmPmStrings(java.lang.String []) 378 String[] val = { "XX", "YY" }; 379 dfs.setAmPmStrings(val); 380 String[] retVal = dfs.getAmPmStrings(); 381 if (retVal.length != val.length) 382 fail("Returned wrong array"); 383 for (int i = 0; i < val.length; i++) 384 assertTrue("Failed to set strings", retVal[i].equals(val[i])); 385 } 386 387 /** 388 * @tests java.text.DateFormatSymbols#setEras(java.lang.String[]) 389 */ 390 public void test_setEras$Ljava_lang_String() { 391 // Test for method void 392 // java.text.DateFormatSymbols.setEras(java.lang.String []) 393 String[] val = { "XX", "YY" }; 394 dfs.setEras(val); 395 String[] retVal = dfs.getEras(); 396 if (retVal.length != val.length) 397 fail("Returned wrong array"); 398 for (int i = 0; i < val.length; i++) 399 assertTrue("Failed to set strings", retVal[i].equals(val[i])); 400 } 401 402 /** 403 * @tests java.text.DateFormatSymbols#setLocalPatternChars(java.lang.String) 404 */ 405 public void test_setLocalPatternCharsLjava_lang_String() { 406 // Test for method void 407 // java.text.DateFormatSymbols.setLocalPatternChars(java.lang.String) 408 dfs.setLocalPatternChars("GyMZZkHmsSEHHFwWahKz"); 409 String retVal = dfs.getLocalPatternChars(); 410 String val = "GyMZZkHmsSEHHFwWahKz"; 411 assertTrue("Returned incorrect pattern string", retVal.equals(val)); 412 413 try { 414 // Regression for HARMONY-466 415 new DateFormatSymbols().setLocalPatternChars(null); 416 fail("NullPointerException expected"); 417 } catch (NullPointerException e) { 418 // expected 419 } 420 } 421 422 /** 423 * @tests java.text.DateFormatSymbols#setMonths(java.lang.String[]) 424 */ 425 public void test_setMonths$Ljava_lang_String() { 426 // Test for method void 427 // java.text.DateFormatSymbols.setMonths(java.lang.String []) 428 String[] val = { "XX", "YY" }; 429 dfs.setMonths(val); 430 String[] retVal = dfs.getMonths(); 431 assertTrue("Return is identical", retVal != dfs.getMonths()); 432 if (retVal.length != val.length) 433 fail("Returned wrong array"); 434 for (int i = 0; i < val.length; i++) 435 assertTrue("Failed to set strings", retVal[i].equals(val[i])); 436 } 437 438 /** 439 * @tests java.text.DateFormatSymbols#setShortMonths(java.lang.String[]) 440 */ 441 public void test_setShortMonths$Ljava_lang_String() { 442 // Test for method void 443 // java.text.DateFormatSymbols.setShortMonths(java.lang.String []) 444 String[] val = { "XX", "YY" }; 445 dfs.setShortMonths(val); 446 String[] retVal = dfs.getShortMonths(); 447 assertTrue("Return is identical", retVal != dfs.getShortMonths()); 448 if (retVal.length != val.length) 449 fail("Returned wrong array"); 450 for (int i = 0; i < val.length; i++) 451 assertTrue("Failed to set strings", retVal[i].equals(val[i])); 452 } 453 454 /** 455 * @tests java.text.DateFormatSymbols#setShortWeekdays(java.lang.String[]) 456 */ 457 public void test_setShortWeekdays$Ljava_lang_String() { 458 // Test for method void 459 // java.text.DateFormatSymbols.setShortWeekdays(java.lang.String []) 460 String[] val = { "XX", "YY" }; 461 dfs.setShortWeekdays(val); 462 String[] retVal = dfs.getShortWeekdays(); 463 assertTrue("Return is identical", retVal != dfs.getShortWeekdays()); 464 if (retVal.length != val.length) 465 fail("Returned wrong array"); 466 for (int i = 0; i < val.length; i++) 467 assertTrue("Failed to set strings", retVal[i].equals(val[i])); 468 } 469 470 /** 471 * @tests java.text.DateFormatSymbols#setWeekdays(java.lang.String[]) 472 */ 473 public void test_setWeekdays$Ljava_lang_String() { 474 // Test for method void 475 // java.text.DateFormatSymbols.setWeekdays(java.lang.String []) 476 String[] val = { "XX", "YY" }; 477 dfs.setWeekdays(val); 478 String[] retVal = dfs.getWeekdays(); 479 assertTrue("Return is identical", retVal != dfs.getWeekdays()); 480 if (retVal.length != val.length) 481 fail("Returned wrong array"); 482 for (int i = 0; i < val.length; i++) 483 assertTrue("Failed to set strings", retVal[i].equals(val[i])); 484 } 485 486 /** 487 * @tests java.text.DateFormatSymbols#setZoneStrings(java.lang.String[][]) 488 */ 489 public void test_setZoneStrings$$Ljava_lang_String() { 490 // Test for method void 491 // java.text.DateFormatSymbols.setZoneStrings(java.lang.String [][]) 492 String[][] val = { { "XX", "XX", "XX", "XX", "XX" }, 493 { "YY", "YY", "YY", "YY", "YY" } }; 494 dfs.setZoneStrings(val); 495 String[][] retVal = dfs.getZoneStrings(); 496 assertTrue("get returns identical", retVal != dfs.getZoneStrings()); 497 assertTrue("get[0] returns identical", retVal[0] != dfs 498 .getZoneStrings()[0]); 499 assertTrue("get returned identical", retVal != val); 500 assertEquals("Returned wrong array", val.length, retVal.length); 501 for (int i = 0; i < val.length; i++) 502 assertTrue("Failed to set strings: " + retVal[i], Arrays.equals( 503 retVal[i], val[i])); 504 } 505 506 /** 507 * @tests java.text.DateFormatSymbols#setZoneStrings(java.lang.String[][]) 508 * 509 * Tests setting zone strings to invalid values 510 * Regression for HARMONY-6337 511 */ 512 public void test_setZoneStrings_invalid() { 513 // failing cases 514 String[][] val1 = null; 515 try { 516 dfs.setZoneStrings(val1); 517 fail("Attempt to set zone strings a null array should throw NullPointerException"); 518 } catch (NullPointerException e) { 519 // expected 520 } 521 522 String[][] val2 = { { "XX", "XX" }, { "YY", "YY" } }; 523 try { 524 dfs.setZoneStrings(val2); 525 fail("Attempt to set zone strings to a 2D array that contains one or more " 526 + "rows of length less than 5 should throw IllegalArgumentException"); 527 } catch (IllegalArgumentException e) { 528 // expected because each subarray has length < 5 529 } 530 531 String[][] val3 = { { "a", "b", "c", "d", "e" }, 532 { "a", "b", "c", "d", "e" }, 533 { "a", "b", "c", "d" }, 534 { "a", "b", "c", "d", "e" } }; 535 try { 536 dfs.setZoneStrings(val3); 537 fail("Attempt to set zone strings to a 2D array that contains one or more " 538 + "rows of length less than 5 should throw IllegalArgumentException"); 539 } catch (IllegalArgumentException e) { 540 // expected because each subarray has length < 5 541 } 542 } 543 544 /** 545 * Sets up the fixture, for example, open a network connection. This method 546 * is called before a test is executed. 547 */ 548 protected void setUp() { 549 dfs = new DateFormatSymbols(new Locale("en", "us")); 550 } 551 552 /** 553 * Tears down the fixture, for example, close a network connection. This 554 * method is called after a test is executed. 555 */ 556 protected void tearDown() { 557 } 558 559 // Test serialization mechanism of DateFormatSymbols 560 public void test_serialization() throws Exception { 561 DateFormatSymbols symbols = new DateFormatSymbols(Locale.FRANCE); 562 String[][] zoneStrings = symbols.getZoneStrings(); 563 assertNotNull(zoneStrings); 564 565 // serialize 566 ByteArrayOutputStream byteOStream = new ByteArrayOutputStream(); 567 ObjectOutputStream objectOStream = new ObjectOutputStream(byteOStream); 568 objectOStream.writeObject(symbols); 569 570 // and deserialize 571 ObjectInputStream objectIStream = new ObjectInputStream( 572 new ByteArrayInputStream(byteOStream.toByteArray())); 573 DateFormatSymbols symbolsD = (DateFormatSymbols) objectIStream 574 .readObject(); 575 576 // The associated currency will not persist 577 String[][] zoneStringsD = symbolsD.getZoneStrings(); 578 assertNotNull(zoneStringsD); 579 assertEquals(symbols, symbolsD); 580 } 581 } 582