Home | History | Annotate | Download | only in text
      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.tests.java.text;
     18 
     19 import java.io.ByteArrayInputStream;
     20 import java.io.ByteArrayOutputStream;
     21 import java.io.ObjectInputStream;
     22 import java.io.ObjectOutputStream;
     23 import java.text.DateFormatSymbols;
     24 import java.util.Arrays;
     25 import java.util.Locale;
     26 
     27 public class DateFormatSymbolsTest extends junit.framework.TestCase {
     28 
     29     private DateFormatSymbols dfs;
     30 
     31     /**
     32      * @tests java.text.DateFormatSymbols#DateFormatSymbols()
     33      */
     34     public void test_Constructor() {
     35         // Test for method java.text.DateFormatSymbols()
     36         // Used in tests
     37         new DateFormatSymbols();
     38     }
     39 
     40     /**
     41      * @tests java.text.DateFormatSymbols#DateFormatSymbols(java.util.Locale)
     42      */
     43     public void test_ConstructorLjava_util_Locale() {
     44         // Test for method java.text.DateFormatSymbols(java.util.Locale)
     45         new DateFormatSymbols(new Locale("en", "us"));
     46     }
     47 
     48     /**
     49      * @tests java.text.DateFormatSymbols#getAvailableLocales()
     50      */
     51     public void test_getAvailableLocales_no_provider() throws Exception {
     52         Locale[] locales = DateFormatSymbols.getAvailableLocales();
     53         assertNotNull(locales);
     54         // must contain Locale.US
     55         boolean flag = false;
     56         for (Locale locale : locales) {
     57             if (locale.equals(Locale.US)) {
     58                 flag = true;
     59                 break;
     60             }
     61         }
     62         assertTrue(flag);
     63     }
     64 
     65     /**
     66      * @tests java.text.DateFormatSymbols#getInstance()
     67      */
     68     public void test_getInstance() {
     69         DateFormatSymbols.getInstance();
     70         assertEquals(new DateFormatSymbols(), DateFormatSymbols.getInstance());
     71         assertEquals(new DateFormatSymbols(Locale.getDefault()),
     72                 DateFormatSymbols.getInstance());
     73 
     74         assertNotSame(DateFormatSymbols.getInstance(), DateFormatSymbols.getInstance());
     75     }
     76 
     77     public void test_getInstanceLjava_util_Locale() {
     78         try {
     79             DateFormatSymbols.getInstance(null);
     80             fail();
     81         } catch (NullPointerException expected) {
     82         }
     83 
     84         assertEquals(new DateFormatSymbols(Locale.GERMANY), DateFormatSymbols.getInstance(Locale.GERMANY));
     85 
     86         Locale locale = new Locale("not exist language", "not exist country");
     87         DateFormatSymbols symbols = DateFormatSymbols.getInstance(locale);
     88         assertEquals(DateFormatSymbols.getInstance(Locale.ROOT), symbols);
     89     }
     90 
     91     /**
     92      * @tests java.text.DateFormatSymbols#clone()
     93      */
     94     public void test_clone() {
     95         // Test for method java.lang.Object java.text.DateFormatSymbols.clone()
     96         DateFormatSymbols symbols = new DateFormatSymbols();
     97         DateFormatSymbols clone = (DateFormatSymbols) symbols.clone();
     98         assertTrue("Not equal", symbols.equals(clone));
     99     }
    100 
    101     /**
    102      * @tests java.text.DateFormatSymbols#equals(java.lang.Object)
    103      */
    104     public void test_equalsLjava_lang_Object() {
    105         // Test for method boolean
    106         // java.text.DateFormatSymbols.equals(java.lang.Object)
    107         assertTrue("Equal object returned true", dfs.equals(dfs.clone()));
    108         dfs.setLocalPatternChars("KKKKKKKKK");
    109         assertTrue("Un-Equal objects returned false", !dfs
    110                 .equals(new DateFormatSymbols()));
    111     }
    112 
    113     /**
    114      * @tests java.text.DateFormatSymbols#getAmPmStrings()
    115      */
    116     public void test_getAmPmStrings() {
    117         // Test for method java.lang.String []
    118         // java.text.DateFormatSymbols.getAmPmStrings()
    119         String[] retVal = dfs.getAmPmStrings();
    120         String[] val = { "AM", "PM" };
    121         if (retVal.length != val.length)
    122             fail("Returned wrong array");
    123         for (int i = 0; i < val.length; i++)
    124             assertTrue("Array values do not match", retVal[i].equals(val[i]));
    125     }
    126 
    127     /**
    128      * @tests java.text.DateFormatSymbols#getEras()
    129      */
    130     public void test_getEras() {
    131         // Test for method java.lang.String []
    132         // java.text.DateFormatSymbols.getEras()
    133         String[] retVal = dfs.getEras();
    134         String[] val = { "BC", "AD" };
    135         if (retVal.length != val.length)
    136             fail("Returned wrong array");
    137         for (int i = 0; i < val.length; i++)
    138             assertTrue("Array values do not match", retVal[i].equals(val[i]));
    139     }
    140 
    141     /**
    142      * @tests java.text.DateFormatSymbols#getMonths()
    143      */
    144     public void test_getMonths() {
    145         // Test for method java.lang.String []
    146         // java.text.DateFormatSymbols.getMonths()
    147         String[] retVal = dfs.getMonths();
    148         String[] val = { "January", "February", "March", "April", "May",
    149                 "June", "July", "August", "September", "October", "November",
    150                 "December"};
    151         assertEquals("Returned wrong array: ", val.length, retVal.length);
    152         for (int i = 0; i < val.length; i++)
    153             assertTrue("Array values do not match", retVal[i].equals(val[i]));
    154     }
    155 
    156     /**
    157      * @tests java.text.DateFormatSymbols#getShortMonths()
    158      */
    159     public void test_getShortMonths() {
    160         // Test for method java.lang.String []
    161         // java.text.DateFormatSymbols.getShortMonths()
    162         String[] retVal = dfs.getShortMonths();
    163         String[] val = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul",
    164                 "Aug", "Sep", "Oct", "Nov", "Dec"};
    165         assertEquals("Returned wrong array: ", val.length, retVal.length);
    166         for (int i = 0; i < val.length; i++)
    167             assertTrue("Array values do not match", retVal[i].equals(val[i]));
    168     }
    169 
    170     /**
    171      * @tests java.text.DateFormatSymbols#getShortWeekdays()
    172      */
    173     public void test_getShortWeekdays() {
    174         // Test for method java.lang.String []
    175         // java.text.DateFormatSymbols.getShortWeekdays()
    176         String[] retVal = dfs.getShortWeekdays();
    177         String[] val = { "", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
    178         if (retVal.length != val.length)
    179             fail("Returned wrong array");
    180         for (int i = 0; i < val.length; i++)
    181             assertTrue("Array values do not match", retVal[i].equals(val[i]));
    182     }
    183 
    184     /**
    185      * @tests java.text.DateFormatSymbols#getWeekdays()
    186      */
    187     public void test_getWeekdays() {
    188         // Test for method java.lang.String []
    189         // java.text.DateFormatSymbols.getWeekdays()
    190         String[] retVal = dfs.getWeekdays();
    191         String[] val = { "", "Sunday", "Monday", "Tuesday", "Wednesday",
    192                 "Thursday", "Friday", "Saturday" };
    193         if (retVal.length != val.length)
    194             fail("Returned wrong array");
    195         for (int i = 0; i < val.length; i++)
    196             assertTrue("Array values do not match", retVal[i].equals(val[i]));
    197     }
    198 
    199     /**
    200      * @tests java.text.DateFormatSymbols#getZoneStrings()
    201      */
    202     public void test_getZoneStrings() {
    203         // Test for method java.lang.String [][]
    204         // java.text.DateFormatSymbols.getZoneStrings()
    205         String[][] val = { { "XX", "XX", "XX", "XX", "XX" },
    206                 { "YY", "YY", "YY", "YY", "YY" } };
    207         dfs.setZoneStrings(val);
    208         String[][] retVal = dfs.getZoneStrings();
    209         if (retVal.length != val.length)
    210             fail("Returned wrong array");
    211         for (int i = 0; i < val.length; i++)
    212             assertTrue("Failed to set strings", Arrays
    213                     .equals(retVal[i], val[i]));
    214     }
    215 
    216     /**
    217      * @tests java.text.DateFormatSymbols#hashCode()
    218      */
    219     public void test_hashCode() {
    220         // Test for method int java.text.DateFormatSymbols.hashCode()
    221         int hc1 = dfs.hashCode();
    222         int hc2 = dfs.hashCode();
    223         assertTrue("hashCode() returned inconsistent number : " + hc1 + " - " + hc2, hc1 == hc2);
    224 
    225         assertTrue("hashCode() returns different values for equal() objects",
    226                             dfs.hashCode() == dfs.clone().hashCode());
    227     }
    228 
    229     /**
    230      * @tests java.text.DateFormatSymbols#setAmPmStrings(java.lang.String[])
    231      */
    232     public void test_setAmPmStrings$Ljava_lang_String() {
    233         // Test for method void
    234         // java.text.DateFormatSymbols.setAmPmStrings(java.lang.String [])
    235         String[] val = { "XX", "YY" };
    236         dfs.setAmPmStrings(val);
    237         String[] retVal = dfs.getAmPmStrings();
    238         if (retVal.length != val.length)
    239             fail("Returned wrong array");
    240         for (int i = 0; i < val.length; i++)
    241             assertTrue("Failed to set strings", retVal[i].equals(val[i]));
    242     }
    243 
    244     /**
    245      * @tests java.text.DateFormatSymbols#setEras(java.lang.String[])
    246      */
    247     public void test_setEras$Ljava_lang_String() {
    248         // Test for method void
    249         // java.text.DateFormatSymbols.setEras(java.lang.String [])
    250         String[] val = { "XX", "YY" };
    251         dfs.setEras(val);
    252         String[] retVal = dfs.getEras();
    253         if (retVal.length != val.length)
    254             fail("Returned wrong array");
    255         for (int i = 0; i < val.length; i++)
    256             assertTrue("Failed to set strings", retVal[i].equals(val[i]));
    257     }
    258 
    259     public void test_setLocalPatternCharsLjava_lang_String() {
    260         String patternChars = "GyMZZkHmsSEHHFwWahKz";
    261         dfs.setLocalPatternChars(patternChars);
    262         assertEquals(patternChars, dfs.getLocalPatternChars());
    263 
    264         try {
    265             // Regression for HARMONY-466
    266             new DateFormatSymbols().setLocalPatternChars(null);
    267             fail();
    268         } catch (NullPointerException expected) {
    269         }
    270     }
    271 
    272     /**
    273      * @tests java.text.DateFormatSymbols#setMonths(java.lang.String[])
    274      */
    275     public void test_setMonths$Ljava_lang_String() {
    276         // Test for method void
    277         // java.text.DateFormatSymbols.setMonths(java.lang.String [])
    278         String[] val = { "XX", "YY" };
    279         dfs.setMonths(val);
    280         String[] retVal = dfs.getMonths();
    281         assertTrue("Return is identical", retVal != dfs.getMonths());
    282         if (retVal.length != val.length)
    283             fail("Returned wrong array");
    284         for (int i = 0; i < val.length; i++)
    285             assertTrue("Failed to set strings", retVal[i].equals(val[i]));
    286     }
    287 
    288     /**
    289      * @tests java.text.DateFormatSymbols#setShortMonths(java.lang.String[])
    290      */
    291     public void test_setShortMonths$Ljava_lang_String() {
    292         // Test for method void
    293         // java.text.DateFormatSymbols.setShortMonths(java.lang.String [])
    294         String[] val = { "XX", "YY" };
    295         dfs.setShortMonths(val);
    296         String[] retVal = dfs.getShortMonths();
    297         assertTrue("Return is identical", retVal != dfs.getShortMonths());
    298         if (retVal.length != val.length)
    299             fail("Returned wrong array");
    300         for (int i = 0; i < val.length; i++)
    301             assertTrue("Failed to set strings", retVal[i].equals(val[i]));
    302     }
    303 
    304     /**
    305      * @tests java.text.DateFormatSymbols#setShortWeekdays(java.lang.String[])
    306      */
    307     public void test_setShortWeekdays$Ljava_lang_String() {
    308         // Test for method void
    309         // java.text.DateFormatSymbols.setShortWeekdays(java.lang.String [])
    310         String[] val = { "XX", "YY" };
    311         dfs.setShortWeekdays(val);
    312         String[] retVal = dfs.getShortWeekdays();
    313         assertTrue("Return is identical", retVal != dfs.getShortWeekdays());
    314         if (retVal.length != val.length)
    315             fail("Returned wrong array");
    316         for (int i = 0; i < val.length; i++)
    317             assertTrue("Failed to set strings", retVal[i].equals(val[i]));
    318     }
    319 
    320     /**
    321      * @tests java.text.DateFormatSymbols#setWeekdays(java.lang.String[])
    322      */
    323     public void test_setWeekdays$Ljava_lang_String() {
    324         // Test for method void
    325         // java.text.DateFormatSymbols.setWeekdays(java.lang.String [])
    326         String[] val = { "XX", "YY" };
    327         dfs.setWeekdays(val);
    328         String[] retVal = dfs.getWeekdays();
    329         assertTrue("Return is identical", retVal != dfs.getWeekdays());
    330         if (retVal.length != val.length)
    331             fail("Returned wrong array");
    332         for (int i = 0; i < val.length; i++)
    333             assertTrue("Failed to set strings", retVal[i].equals(val[i]));
    334     }
    335 
    336     /**
    337      * @tests java.text.DateFormatSymbols#setZoneStrings(java.lang.String[][])
    338      */
    339     public void test_setZoneStrings$$Ljava_lang_String() {
    340         // Test for method void
    341         // java.text.DateFormatSymbols.setZoneStrings(java.lang.String [][])
    342         String[][] val = { { "XX", "XX", "XX", "XX", "XX" },
    343                         { "YY", "YY", "YY", "YY", "YY" } };
    344         dfs.setZoneStrings(val);
    345         String[][] retVal = dfs.getZoneStrings();
    346         assertTrue("get returns identical", retVal != dfs.getZoneStrings());
    347         assertTrue("get[0] returns identical", retVal[0] != dfs
    348                 .getZoneStrings()[0]);
    349         assertTrue("get returned identical", retVal != val);
    350         assertEquals("Returned wrong array", val.length, retVal.length);
    351         for (int i = 0; i < val.length; i++)
    352             assertTrue("Failed to set strings: " + retVal[i], Arrays.equals(
    353                     retVal[i], val[i]));
    354     }
    355 
    356     /**
    357      * @tests java.text.DateFormatSymbols#setZoneStrings(java.lang.String[][])
    358      *
    359      * Tests setting zone strings to invalid values
    360      * Regression for HARMONY-6337
    361      */
    362     public void test_setZoneStrings_invalid() {
    363         // failing cases
    364         String[][] val1 = null;
    365         try {
    366             dfs.setZoneStrings(val1);
    367             fail("Attempt to set zone strings a null array should throw NullPointerException");
    368         } catch (NullPointerException e) {
    369             // expected
    370         }
    371 
    372         String[][] val2 = { { "XX", "XX" }, { "YY", "YY" } };
    373         try {
    374             dfs.setZoneStrings(val2);
    375             fail("Attempt to set zone strings to a 2D array that contains one or more "
    376                  + "rows of length less than 5 should throw IllegalArgumentException");
    377         } catch (IllegalArgumentException e) {
    378             // expected because each subarray has length < 5
    379         }
    380 
    381         String[][] val3 = { { "a", "b", "c", "d", "e" },
    382                 { "a", "b", "c", "d", "e" },
    383                 { "a", "b", "c", "d" },
    384                 { "a", "b", "c", "d", "e" } };
    385         try {
    386             dfs.setZoneStrings(val3);
    387             fail("Attempt to set zone strings to a 2D array that contains one or more "
    388                  + "rows of length less than 5 should throw IllegalArgumentException");
    389         } catch (IllegalArgumentException e) {
    390             // expected because each subarray has length < 5
    391         }
    392     }
    393 
    394     /**
    395      * Sets up the fixture, for example, open a network connection. This method
    396      * is called before a test is executed.
    397      */
    398     protected void setUp() {
    399         dfs = new DateFormatSymbols(new Locale("en", "us"));
    400     }
    401 
    402     // Test serialization mechanism of DateFormatSymbols
    403     public void test_serialization() throws Exception {
    404         DateFormatSymbols symbols = new DateFormatSymbols(Locale.FRANCE);
    405         String[][] zoneStrings = symbols.getZoneStrings();
    406         assertNotNull(zoneStrings);
    407 
    408         // serialize
    409         ByteArrayOutputStream byteOStream = new ByteArrayOutputStream();
    410         ObjectOutputStream objectOStream = new ObjectOutputStream(byteOStream);
    411         objectOStream.writeObject(symbols);
    412 
    413         // and deserialize
    414         ObjectInputStream objectIStream = new ObjectInputStream(
    415                 new ByteArrayInputStream(byteOStream.toByteArray()));
    416         DateFormatSymbols symbolsD = (DateFormatSymbols) objectIStream
    417                 .readObject();
    418 
    419         String[][] zoneStringsD = symbolsD.getZoneStrings();
    420         assertNotNull(zoneStringsD);
    421         assertEquals(symbols, symbolsD);
    422     }
    423 }
    424