Constructors.java revision 2700:48070a2633a1
1/* 2 * Copyright (c) 2004, 2006, 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/* @test 25 * @bug 4981811 4984465 5064492 6240171 26 * @summary Unit test for all constructors introduced by the formatter feature 27 */ 28 29import java.io.*; 30import java.util.*; 31import java.nio.charset.Charset; 32 33public class Constructors { 34 35 private static int fail = 0; 36 private static int pass = 0; 37 38 private static Throwable first; 39 40 static void pass() { 41 pass++; 42 } 43 44 static void fail(String fs) { 45 String s = "'" + fs + "': exception not thrown"; 46 if (first == null) 47 first = new RuntimeException(s); 48 System.err.println("FAILED: " + s); 49 fail++; 50 } 51 52 static void fail(String fs, Throwable ex) { 53 String s = "'" + fs + "': " + ex.getClass().getName() + " thrown"; 54 if (first == null) 55 first = ex; 56 System.err.println("FAILED: " + s); 57 fail++; 58 } 59 60 static void locale(Formatter f) { 61 locale(f, Locale.getDefault(Locale.Category.FORMAT)); 62 } 63 64 static void locale(Formatter f, Locale l) { 65 try { 66 if ((l != null && !l.equals(f.locale())) 67 || (l == null && f.locale() != null)) 68 throw new RuntimeException(f.locale() + " != " + l); 69 pass(); 70 } catch (RuntimeException x) { 71 fail(x.getMessage()); 72 } 73 } 74 75 static void out(Formatter f, Class c) { 76 try { 77 Appendable a = f.out(); 78 if (!c.isInstance(a)) 79 throw new RuntimeException(a.getClass().getName() 80 + " != " + c.getName()); 81 pass(); 82 } catch (RuntimeException x) { 83 fail(x.getMessage()); 84 } 85 } 86 87 public static void main(String [] args) { 88 89 // Formatter() 90 try { 91 Formatter f = new Formatter(); 92 pass(); 93 out(f, StringBuilder.class); 94 locale(f); 95 } catch (Exception x) { 96 fail("new Formatter()", x); 97 } 98 99 // Formatter(Appendable a) 100 try { 101 Formatter f = new Formatter((Appendable) null); 102 pass(); 103 out(f, StringBuilder.class); 104 locale(f); 105 } catch (Exception x) { 106 fail("new Formatter((Appendable)null)", x); 107 } 108 109 // Formatter(Locale l) 110 try { 111 Formatter f = new Formatter((Locale) null); 112 pass(); 113 out(f, StringBuilder.class); 114 locale(f, null); 115 } catch (Exception x) { 116 fail("new Formatter((Locale)null)", x); 117 } 118 119 // Formatter(Appendable a, Locale l) 120 try { 121 Formatter f = new Formatter((Appendable) null, (Locale) null); 122 pass(); 123 out(f, StringBuilder.class); 124 locale(f, null); 125 } catch (Exception x) { 126 fail("new Formatter((Appendable) null, (Locale) null)", x); 127 } 128 129 // Formatter(String fileName) 130 try { 131 Formatter f = new Formatter("foo"); 132 pass(); 133 out(f, BufferedWriter.class); 134 locale(f); 135 } catch (Exception x) { 136 fail("new Formatter(\"foo\")", x); 137 } 138 139 try { 140 Formatter f = new Formatter((String)null); 141 fail("new Formatter((String)null)"); 142 } catch (NullPointerException x) { 143 pass(); 144 } catch (Exception x) { 145 fail("new Formatter((String)null)", x); 146 } 147 148 // Formatter(String fileName, String csn) 149 try { 150 Formatter f = new Formatter("foo", "UTF-8"); 151 pass(); 152 out(f, BufferedWriter.class); 153 locale(f); 154 } catch (Exception x) { 155 fail("new Formatter(\"foo\", \"UTF-8\")", x); 156 } 157 158 try { 159 new Formatter("foo", "bar"); 160 fail("new Formatter(\"foo\", \"bar\")"); 161 } catch (UnsupportedEncodingException x) { 162 pass(); 163 } catch (Exception x) { 164 fail("new Formatter(\"foo\", \"bar\")", x); 165 } 166 167 try { 168 new Formatter(".", "bar"); 169 fail("new Formatter(\".\", \"bar\")"); 170 } catch (FileNotFoundException x) { 171 pass(); 172 } catch (Exception x) { 173 fail("new Formatter(\".\", \"bar\")", x); 174 } 175 176 // Formatter(String fileName, String csn, Locale l) 177 try { 178 Formatter f = new Formatter("foo", "ISO-8859-1", Locale.GERMANY); 179 pass(); 180 out(f, BufferedWriter.class); 181 locale(f, Locale.GERMANY); 182 } catch (Exception x) { 183 fail("new Formatter(\"foo\", \"ISO-8859-1\", Locale.GERMANY)", x); 184 } 185 186 try { 187 Formatter f = new Formatter("foo", "ISO-8859-1", null); 188 pass(); 189 locale(f, null); 190 out(f, BufferedWriter.class); 191 } catch (Exception x) { 192 fail("new Formatter(\"foo\", \"ISO-8859-1\", null)", x); 193 } 194 195 // Formatter(File) 196 try { 197 Formatter f = new Formatter(new File("foo")); 198 pass(); 199 locale(f); 200 out(f, BufferedWriter.class); 201 } catch (Exception x) { 202 fail("new Formatter(new File(\"foo\")", x); 203 } 204 205 try { 206 Formatter f = new Formatter((File)null); 207 fail("new Formatter((File)null)"); 208 } catch (NullPointerException x) { 209 pass(); 210 } catch (Exception x) { 211 fail("new Formatter((File)null)", x); 212 } 213 214 // Formatter(PrintStream ps) 215 try { 216 // ambiguity detected at compile-time 217 Formatter f = new Formatter(System.out); 218 pass(); 219 out(f, PrintStream.class); 220 locale(f); 221 } catch (Exception x) { 222 fail("new Formatter(System.out)", x); 223 } 224 225 try { 226 new Formatter((PrintStream) null); 227 fail("new Formatter((PrintStream) null)"); 228 } catch (NullPointerException x) { 229 pass(); 230 } catch (Exception x) { 231 fail("new Formatter((PrintStream) null)", x); 232 } 233 234 try { 235 Formatter f = new Formatter(new PrintStream("foo")); 236 pass(); 237 locale(f); 238 out(f, PrintStream.class); 239 } catch (FileNotFoundException x) { 240 fail("new Formatter(new PrintStream(\"foo\")", x); 241 } catch (Exception x) { 242 fail("new Formatter(new PrintStream(\"foo\")", x); 243 } 244 245 try { 246 Formatter f = new Formatter(new PrintStream("foo"), 247 Locale.JAPANESE); 248 pass(); 249 locale(f, Locale.JAPANESE); 250 out(f, PrintStream.class); 251 } catch (FileNotFoundException x) { 252 fail("new Formatter(new PrintStream(\"foo\")", x); 253 } catch (Exception x) { 254 fail("new Formatter(new PrintStream(\"foo\")", x); 255 } 256 257 try { 258 // The cast here is necessary to avoid an ambiguity error 259 // between Formatter(Appendable a, Locale l) 260 // and Formatter(OutputStream os, String csn) 261 Formatter f = new Formatter(new PrintStream("foo"), 262 (String)null); 263 fail("new Formatter(new PrintStream(\"foo\"), (String)null)"); 264 } catch (FileNotFoundException x) { 265 fail("new Formatter(new PrintStream(\"foo\"), (String)null)", x); 266 } catch (NullPointerException x) { 267 pass(); 268 } catch (UnsupportedEncodingException x) { 269 fail("new Formatter(new PrintStream(\"foo\"), (String)null)", x); 270 } catch (Exception x) { 271 fail("new Formatter(new PrintStream(\"foo\"), (String)null)", x); 272 } 273 274 try { 275 // The cast here is necessary to avoid an ambiguity error 276 // between Formatter(Appendable a, Locale l) 277 // and Formatter(OutputStream os, String csn) 278 Formatter f = new Formatter(new PrintStream("foo"), 279 (Locale)null); 280 pass(); 281 locale(f, null); 282 out(f, PrintStream.class); 283 } catch (FileNotFoundException x) { 284 fail("new Formatter(new PrintStream(\"foo\"), (Locale)null)", x); 285 } catch (Exception x) { 286 fail("new Formatter(new PrintStream(\"foo\"), (Locale)null)", x); 287 } 288 289 try { 290 Formatter f = new Formatter(new PrintStream("foo"), 291 Locale.KOREAN); 292 pass(); 293 locale(f, Locale.KOREAN); 294 out(f, PrintStream.class); 295 } catch (FileNotFoundException x) { 296 fail("new Formatter(new PrintStream(\"foo\"), Locale.KOREAN)", x); 297 } catch (Exception x) { 298 fail("new Formatter(new PrintStream(\"foo\"), Locale.KOREAN)", x); 299 } 300 301 try { 302 Formatter f = new Formatter(new PrintStream("foo"), 303 "UTF-16BE", null); 304 pass(); 305 locale(f, null); 306 out(f, BufferedWriter.class); 307 } catch (FileNotFoundException x) { 308 fail("new Formatter(new PrintStream(\"foo\"), \"UTF-16BE\", null"); 309 } catch (UnsupportedEncodingException x) { 310 fail("new Formatter(new PrintStream(\"foo\"), \"UTF-16BE\", null"); 311 } catch (Exception x) { 312 fail("new Formatter(new PrintStream(\"foo\"), \"UTF-16BE\", null"); 313 } 314 315 try { 316 Formatter f = new Formatter(new PrintStream("foo"), 317 "UTF-16BE", Locale.ITALIAN); 318 pass(); 319 locale(f, Locale.ITALIAN); 320 out(f, BufferedWriter.class); 321 } catch (FileNotFoundException x) { 322 fail("new Formatter(new PrintStream(\"foo\"), \"UTF-16BE\", Locale.ITALIAN"); 323 } catch (UnsupportedEncodingException x) { 324 fail("new Formatter(new PrintStream(\"foo\"), \"UTF-16BE\", Locale.ITALIAN"); 325 } catch (Exception x) { 326 fail("new Formatter(new PrintStream(\"foo\"), \"UTF-16BE\", Locale.ITALIAN"); 327 } 328 329 String csn = Charset.defaultCharset().newEncoder().canEncode('\u00a3') ? 330 "ASCII" : "ISO-8859-1"; 331 try { 332 ByteArrayOutputStream bs[] = { new ByteArrayOutputStream(), 333 new ByteArrayOutputStream(), 334 new ByteArrayOutputStream() 335 }; 336 new Formatter((Appendable) new PrintStream(bs[0], true, csn)).format("\u00a3"); 337 new Formatter((OutputStream)new PrintStream(bs[1], true, csn)).format("\u00a3"); 338 new Formatter( new PrintStream(bs[2], true, csn)).format("\u00a3"); 339 if (Arrays.equals(bs[0].toByteArray(), bs[1].toByteArray())) { 340 fail("arrays shouldn't match: " + bs[0].toByteArray()); 341 } else { 342 pass(); 343 } 344 if (! Arrays.equals(bs[0].toByteArray(), bs[2].toByteArray())) { 345 fail("arrays should match: " + bs[0].toByteArray() + " != " 346 + bs[2].toByteArray()); 347 } else { 348 pass(); 349 } 350 } catch (UnsupportedEncodingException x) { 351 fail("new PrintStream(newByteArrayOutputStream, true, " + csn + ")", x); 352 } 353 354 // Formatter(OutputStream os) 355 try { 356 new Formatter((OutputStream) null); 357 fail("new Formatter((OutputStream) null)"); 358 } catch (NullPointerException x) { 359 pass(); 360 } catch (Exception x) { 361 fail("new Formatter((OutputStream) null)", x); 362 } 363 364 try { 365 Formatter f = new Formatter((OutputStream) new PrintStream("foo")); 366 pass(); 367 locale(f); 368 out(f, BufferedWriter.class); 369 } catch (Exception x) { 370 fail("new Formatter((OutputStream) new PrintStream(\"foo\")", x); 371 } 372 373 // Formatter(OutputStream os, String csn) 374 try { 375 new Formatter((OutputStream) null, "ISO-8859-1"); 376 fail("new Formatter((OutputStream) null, \"ISO-8859-1\")"); 377 } catch (NullPointerException x) { 378 pass(); 379 } catch (Exception x) { 380 fail("new Formatter((OutputStream) null, \"ISO-8859-1\")", x); 381 } 382 383 try { 384 new Formatter((OutputStream) new PrintStream("foo"), null); 385 fail("new Formatter((OutputStream) new PrintStream(\"foo\"), null"); 386 } catch (NullPointerException x) { 387 pass(); 388 } catch (Exception x) { 389 fail("new Formatter((OutputStream) new PrintStream(\"foo\"), null", 390 x); 391 } 392 393 try { 394 new Formatter(new PrintStream("foo"), "bar"); 395 fail("new Formatter(new PrintStream(\"foo\"), \"bar\")"); 396 } catch (UnsupportedEncodingException x) { 397 pass(); 398 } catch (Exception x) { 399 fail("new Formatter(new PrintStream(\"foo\"), \"bar\")", x); 400 } 401 402 try { 403 Formatter f = new Formatter(new PrintStream("foo"), "UTF-8"); 404 pass(); 405 locale(f); 406 out(f, BufferedWriter.class); 407 } catch (Exception x) { 408 fail("new Formatter(new PrintStream(\"foo\"), \"UTF-8\")", x); 409 } 410 411 // Formatter(OutputStream os, String csn, Locale l) 412 try { 413 new Formatter((OutputStream) null, "ISO-8859-1", Locale.UK); 414 fail("new Formatter((OutputStream) null, \"ISO-8859-1\", Locale.UK)"); 415 } catch (NullPointerException x) { 416 pass(); 417 } catch (Exception x) { 418 fail("new Formatter((OutputStream) null, \"ISO-8859-1\", Locale.UK)", 419 x); 420 } 421 422 try { 423 new Formatter(new PrintStream("foo"), null, Locale.UK); 424 fail("new Formatter(new PrintStream(\"foo\"), null, Locale.UK)"); 425 } catch (NullPointerException x) { 426 pass(); 427 } catch (Exception x) { 428 fail("new Formatter(new PrintStream(\"foo\"), null, Locale.UK)", 429 x); 430 } 431 432 try { 433 new Formatter(new PrintStream("foo"), "bar", Locale.UK); 434 fail("new Formatter(new PrintStream(\"foo\"), \"bar\", Locale.UK)"); 435 } catch (UnsupportedEncodingException x) { 436 pass(); 437 } catch (Exception x) { 438 fail("new Formatter(new PrintStream(\"foo\"), \"bar\", Locale.UK)", 439 x); 440 } 441 442 try { 443 Formatter f 444 = new Formatter(new PrintStream("foo"), "UTF-8", Locale.UK); 445 pass(); 446 out(f, BufferedWriter.class); 447 locale(f, Locale.UK); 448 } catch (Exception x) { 449 fail("new Formatter(new PrintStream(\"foo\"), \"UTF-8\"), Locale.UK", 450 x); 451 } 452 453 // PrintStream(String fileName) 454 try { 455 new PrintStream("foo"); 456 pass(); 457 } catch (Exception x) { 458 fail("new PrintStream(\"foo\")", x); 459 } 460 461 // PrintStream(String fileName, String csn) 462 try { 463 new PrintStream("foo", null); 464 fail("new PrintStream(\"foo\", null)"); 465 } catch (NullPointerException x) { 466 pass(); 467 } catch (Exception x) { 468 fail("new PrintStream(\"foo\", null)", x); 469 } 470 471 // PrintStream(File file) 472 try { 473 new PrintStream(new File("foo")); 474 pass(); 475 } catch (Exception x) { 476 fail("new PrintStream(new File(\"foo\"))", x); 477 } 478 479 // PrintStream(File file, String csn) 480 try { 481 new PrintStream(new File("foo"), null); 482 fail("new PrintStream(new File(\"foo\"), null)"); 483 } catch (NullPointerException x) { 484 pass(); 485 } catch (Exception x) { 486 fail("new PrintStream(new File(\"foo\"), null)", x); 487 } 488 489 // PrintWriter(String fileName) 490 try { 491 new PrintWriter("foo"); 492 pass(); 493 } catch (Exception x) { 494 fail("new PrintWriter(\"foo\")", x); 495 } 496 497 // PrintWriter(String fileName, String csn) 498 try { 499 new PrintWriter("foo", null); 500 fail("new PrintWriter(\"foo\"), null"); 501 } catch (NullPointerException x) { 502 pass(); 503 } catch (Exception x) { 504 fail("new PrintWriter(\"foo\"), null", x); 505 } 506 507 // PrintWriter(File file) 508 try { 509 new PrintWriter(new File("foo")); 510 pass(); 511 } catch (Exception x) { 512 fail("new PrintWriter(new File(\"foo\"))", x); 513 } 514 515 // PrintWriter(File file, String csn) 516 try { 517 new PrintWriter(new File("foo"), null); 518 fail("new PrintWriter(new File(\"foo\")), null"); 519 } catch (NullPointerException x) { 520 pass(); 521 } catch (Exception x) { 522 fail("new PrintWriter(new File(\"foo\")), null", x); 523 } 524 525 if (fail != 0) 526 throw new RuntimeException((fail + pass) + " tests: " 527 + fail + " failure(s), first", first); 528 else 529 System.out.println("all " + (fail + pass) + " tests passed"); 530 } 531} 532