1 /* 2 * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /* Type-specific source code for unit test 25 * 26 * Regenerate the BasicX classes via genBasic.sh whenever this file changes. 27 * We check in the generated source files so that the test tree can be used 28 * independently of the rest of the source tree. 29 */ 30 31 // -- This file was mechanically generated: Do not edit! -- // 32 33 import java.io.*; 34 import java.math.BigDecimal; 35 import java.math.BigInteger; 36 import java.text.DateFormatSymbols; 37 import java.util.*; 38 39 import static java.util.Calendar.*; 40 41 public class BasicBigInteger extends Basic { 42 43 private static void test(String fs, String exp, Object ... args) { 44 Formatter f = new Formatter(new StringBuilder(), Locale.US); 45 f.format(fs, args); 46 ck(fs, exp, f.toString()); 47 48 f = new Formatter(new StringBuilder(), Locale.US); 49 f.format("foo " + fs + " bar", args); 50 ck(fs, "foo " + exp + " bar", f.toString()); 51 } 52 53 private static void test(Locale l, String fs, String exp, Object ... args) 54 { 55 Formatter f = new Formatter(new StringBuilder(), l); 56 f.format(fs, args); 57 ck(fs, exp, f.toString()); 58 59 f = new Formatter(new StringBuilder(), l); 60 f.format("foo " + fs + " bar", args); 61 ck(fs, "foo " + exp + " bar", f.toString()); 62 } 63 64 private static void test(String fs, Object ... args) { 65 Formatter f = new Formatter(new StringBuilder(), Locale.US); 66 f.format(fs, args); 67 ck(fs, "fail", f.toString()); 68 } 69 70 private static void test(String fs) { 71 Formatter f = new Formatter(new StringBuilder(), Locale.US); 72 f.format(fs, "fail"); 73 ck(fs, "fail", f.toString()); 74 } 75 76 private static void testSysOut(String fs, String exp, Object ... args) { 77 FileOutputStream fos = null; 78 FileInputStream fis = null; 79 try { 80 PrintStream saveOut = System.out; 81 fos = new FileOutputStream("testSysOut"); 82 System.setOut(new PrintStream(fos)); 83 System.out.format(Locale.US, fs, args); 84 fos.close(); 85 86 fis = new FileInputStream("testSysOut"); 87 byte [] ba = new byte[exp.length()]; 88 int len = fis.read(ba); 89 String got = new String(ba); 90 if (len != ba.length) 91 fail(fs, exp, got); 92 ck(fs, exp, got); 93 94 System.setOut(saveOut); 95 } catch (FileNotFoundException ex) { 96 fail(fs, ex.getClass()); 97 } catch (IOException ex) { 98 fail(fs, ex.getClass()); 99 } finally { 100 try { 101 if (fos != null) 102 fos.close(); 103 if (fis != null) 104 fis.close(); 105 } catch (IOException ex) { 106 fail(fs, ex.getClass()); 107 } 108 } 109 } 110 111 private static void tryCatch(String fs, Class<?> ex) { 112 boolean caught = false; 113 try { 114 test(fs); 115 } catch (Throwable x) { 116 if (ex.isAssignableFrom(x.getClass())) 117 caught = true; 118 } 119 if (!caught) 120 fail(fs, ex); 121 else 122 pass(); 123 } 124 125 private static void tryCatch(String fs, Class<?> ex, Object ... args) { 126 boolean caught = false; 127 try { 128 test(fs, args); 129 } catch (Throwable x) { 130 if (ex.isAssignableFrom(x.getClass())) 131 caught = true; 132 } 133 if (!caught) 134 fail(fs, ex); 135 else 136 pass(); 137 } 138 139 public static void test() { 140 TimeZone.setDefault(TimeZone.getTimeZone("GMT-0800")); 141 142 // Any characters not explicitly defined as conversions, date/time 143 // conversion suffixes, or flags are illegal and are reserved for 144 // future extensions. Use of such a character in a format string will 145 // cause an UnknownFormatConversionException or 146 // UnknownFormatFlagsException to be thrown. 147 tryCatch("%q", UnknownFormatConversionException.class); 148 tryCatch("%t&", UnknownFormatConversionException.class); 149 tryCatch("%&d", UnknownFormatConversionException.class); 150 tryCatch("%^b", UnknownFormatConversionException.class); 151 152 //--------------------------------------------------------------------- 153 // Formatter.java class javadoc examples 154 //--------------------------------------------------------------------- 155 test(Locale.FRANCE, "e = %+10.4f", "e = +2,7183", Math.E); 156 test("%4$2s %3$2s %2$2s %1$2s", " d c b a", "a", "b", "c", "d"); 157 test("Amount gained or lost since last statement: $ %,(.2f", 158 "Amount gained or lost since last statement: $ (6,217.58)", 159 (new BigDecimal("-6217.58"))); 160 Calendar c = new GregorianCalendar(1969, JULY, 20, 16, 17, 0); 161 testSysOut("Local time: %tT", "Local time: 16:17:00", c); 162 163 test("Unable to open file '%1$s': %2$s", 164 "Unable to open file 'food': No such file or directory", 165 "food", "No such file or directory"); 166 Calendar duke = new GregorianCalendar(1995, MAY, 23, 19, 48, 34); 167 duke.set(Calendar.MILLISECOND, 584); 168 test("Duke's Birthday: %1$tB %1$te, %1$tY", 169 "Duke's Birthday: May 23, 1995", 170 duke); 171 test("Duke's Birthday: %1$tB %1$te, %1$tY", 172 "Duke's Birthday: May 23, 1995", 173 duke.getTime()); 174 test("Duke's Birthday: %1$tB %1$te, %1$tY", 175 "Duke's Birthday: May 23, 1995", 176 duke.getTimeInMillis()); 177 178 test("%4$s %3$s %2$s %1$s %4$s %3$s %2$s %1$s", 179 "d c b a d c b a", "a", "b", "c", "d"); 180 test("%s %s %<s %<s", "a b b b", "a", "b", "c", "d"); 181 test("%s %s %s %s", "a b c d", "a", "b", "c", "d"); 182 test("%2$s %s %<s %s", "b a a b", "a", "b", "c", "d"); 183 184 //--------------------------------------------------------------------- 185 // %b 186 // 187 // General conversion applicable to any argument. 188 //--------------------------------------------------------------------- 189 test("%b", "true", true); 190 test("%b", "false", false); 191 test("%B", "TRUE", true); 192 test("%B", "FALSE", false); 193 test("%b", "true", Boolean.TRUE); 194 test("%b", "false", Boolean.FALSE); 195 test("%B", "TRUE", Boolean.TRUE); 196 test("%B", "FALSE", Boolean.FALSE); 197 test("%14b", " true", true); 198 test("%-14b", "true ", true); 199 test("%5.1b", " f", false); 200 test("%-5.1b", "f ", false); 201 202 test("%b", "true", "foo"); 203 test("%b", "false", (Object)null); 204 205 // Boolean.java hardcodes the Strings for "true" and "false", so no 206 // localization is possible. 207 test(Locale.FRANCE, "%b", "true", true); 208 test(Locale.FRANCE, "%b", "false", false); 209 210 // If you pass in a single array to a varargs method, the compiler 211 // uses it as the array of arguments rather than treating it as a 212 // single array-type argument. 213 test("%b", "false", (Object[])new String[2]); 214 test("%b", "true", new String[2], new String[2]); 215 216 int [] ia = { 1, 2, 3 }; 217 test("%b", "true", ia); 218 219 //--------------------------------------------------------------------- 220 // %b - errors 221 //--------------------------------------------------------------------- 222 tryCatch("%#b", FormatFlagsConversionMismatchException.class); 223 tryCatch("%-b", MissingFormatWidthException.class); 224 // correct or side-effect of implementation? 225 tryCatch("%.b", UnknownFormatConversionException.class); 226 tryCatch("%,b", FormatFlagsConversionMismatchException.class); 227 228 //--------------------------------------------------------------------- 229 // %c 230 // 231 // General conversion applicable to any argument. 232 //--------------------------------------------------------------------- 233 test("%c", "i", 'i'); 234 test("%C", "I", 'i'); 235 test("%4c", " i", 'i'); 236 test("%-4c", "i ", 'i'); 237 test("%4C", " I", 'i'); 238 test("%-4C", "I ", 'i'); 239 test("%c", "i", new Character('i')); 240 test("%c", "H", (byte) 72); 241 test("%c", "i", (short) 105); 242 test("%c", "!", (int) 33); 243 test("%c", "\u007F", Byte.MAX_VALUE); 244 test("%c", new String(Character.toChars(Short.MAX_VALUE)), 245 Short.MAX_VALUE); 246 test("%c", "null", (Object) null); 247 248 //--------------------------------------------------------------------- 249 // %c - errors 250 //--------------------------------------------------------------------- 251 tryCatch("%c", IllegalFormatConversionException.class, 252 Boolean.TRUE); 253 tryCatch("%c", IllegalFormatConversionException.class, 254 (float) 0.1); 255 tryCatch("%c", IllegalFormatConversionException.class, 256 new Object()); 257 tryCatch("%c", IllegalFormatCodePointException.class, 258 Byte.MIN_VALUE); 259 tryCatch("%c", IllegalFormatCodePointException.class, 260 Short.MIN_VALUE); 261 tryCatch("%c", IllegalFormatCodePointException.class, 262 Integer.MIN_VALUE); 263 tryCatch("%c", IllegalFormatCodePointException.class, 264 Integer.MAX_VALUE); 265 266 tryCatch("%#c", FormatFlagsConversionMismatchException.class); 267 tryCatch("%,c", FormatFlagsConversionMismatchException.class); 268 tryCatch("%(c", FormatFlagsConversionMismatchException.class); 269 tryCatch("%$c", UnknownFormatConversionException.class); 270 tryCatch("%.2c", IllegalFormatPrecisionException.class); 271 272 //--------------------------------------------------------------------- 273 // %s 274 // 275 // General conversion applicable to any argument. 276 //--------------------------------------------------------------------- 277 test("%s", "Hello, Duke", "Hello, Duke"); 278 test("%S", "HELLO, DUKE", "Hello, Duke"); 279 test("%20S", " HELLO, DUKE", "Hello, Duke"); 280 test("%20s", " Hello, Duke", "Hello, Duke"); 281 test("%-20s", "Hello, Duke ", "Hello, Duke"); 282 test("%-20.5s", "Hello ", "Hello, Duke"); 283 test("%s", "null", (Object)null); 284 285 StringBuffer sb = new StringBuffer("foo bar"); 286 test("%s", sb.toString(), sb); 287 test("%S", sb.toString().toUpperCase(), sb); 288 289 //--------------------------------------------------------------------- 290 // %s - errors 291 //--------------------------------------------------------------------- 292 tryCatch("%-s", MissingFormatWidthException.class); 293 tryCatch("%--s", DuplicateFormatFlagsException.class); 294 tryCatch("%#s", FormatFlagsConversionMismatchException.class, 0); 295 tryCatch("%#s", FormatFlagsConversionMismatchException.class, 0.5f); 296 tryCatch("%#s", FormatFlagsConversionMismatchException.class, "hello"); 297 tryCatch("%#s", FormatFlagsConversionMismatchException.class, null); 298 299 //--------------------------------------------------------------------- 300 // %h 301 // 302 // General conversion applicable to any argument. 303 //--------------------------------------------------------------------- 304 test("%h", Integer.toHexString("Hello, Duke".hashCode()), 305 "Hello, Duke"); 306 test("%10h", " ddf63471", "Hello, Duke"); 307 test("%-10h", "ddf63471 ", "Hello, Duke"); 308 test("%-10H", "DDF63471 ", "Hello, Duke"); 309 test("%10h", " 402e0000", 15.0); 310 test("%10H", " 402E0000", 15.0); 311 312 //--------------------------------------------------------------------- 313 // %h - errors 314 //--------------------------------------------------------------------- 315 tryCatch("%#h", FormatFlagsConversionMismatchException.class); 316 317 //--------------------------------------------------------------------- 318 // flag/conversion errors 319 //--------------------------------------------------------------------- 320 tryCatch("%F", UnknownFormatConversionException.class); 321 322 tryCatch("%#g", FormatFlagsConversionMismatchException.class); 323 324 //--------------------------------------------------------------------- 325 // BigInteger - errors 326 //--------------------------------------------------------------------- 327 tryCatch("%f", IllegalFormatConversionException.class, 328 new BigInteger("1")); 329 330 //--------------------------------------------------------------------- 331 // %d - BigInteger 332 //--------------------------------------------------------------------- 333 test("%d", "null", (Object)null); 334 test("%d", "1234567", new BigInteger("1234567", 10)); 335 test("%,d", "1,234,567", new BigInteger("1234567", 10)); 336 test(Locale.FRANCE, "%,d", "1\u00a0234\u00a0567", new BigInteger("1234567", 10)); 337 test("%,d", "-1,234,567", new BigInteger("-1234567", 10)); 338 test("%(d", "1234567", new BigInteger("1234567", 10)); 339 test("%(d", "(1234567)", new BigInteger("-1234567", 10)); 340 test("% d", " 1234567", new BigInteger("1234567", 10)); 341 test("% d", "-1234567", new BigInteger("-1234567", 10)); 342 test("%+d", "+1234567", new BigInteger("1234567", 10)); 343 test("%+d", "-1234567", new BigInteger("-1234567", 10)); 344 test("%010d", "0001234567", new BigInteger("1234567", 10)); 345 test("%010d", "-001234567", new BigInteger("-1234567", 10)); 346 test("%(10d", " (1234567)", new BigInteger("-1234567", 10)); 347 test("%+d", "+1234567", new BigInteger("1234567", 10)); 348 test("%+d", "-1234567", new BigInteger("-1234567", 10)); 349 test("%-10d", "1234567 ", new BigInteger("1234567", 10)); 350 test("%-10d", "-1234567 ", new BigInteger("-1234567", 10)); 351 // , variations: 352 test("%0,10d", "01,234,567", new BigInteger("1234567", 10)); 353 test("%0,10d", "-1,234,567", new BigInteger("-1234567", 10)); 354 test("%(,10d", "(1,234,567)", new BigInteger("-1234567", 10)); 355 test("%+,d", "+1,234,567", new BigInteger("1234567", 10)); 356 test("%+,d", "-1,234,567", new BigInteger("-1234567", 10)); 357 test("%-,10d", "1,234,567 ", new BigInteger("1234567", 10)); 358 test("%-,10d", "-1,234,567", new BigInteger("-1234567", 10)); 359 360 //--------------------------------------------------------------------- 361 // %o - BigInteger 362 //--------------------------------------------------------------------- 363 test("%o", "null", (Object)null); 364 test("%o", "1234567", new BigInteger("1234567", 8)); 365 test("%(o", "1234567", new BigInteger("1234567", 8)); 366 test("%(o", "(1234567)", new BigInteger("-1234567", 8)); 367 test("% o", " 1234567", new BigInteger("1234567", 8)); 368 test("% o", "-1234567", new BigInteger("-1234567", 8)); 369 test("%+o", "+1234567", new BigInteger("1234567", 8)); 370 test("%+o", "-1234567", new BigInteger("-1234567", 8)); 371 test("%010o", "0001234567", new BigInteger("1234567", 8)); 372 test("%010o", "-001234567", new BigInteger("-1234567", 8)); 373 test("%(10o", " (1234567)", new BigInteger("-1234567", 8)); 374 test("%+o", "+1234567", new BigInteger("1234567", 8)); 375 test("%+o", "-1234567", new BigInteger("-1234567", 8)); 376 test("%-10o", "1234567 ", new BigInteger("1234567", 8)); 377 test("%-10o", "-1234567 ", new BigInteger("-1234567", 8)); 378 test("%#10o", " 01234567", new BigInteger("1234567", 8)); 379 test("%#10o", " -01234567", new BigInteger("-1234567", 8)); 380 381 //--------------------------------------------------------------------- 382 // %x - BigInteger 383 //--------------------------------------------------------------------- 384 test("%x", "null", (Object)null); 385 test("%x", "1234567", new BigInteger("1234567", 16)); 386 test("%(x", "1234567", new BigInteger("1234567", 16)); 387 test("%(x", "(1234567)", new BigInteger("-1234567", 16)); 388 test("% x", " 1234567", new BigInteger("1234567", 16)); 389 test("% x", "-1234567", new BigInteger("-1234567", 16)); 390 test("%+x", "+1234567", new BigInteger("1234567", 16)); 391 test("%+x", "-1234567", new BigInteger("-1234567", 16)); 392 test("%010x", "0001234567", new BigInteger("1234567", 16)); 393 test("%010x", "-001234567", new BigInteger("-1234567", 16)); 394 test("%(10x", " (1234567)", new BigInteger("-1234567", 16)); 395 test("%+x", "+1234567", new BigInteger("1234567", 16)); 396 test("%+x", "-1234567", new BigInteger("-1234567", 16)); 397 test("%-10x", "1234567 ", new BigInteger("1234567", 16)); 398 test("%-10x", "-1234567 ", new BigInteger("-1234567", 16)); 399 test("%#10x", " 0x1234567", new BigInteger("1234567", 16)); 400 test("%#10x", "-0x1234567", new BigInteger("-1234567", 16)); 401 test("%#10X", " 0X1234567", new BigInteger("1234567", 16)); 402 test("%#10X", "-0X1234567", new BigInteger("-1234567", 16)); 403 test("%X", "1234567A", new BigInteger("1234567a", 16)); 404 test("%X", "-1234567A", new BigInteger("-1234567a", 16)); 405 406 //--------------------------------------------------------------------- 407 // %t 408 // 409 // Date/Time conversions applicable to Calendar, Date, and long. 410 //--------------------------------------------------------------------- 411 test("%tA", "null", (Object)null); 412 test("%TA", "NULL", (Object)null); 413 414 //--------------------------------------------------------------------- 415 // %t - errors 416 //--------------------------------------------------------------------- 417 tryCatch("%t", UnknownFormatConversionException.class); 418 tryCatch("%T", UnknownFormatConversionException.class); 419 tryCatch("%tP", UnknownFormatConversionException.class); 420 tryCatch("%TP", UnknownFormatConversionException.class); 421 tryCatch("%.5tB", IllegalFormatPrecisionException.class); 422 tryCatch("%#tB", FormatFlagsConversionMismatchException.class); 423 tryCatch("%-tB", MissingFormatWidthException.class); 424 425 //--------------------------------------------------------------------- 426 // %n 427 //--------------------------------------------------------------------- 428 test("%n", System.getProperty("line.separator"), (Object)null); 429 test("%n", System.getProperty("line.separator"), ""); 430 431 tryCatch("%,n", IllegalFormatFlagsException.class); 432 tryCatch("%.n", UnknownFormatConversionException.class); 433 tryCatch("%5.n", UnknownFormatConversionException.class); 434 tryCatch("%5n", IllegalFormatWidthException.class); 435 tryCatch("%.7n", IllegalFormatPrecisionException.class); 436 tryCatch("%<n", IllegalFormatFlagsException.class); 437 438 //--------------------------------------------------------------------- 439 // %% 440 //--------------------------------------------------------------------- 441 test("%%", "%", (Object)null); 442 test("%%", "%", ""); 443 tryCatch("%%%", UnknownFormatConversionException.class); 444 // perhaps an IllegalFormatArgumentIndexException should be defined? 445 tryCatch("%<%", IllegalFormatFlagsException.class); 446 } 447 }