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 
     18 package org.apache.harmony.tests.java.text;
     19 
     20 import java.text.DateFormat;
     21 import java.text.NumberFormat;
     22 import java.text.SimpleDateFormat;
     23 import java.text.DateFormat.Field;
     24 import java.util.Calendar;
     25 import java.util.Date;
     26 import java.util.GregorianCalendar;
     27 import java.util.Locale;
     28 import java.util.TimeZone;
     29 import java.util.Vector;
     30 
     31 import org.apache.harmony.tests.java.text.Support_Format.FieldContainer;
     32 
     33 public class Support_SimpleDateFormat extends Support_Format {
     34 
     35   public Support_SimpleDateFormat(String p1) {
     36     super(p1);
     37   }
     38 
     39   @Override public void runTest() {
     40     t_formatToCharacterIterator();
     41     t_format_with_FieldPosition();
     42   }
     43 
     44   public static void main(String[] args) {
     45     new Support_SimpleDateFormat("").runTest();
     46   }
     47 
     48   public void t_format_with_FieldPosition() {
     49     TimeZone tz = TimeZone.getTimeZone("EST");
     50     Calendar cal = new GregorianCalendar(tz);
     51     cal.set(1999, Calendar.SEPTEMBER, 13, 17, 19, 01);
     52     cal.set(Calendar.MILLISECOND, 0);
     53     Date date = cal.getTime();
     54     SimpleDateFormat format = (SimpleDateFormat) DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.US);
     55     format.setTimeZone(tz);
     56 
     57     // test with all pattern chars, and multiple occurences
     58     format.applyPattern("G GGGG y yy yyyy M MM MMM MMMM d dd ddd " +
     59                         "k kk kkk H HH HHH h hh hhh m mmm s ss sss S SS SSS EE EEEE " +
     60                         "D DD DDD F FF w www W WWW " +
     61                         "a  aaa  K KKK z zzzz Z ZZZZ");
     62 
     63     StringBuffer textBuffer = new StringBuffer();
     64     // Really, GGGG should be "Anno Domini", but the RI doesn't support that and no one cares.
     65     textBuffer.append("AD AD 1999 99 1999 9 09 Sep September 13 13 013 ");
     66     textBuffer.append("17 17 017 17 17 017 5 05 005 19 019 1 01 001 0 00 000 Mon Monday ");
     67     textBuffer.append("256 256 256 2 02 38 038 3 003 ");
     68     textBuffer.append("PM  PM  5 005 GMT-05:00 GMT-05:00 -0500 GMT-05:00");
     69 
     70     // to avoid passing the huge StringBuffer each time.
     71     super.text = textBuffer.toString();
     72 
     73     // test if field positions are set correctly for these fields occurring
     74     // multiple times.
     75     t_FormatWithField(0, format, date, null, Field.ERA, 0, 2);
     76     t_FormatWithField(1, format, date, null, Field.YEAR, 6, 10);
     77     t_FormatWithField(2, format, date, null, Field.MONTH, 19, 20);
     78     t_FormatWithField(3, format, date, null, Field.DAY_OF_MONTH, 38, 40);
     79     t_FormatWithField(4, format, date, null, Field.HOUR_OF_DAY1, 48, 50);
     80     t_FormatWithField(5, format, date, null, Field.HOUR_OF_DAY0, 58, 60);
     81     t_FormatWithField(6, format, date, null, Field.HOUR1, 68, 69);
     82     t_FormatWithField(7, format, date, null, Field.MINUTE, 77, 79);
     83     t_FormatWithField(8, format, date, null, Field.SECOND, 84, 85);
     84     t_FormatWithField(9, format, date, null, Field.MILLISECOND, 93, 94);
     85     t_FormatWithField(10, format, date, null, Field.DAY_OF_WEEK, 102, 105);
     86     t_FormatWithField(11, format, date, null, Field.DAY_OF_YEAR, 113, 116);
     87     t_FormatWithField(12, format, date, null, Field.DAY_OF_WEEK_IN_MONTH, 125, 126);
     88     t_FormatWithField(13, format, date, null, Field.WEEK_OF_YEAR, 130, 132);
     89     t_FormatWithField(14, format, date, null, Field.WEEK_OF_MONTH, 137, 138);
     90     t_FormatWithField(15, format, date, null, Field.AM_PM, 143, 145);
     91     t_FormatWithField(16, format, date, null, Field.HOUR0, 151, 152);
     92     t_FormatWithField(17, format, date, null, Field.TIME_ZONE, 157, 166);
     93 
     94     // test fields that are not included in the formatted text
     95     t_FormatWithField(18, format, date, null, NumberFormat.Field.EXPONENT_SIGN, 0, 0);
     96 
     97     // test with simple example
     98     format.applyPattern("h:m z");
     99 
    100     super.text = "5:19 GMT-05:00";
    101     t_FormatWithField(21, format, date, null, Field.HOUR1, 0, 1);
    102     t_FormatWithField(22, format, date, null, Field.MINUTE, 2, 4);
    103     t_FormatWithField(23, format, date, null, Field.TIME_ZONE, 5, 14);
    104 
    105     // test fields that are not included in the formatted text
    106     t_FormatWithField(24, format, date, null, Field.ERA, 0, 0);
    107     t_FormatWithField(25, format, date, null, Field.YEAR, 0, 0);
    108     t_FormatWithField(26, format, date, null, Field.MONTH, 0, 0);
    109     t_FormatWithField(27, format, date, null, Field.DAY_OF_MONTH, 0, 0);
    110     t_FormatWithField(28, format, date, null, Field.HOUR_OF_DAY1, 0, 0);
    111     t_FormatWithField(29, format, date, null, Field.HOUR_OF_DAY0, 0, 0);
    112     t_FormatWithField(30, format, date, null, Field.SECOND, 0, 0);
    113     t_FormatWithField(31, format, date, null, Field.MILLISECOND, 0, 0);
    114     t_FormatWithField(32, format, date, null, Field.DAY_OF_WEEK, 0, 0);
    115     t_FormatWithField(33, format, date, null, Field.DAY_OF_YEAR, 0, 0);
    116     t_FormatWithField(34, format, date, null, Field.DAY_OF_WEEK_IN_MONTH, 0, 0);
    117     t_FormatWithField(35, format, date, null, Field.WEEK_OF_YEAR, 0, 0);
    118     t_FormatWithField(36, format, date, null, Field.WEEK_OF_MONTH, 0, 0);
    119     t_FormatWithField(37, format, date, null, Field.AM_PM, 0, 0);
    120     t_FormatWithField(38, format, date, null, Field.HOUR0, 0, 0);
    121 
    122     t_FormatWithField(39, format, date, null, NumberFormat.Field.EXPONENT, 0, 0);
    123 
    124     // test with simple example with pattern char Z
    125     format.applyPattern("h:m Z z");
    126     super.text = "5:19 -0500 GMT-05:00";
    127     t_FormatWithField(40, format, date, null, Field.HOUR1, 0, 1);
    128     t_FormatWithField(41, format, date, null, Field.MINUTE, 2, 4);
    129     t_FormatWithField(42, format, date, null, Field.TIME_ZONE, 5, 10);
    130   }
    131 
    132   public void t_formatToCharacterIterator() {
    133     TimeZone tz = TimeZone.getTimeZone("EST");
    134     Calendar cal = new GregorianCalendar(tz);
    135     cal.set(1999, Calendar.SEPTEMBER, 13, 17, 19, 01);
    136     cal.set(Calendar.MILLISECOND, 0);
    137     Date date = cal.getTime();
    138     SimpleDateFormat format = (SimpleDateFormat) DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.US);
    139     format.setTimeZone(tz);
    140 
    141     format.applyPattern("yyyyMMddHHmmss");
    142     t_Format(1, date, format, getDateVector1());
    143 
    144     format.applyPattern("w W dd MMMM yyyy EEEE");
    145     t_Format(2, date, format, getDateVector2());
    146 
    147     format.applyPattern("h:m z");
    148     t_Format(3, date, format, getDateVector3());
    149 
    150     format.applyPattern("h:m Z");
    151     t_Format(5, date, format, getDateVector5());
    152 
    153     // with all pattern chars, and multiple occurences
    154     format.applyPattern("G GGGG y yy yyyy M MM MMM MMMM d dd ddd k kk kkk H HH HHH h hh hhh m mmm s ss sss S SS SSS EE EEEE D DD DDD F FF w www W WWW a  aaa  K KKK z zzzz Z ZZZZ");
    155     t_Format(4, date, format, getDateVector4());
    156   }
    157 
    158   private Vector<FieldContainer> getDateVector1() {
    159     // "19990913171901"
    160     Vector<FieldContainer> v = new Vector<FieldContainer>();
    161     v.add(new FieldContainer(0, 4, Field.YEAR));
    162     v.add(new FieldContainer(4, 6, Field.MONTH));
    163     v.add(new FieldContainer(6, 8, Field.DAY_OF_MONTH));
    164     v.add(new FieldContainer(8, 10, Field.HOUR_OF_DAY0));
    165     v.add(new FieldContainer(10, 12, Field.MINUTE));
    166     v.add(new FieldContainer(12, 14, Field.SECOND));
    167     return v;
    168   }
    169 
    170   private Vector<FieldContainer> getDateVector2() {
    171     // "12 3 5 March 2002 Monday"
    172     Vector<FieldContainer> v = new Vector<FieldContainer>();
    173     v.add(new FieldContainer(0, 2, Field.WEEK_OF_YEAR));
    174     v.add(new FieldContainer(3, 4, Field.WEEK_OF_MONTH));
    175     v.add(new FieldContainer(5, 7, Field.DAY_OF_MONTH));
    176     v.add(new FieldContainer(8, 17, Field.MONTH));
    177     v.add(new FieldContainer(18, 22, Field.YEAR));
    178     v.add(new FieldContainer(23, 29, Field.DAY_OF_WEEK));
    179     return v;
    180   }
    181 
    182   private Vector<FieldContainer> getDateVector3() {
    183     // "5:19 EDT"
    184     Vector<FieldContainer> v = new Vector<FieldContainer>();
    185     v.add(new FieldContainer(0, 1, Field.HOUR1));
    186     v.add(new FieldContainer(2, 4, Field.MINUTE));
    187     v.add(new FieldContainer(5, 14, Field.TIME_ZONE));
    188     return v;
    189   }
    190 
    191   private Vector<FieldContainer> getDateVector5() {
    192     // "5:19 -0400"
    193     Vector<FieldContainer> v = new Vector<FieldContainer>();
    194     v.add(new FieldContainer(0, 1, Field.HOUR1));
    195     v.add(new FieldContainer(2, 4, Field.MINUTE));
    196     v.add(new FieldContainer(5, 10, Field.TIME_ZONE));
    197     return v;
    198   }
    199 
    200   private Vector<FieldContainer> getDateVector4() {
    201     Vector<FieldContainer> v = new Vector<FieldContainer>();
    202 
    203     // "AD AD 1999 99 1999 9 09 Sep September 13 13 013 17 17 017 17 17 017 5
    204     // 05
    205     // 005 19 019 1 01 001 0 00 000 Mon Monday 256 256 256 2 02 38 038 3 003
    206     // PM
    207     // PM 5 005 EDT Eastern Daylight Time -0400 -0400"
    208     v.add(new FieldContainer(0, 2, Field.ERA));
    209     v.add(new FieldContainer(3, 5, Field.ERA));
    210     v.add(new FieldContainer(6, 10, Field.YEAR));
    211     v.add(new FieldContainer(11, 13, Field.YEAR));
    212     v.add(new FieldContainer(14, 18, Field.YEAR));
    213     v.add(new FieldContainer(19, 20, Field.MONTH));
    214     v.add(new FieldContainer(21, 23, Field.MONTH));
    215     v.add(new FieldContainer(24, 27, Field.MONTH));
    216     v.add(new FieldContainer(28, 37, Field.MONTH));
    217     v.add(new FieldContainer(38, 40, Field.DAY_OF_MONTH));
    218     v.add(new FieldContainer(41, 43, Field.DAY_OF_MONTH));
    219     v.add(new FieldContainer(44, 47, Field.DAY_OF_MONTH));
    220     v.add(new FieldContainer(48, 50, Field.HOUR_OF_DAY1));
    221     v.add(new FieldContainer(51, 53, Field.HOUR_OF_DAY1));
    222     v.add(new FieldContainer(54, 57, Field.HOUR_OF_DAY1));
    223     v.add(new FieldContainer(58, 60, Field.HOUR_OF_DAY0));
    224     v.add(new FieldContainer(61, 63, Field.HOUR_OF_DAY0));
    225     v.add(new FieldContainer(64, 67, Field.HOUR_OF_DAY0));
    226     v.add(new FieldContainer(68, 69, Field.HOUR1));
    227     v.add(new FieldContainer(70, 72, Field.HOUR1));
    228     v.add(new FieldContainer(73, 76, Field.HOUR1));
    229     v.add(new FieldContainer(77, 79, Field.MINUTE));
    230     v.add(new FieldContainer(80, 83, Field.MINUTE));
    231     v.add(new FieldContainer(84, 85, Field.SECOND));
    232     v.add(new FieldContainer(86, 88, Field.SECOND));
    233     v.add(new FieldContainer(89, 92, Field.SECOND));
    234     v.add(new FieldContainer(93, 94, Field.MILLISECOND));
    235     v.add(new FieldContainer(95, 97, Field.MILLISECOND));
    236     v.add(new FieldContainer(98, 101, Field.MILLISECOND));
    237     v.add(new FieldContainer(102, 105, Field.DAY_OF_WEEK));
    238     v.add(new FieldContainer(106, 112, Field.DAY_OF_WEEK));
    239     v.add(new FieldContainer(113, 116, Field.DAY_OF_YEAR));
    240     v.add(new FieldContainer(117, 120, Field.DAY_OF_YEAR));
    241     v.add(new FieldContainer(121, 124, Field.DAY_OF_YEAR));
    242     v.add(new FieldContainer(125, 126, Field.DAY_OF_WEEK_IN_MONTH));
    243     v.add(new FieldContainer(127, 129, Field.DAY_OF_WEEK_IN_MONTH));
    244     v.add(new FieldContainer(130, 132, Field.WEEK_OF_YEAR));
    245     v.add(new FieldContainer(133, 136, Field.WEEK_OF_YEAR));
    246     v.add(new FieldContainer(137, 138, Field.WEEK_OF_MONTH));
    247     v.add(new FieldContainer(139, 142, Field.WEEK_OF_MONTH));
    248     v.add(new FieldContainer(143, 145, Field.AM_PM));
    249     v.add(new FieldContainer(147, 149, Field.AM_PM));
    250     v.add(new FieldContainer(151, 152, Field.HOUR0));
    251     v.add(new FieldContainer(153, 156, Field.HOUR0));
    252     v.add(new FieldContainer(157, 166, Field.TIME_ZONE));
    253     v.add(new FieldContainer(167, 176, Field.TIME_ZONE));
    254     v.add(new FieldContainer(177, 182, Field.TIME_ZONE));
    255     v.add(new FieldContainer(183, 192, Field.TIME_ZONE));
    256     return v;
    257   }
    258 }
    259