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