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