/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.harmony.tests.java.text;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.text.DateFormatSymbols;
import java.util.Arrays;
import java.util.Locale;
public class DateFormatSymbolsTest extends junit.framework.TestCase {
private DateFormatSymbols dfs;
/**
* @tests java.text.DateFormatSymbols#DateFormatSymbols()
*/
public void test_Constructor() {
// Test for method java.text.DateFormatSymbols()
// Used in tests
new DateFormatSymbols();
}
/**
* @tests java.text.DateFormatSymbols#DateFormatSymbols(java.util.Locale)
*/
public void test_ConstructorLjava_util_Locale() {
// Test for method java.text.DateFormatSymbols(java.util.Locale)
new DateFormatSymbols(new Locale("en", "us"));
}
/**
* @tests java.text.DateFormatSymbols#getAvailableLocales()
*/
public void test_getAvailableLocales_no_provider() throws Exception {
Locale[] locales = DateFormatSymbols.getAvailableLocales();
assertNotNull(locales);
// must contain Locale.US
boolean flag = false;
for (Locale locale : locales) {
if (locale.equals(Locale.US)) {
flag = true;
break;
}
}
assertTrue(flag);
}
/**
* @tests java.text.DateFormatSymbols#getInstance()
*/
public void test_getInstance() {
DateFormatSymbols.getInstance();
assertEquals(new DateFormatSymbols(), DateFormatSymbols.getInstance());
assertEquals(new DateFormatSymbols(Locale.getDefault()),
DateFormatSymbols.getInstance());
assertNotSame(DateFormatSymbols.getInstance(), DateFormatSymbols.getInstance());
}
public void test_getInstanceLjava_util_Locale() {
try {
DateFormatSymbols.getInstance(null);
fail();
} catch (NullPointerException expected) {
}
assertEquals(new DateFormatSymbols(Locale.GERMANY), DateFormatSymbols.getInstance(Locale.GERMANY));
Locale locale = new Locale("not exist language", "not exist country");
DateFormatSymbols symbols = DateFormatSymbols.getInstance(locale);
assertEquals(DateFormatSymbols.getInstance(Locale.ROOT), symbols);
}
/**
* @tests java.text.DateFormatSymbols#clone()
*/
public void test_clone() {
// Test for method java.lang.Object java.text.DateFormatSymbols.clone()
DateFormatSymbols symbols = new DateFormatSymbols();
DateFormatSymbols clone = (DateFormatSymbols) symbols.clone();
assertTrue("Not equal", symbols.equals(clone));
}
/**
* @tests java.text.DateFormatSymbols#equals(java.lang.Object)
*/
public void test_equalsLjava_lang_Object() {
// Test for method boolean
// java.text.DateFormatSymbols.equals(java.lang.Object)
assertTrue("Equal object returned true", dfs.equals(dfs.clone()));
dfs.setLocalPatternChars("KKKKKKKKK");
assertTrue("Un-Equal objects returned false", !dfs
.equals(new DateFormatSymbols()));
}
/**
* @tests java.text.DateFormatSymbols#getAmPmStrings()
*/
public void test_getAmPmStrings() {
// Test for method java.lang.String []
// java.text.DateFormatSymbols.getAmPmStrings()
String[] retVal = dfs.getAmPmStrings();
String[] val = { "AM", "PM" };
if (retVal.length != val.length)
fail("Returned wrong array");
for (int i = 0; i < val.length; i++)
assertTrue("Array values do not match", retVal[i].equals(val[i]));
}
/**
* @tests java.text.DateFormatSymbols#getEras()
*/
public void test_getEras() {
// Test for method java.lang.String []
// java.text.DateFormatSymbols.getEras()
String[] retVal = dfs.getEras();
String[] val = { "BC", "AD" };
if (retVal.length != val.length)
fail("Returned wrong array");
for (int i = 0; i < val.length; i++)
assertTrue("Array values do not match", retVal[i].equals(val[i]));
}
/**
* @tests java.text.DateFormatSymbols#getMonths()
*/
public void test_getMonths() {
// Test for method java.lang.String []
// java.text.DateFormatSymbols.getMonths()
String[] retVal = dfs.getMonths();
String[] val = { "January", "February", "March", "April", "May",
"June", "July", "August", "September", "October", "November",
"December"};
assertEquals("Returned wrong array: ", val.length, retVal.length);
for (int i = 0; i < val.length; i++)
assertTrue("Array values do not match", retVal[i].equals(val[i]));
}
/**
* @tests java.text.DateFormatSymbols#getShortMonths()
*/
public void test_getShortMonths() {
// Test for method java.lang.String []
// java.text.DateFormatSymbols.getShortMonths()
String[] retVal = dfs.getShortMonths();
String[] val = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul",
"Aug", "Sep", "Oct", "Nov", "Dec"};
assertEquals("Returned wrong array: ", val.length, retVal.length);
for (int i = 0; i < val.length; i++)
assertTrue("Array values do not match", retVal[i].equals(val[i]));
}
/**
* @tests java.text.DateFormatSymbols#getShortWeekdays()
*/
public void test_getShortWeekdays() {
// Test for method java.lang.String []
// java.text.DateFormatSymbols.getShortWeekdays()
String[] retVal = dfs.getShortWeekdays();
String[] val = { "", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
if (retVal.length != val.length)
fail("Returned wrong array");
for (int i = 0; i < val.length; i++)
assertTrue("Array values do not match", retVal[i].equals(val[i]));
}
/**
* @tests java.text.DateFormatSymbols#getWeekdays()
*/
public void test_getWeekdays() {
// Test for method java.lang.String []
// java.text.DateFormatSymbols.getWeekdays()
String[] retVal = dfs.getWeekdays();
String[] val = { "", "Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday" };
if (retVal.length != val.length)
fail("Returned wrong array");
for (int i = 0; i < val.length; i++)
assertTrue("Array values do not match", retVal[i].equals(val[i]));
}
/**
* @tests java.text.DateFormatSymbols#getZoneStrings()
*/
public void test_getZoneStrings() {
// Test for method java.lang.String [][]
// java.text.DateFormatSymbols.getZoneStrings()
String[][] val = { { "XX", "XX", "XX", "XX", "XX" },
{ "YY", "YY", "YY", "YY", "YY" } };
dfs.setZoneStrings(val);
String[][] retVal = dfs.getZoneStrings();
if (retVal.length != val.length)
fail("Returned wrong array");
for (int i = 0; i < val.length; i++)
assertTrue("Failed to set strings", Arrays
.equals(retVal[i], val[i]));
}
/**
* @tests java.text.DateFormatSymbols#hashCode()
*/
public void test_hashCode() {
// Test for method int java.text.DateFormatSymbols.hashCode()
int hc1 = dfs.hashCode();
int hc2 = dfs.hashCode();
assertTrue("hashCode() returned inconsistent number : " + hc1 + " - " + hc2, hc1 == hc2);
assertTrue("hashCode() returns different values for equal() objects",
dfs.hashCode() == dfs.clone().hashCode());
}
/**
* @tests java.text.DateFormatSymbols#setAmPmStrings(java.lang.String[])
*/
public void test_setAmPmStrings$Ljava_lang_String() {
// Test for method void
// java.text.DateFormatSymbols.setAmPmStrings(java.lang.String [])
String[] val = { "XX", "YY" };
dfs.setAmPmStrings(val);
String[] retVal = dfs.getAmPmStrings();
if (retVal.length != val.length)
fail("Returned wrong array");
for (int i = 0; i < val.length; i++)
assertTrue("Failed to set strings", retVal[i].equals(val[i]));
}
/**
* @tests java.text.DateFormatSymbols#setEras(java.lang.String[])
*/
public void test_setEras$Ljava_lang_String() {
// Test for method void
// java.text.DateFormatSymbols.setEras(java.lang.String [])
String[] val = { "XX", "YY" };
dfs.setEras(val);
String[] retVal = dfs.getEras();
if (retVal.length != val.length)
fail("Returned wrong array");
for (int i = 0; i < val.length; i++)
assertTrue("Failed to set strings", retVal[i].equals(val[i]));
}
public void test_setLocalPatternCharsLjava_lang_String() {
String patternChars = "GyMZZkHmsSEHHFwWahKz";
dfs.setLocalPatternChars(patternChars);
assertEquals(patternChars, dfs.getLocalPatternChars());
try {
// Regression for HARMONY-466
new DateFormatSymbols().setLocalPatternChars(null);
fail();
} catch (NullPointerException expected) {
}
}
/**
* @tests java.text.DateFormatSymbols#setMonths(java.lang.String[])
*/
public void test_setMonths$Ljava_lang_String() {
// Test for method void
// java.text.DateFormatSymbols.setMonths(java.lang.String [])
String[] val = { "XX", "YY" };
dfs.setMonths(val);
String[] retVal = dfs.getMonths();
assertTrue("Return is identical", retVal != dfs.getMonths());
if (retVal.length != val.length)
fail("Returned wrong array");
for (int i = 0; i < val.length; i++)
assertTrue("Failed to set strings", retVal[i].equals(val[i]));
}
/**
* @tests java.text.DateFormatSymbols#setShortMonths(java.lang.String[])
*/
public void test_setShortMonths$Ljava_lang_String() {
// Test for method void
// java.text.DateFormatSymbols.setShortMonths(java.lang.String [])
String[] val = { "XX", "YY" };
dfs.setShortMonths(val);
String[] retVal = dfs.getShortMonths();
assertTrue("Return is identical", retVal != dfs.getShortMonths());
if (retVal.length != val.length)
fail("Returned wrong array");
for (int i = 0; i < val.length; i++)
assertTrue("Failed to set strings", retVal[i].equals(val[i]));
}
/**
* @tests java.text.DateFormatSymbols#setShortWeekdays(java.lang.String[])
*/
public void test_setShortWeekdays$Ljava_lang_String() {
// Test for method void
// java.text.DateFormatSymbols.setShortWeekdays(java.lang.String [])
String[] val = { "XX", "YY" };
dfs.setShortWeekdays(val);
String[] retVal = dfs.getShortWeekdays();
assertTrue("Return is identical", retVal != dfs.getShortWeekdays());
if (retVal.length != val.length)
fail("Returned wrong array");
for (int i = 0; i < val.length; i++)
assertTrue("Failed to set strings", retVal[i].equals(val[i]));
}
/**
* @tests java.text.DateFormatSymbols#setWeekdays(java.lang.String[])
*/
public void test_setWeekdays$Ljava_lang_String() {
// Test for method void
// java.text.DateFormatSymbols.setWeekdays(java.lang.String [])
String[] val = { "XX", "YY" };
dfs.setWeekdays(val);
String[] retVal = dfs.getWeekdays();
assertTrue("Return is identical", retVal != dfs.getWeekdays());
if (retVal.length != val.length)
fail("Returned wrong array");
for (int i = 0; i < val.length; i++)
assertTrue("Failed to set strings", retVal[i].equals(val[i]));
}
/**
* @tests java.text.DateFormatSymbols#setZoneStrings(java.lang.String[][])
*/
public void test_setZoneStrings$$Ljava_lang_String() {
// Test for method void
// java.text.DateFormatSymbols.setZoneStrings(java.lang.String [][])
String[][] val = { { "XX", "XX", "XX", "XX", "XX" },
{ "YY", "YY", "YY", "YY", "YY" } };
dfs.setZoneStrings(val);
String[][] retVal = dfs.getZoneStrings();
assertTrue("get returns identical", retVal != dfs.getZoneStrings());
assertTrue("get[0] returns identical", retVal[0] != dfs
.getZoneStrings()[0]);
assertTrue("get returned identical", retVal != val);
assertEquals("Returned wrong array", val.length, retVal.length);
for (int i = 0; i < val.length; i++)
assertTrue("Failed to set strings: " + retVal[i], Arrays.equals(
retVal[i], val[i]));
}
/**
* @tests java.text.DateFormatSymbols#setZoneStrings(java.lang.String[][])
*
* Tests setting zone strings to invalid values
* Regression for HARMONY-6337
*/
public void test_setZoneStrings_invalid() {
// failing cases
String[][] val1 = null;
try {
dfs.setZoneStrings(val1);
fail("Attempt to set zone strings a null array should throw NullPointerException");
} catch (NullPointerException e) {
// expected
}
String[][] val2 = { { "XX", "XX" }, { "YY", "YY" } };
try {
dfs.setZoneStrings(val2);
fail("Attempt to set zone strings to a 2D array that contains one or more "
+ "rows of length less than 5 should throw IllegalArgumentException");
} catch (IllegalArgumentException e) {
// expected because each subarray has length < 5
}
String[][] val3 = { { "a", "b", "c", "d", "e" },
{ "a", "b", "c", "d", "e" },
{ "a", "b", "c", "d" },
{ "a", "b", "c", "d", "e" } };
try {
dfs.setZoneStrings(val3);
fail("Attempt to set zone strings to a 2D array that contains one or more "
+ "rows of length less than 5 should throw IllegalArgumentException");
} catch (IllegalArgumentException e) {
// expected because each subarray has length < 5
}
}
/**
* Sets up the fixture, for example, open a network connection. This method
* is called before a test is executed.
*/
protected void setUp() {
dfs = new DateFormatSymbols(new Locale("en", "us"));
}
// Test serialization mechanism of DateFormatSymbols
public void test_serialization() throws Exception {
DateFormatSymbols symbols = new DateFormatSymbols(Locale.FRANCE);
String[][] zoneStrings = symbols.getZoneStrings();
assertNotNull(zoneStrings);
// serialize
ByteArrayOutputStream byteOStream = new ByteArrayOutputStream();
ObjectOutputStream objectOStream = new ObjectOutputStream(byteOStream);
objectOStream.writeObject(symbols);
// and deserialize
ObjectInputStream objectIStream = new ObjectInputStream(
new ByteArrayInputStream(byteOStream.toByteArray()));
DateFormatSymbols symbolsD = (DateFormatSymbols) objectIStream
.readObject();
String[][] zoneStringsD = symbolsD.getZoneStrings();
assertNotNull(zoneStringsD);
assertEquals(symbols, symbolsD);
}
}