--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Formatter/Constructors.java Tue Sep 12 19:03:39 2017 +0200
@@ -0,0 +1,506 @@
+/*
+ * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 4981811 4984465 5064492 6240171 7000511
+ * @summary Unit test for all constructors introduced by the formatter feature
+ */
+
+import java.io.*;
+import java.util.*;
+import java.nio.charset.Charset;
+
+public class Constructors {
+
+ private static int fail = 0;
+ private static int pass = 0;
+
+ private static Throwable first;
+
+ static void pass() {
+ pass++;
+ }
+
+ static void fail(String fs) {
+ String s = "'" + fs + "': exception not thrown";
+ if (first == null)
+ first = new RuntimeException(s);
+ System.err.println("FAILED: " + s);
+ fail++;
+ }
+
+ static void fail(String fs, Throwable ex) {
+ String s = "'" + fs + "': " + ex.getClass().getName() + " thrown";
+ if (first == null)
+ first = ex;
+ System.err.println("FAILED: " + s);
+ fail++;
+ }
+
+ static void locale(Formatter f) {
+ locale(f, Locale.getDefault(Locale.Category.FORMAT));
+ }
+
+ static void locale(Formatter f, Locale l) {
+ try {
+ if ((l != null && !l.equals(f.locale()))
+ || (l == null && f.locale() != null))
+ throw new RuntimeException(f.locale() + " != " + l);
+ pass();
+ } catch (RuntimeException x) {
+ fail(x.getMessage());
+ }
+ }
+
+ static void out(Formatter f, Class c) {
+ try {
+ Appendable a = f.out();
+ if (!c.isInstance(a))
+ throw new RuntimeException(a.getClass().getName()
+ + " != " + c.getName());
+ pass();
+ } catch (RuntimeException x) {
+ fail(x.getMessage());
+ }
+ }
+
+ public static void main(String [] args) {
+ // Formatter()
+ try (Formatter f = new Formatter()) {
+ pass();
+ out(f, StringBuilder.class);
+ locale(f);
+ } catch (Exception x) {
+ fail("new Formatter()", x);
+ }
+
+ // Formatter(Appendable a)
+ try (Formatter f = new Formatter((Appendable) null)) {
+ pass();
+ out(f, StringBuilder.class);
+ locale(f);
+ } catch (Exception x) {
+ fail("new Formatter((Appendable)null)", x);
+ }
+
+ // Formatter(Locale l)
+ try (Formatter f = new Formatter((Locale) null)) {
+ pass();
+ out(f, StringBuilder.class);
+ locale(f, null);
+ } catch (Exception x) {
+ fail("new Formatter((Locale)null)", x);
+ }
+
+ // Formatter(Appendable a, Locale l)
+ try (Formatter f = new Formatter((Appendable) null, (Locale) null)) {
+ pass();
+ out(f, StringBuilder.class);
+ locale(f, null);
+ } catch (Exception x) {
+ fail("new Formatter((Appendable) null, (Locale) null)", x);
+ }
+
+ // Formatter(String fileName)
+ try (Formatter f = new Formatter("foo")) {
+ pass();
+ out(f, BufferedWriter.class);
+ locale(f);
+ } catch (Exception x) {
+ fail("new Formatter(\"foo\")", x);
+ }
+
+ try {
+ new Formatter((String)null);
+ fail("new Formatter((String)null)");
+ } catch (NullPointerException x) {
+ pass();
+ } catch (Exception x) {
+ fail("new Formatter((String)null)", x);
+ }
+
+ // Formatter(String fileName, String csn)
+ try (Formatter f = new Formatter("foo", "UTF-8")) {
+ pass();
+ out(f, BufferedWriter.class);
+ locale(f);
+ } catch (Exception x) {
+ fail("new Formatter(\"foo\", \"UTF-8\")", x);
+ }
+
+ try {
+ new Formatter("foo", "bar");
+ fail("new Formatter(\"foo\", \"bar\")");
+ } catch (UnsupportedEncodingException x) {
+ pass();
+ } catch (Exception x) {
+ fail("new Formatter(\"foo\", \"bar\")", x);
+ }
+
+ try {
+ new Formatter(".", "bar");
+ fail("new Formatter(\".\", \"bar\")");
+ } catch (FileNotFoundException|UnsupportedEncodingException x) {
+ pass();
+ } catch (Exception x) {
+ fail("new Formatter(\".\", \"bar\")", x);
+ }
+
+ // Formatter(String fileName, String csn, Locale l)
+ try (Formatter f = new Formatter("foo", "ISO-8859-1", Locale.GERMANY)) {
+ pass();
+ out(f, BufferedWriter.class);
+ locale(f, Locale.GERMANY);
+ } catch (Exception x) {
+ fail("new Formatter(\"foo\", \"ISO-8859-1\", Locale.GERMANY)", x);
+ }
+
+ try (Formatter f = new Formatter("foo", "ISO-8859-1", null)) {
+ pass();
+ locale(f, null);
+ out(f, BufferedWriter.class);
+ } catch (Exception x) {
+ fail("new Formatter(\"foo\", \"ISO-8859-1\", null)", x);
+ }
+
+ // Formatter(File)
+ try (Formatter f = new Formatter(new File("foo"))) {
+ pass();
+ locale(f);
+ out(f, BufferedWriter.class);
+ } catch (Exception x) {
+ fail("new Formatter(new File(\"foo\")", x);
+ }
+
+ try {
+ new Formatter((File)null);
+ fail("new Formatter((File)null)");
+ } catch (NullPointerException x) {
+ pass();
+ } catch (Exception x) {
+ fail("new Formatter((File)null)", x);
+ }
+
+ // Formatter(PrintStream ps)
+ try {
+ // ambiguity detected at compile-time
+ Formatter f = new Formatter(System.out);
+ pass();
+ out(f, PrintStream.class);
+ locale(f);
+ } catch (Exception x) {
+ fail("new Formatter(System.out)", x);
+ }
+
+ try {
+ new Formatter((PrintStream) null);
+ fail("new Formatter((PrintStream) null)");
+ } catch (NullPointerException x) {
+ pass();
+ } catch (Exception x) {
+ fail("new Formatter((PrintStream) null)", x);
+ }
+
+ try (Formatter f = new Formatter(new PrintStream("foo"))) {
+ pass();
+ locale(f);
+ out(f, PrintStream.class);
+ } catch (FileNotFoundException x) {
+ fail("new Formatter(new PrintStream(\"foo\")", x);
+ } catch (Exception x) {
+ fail("new Formatter(new PrintStream(\"foo\")", x);
+ }
+
+ try (Formatter f = new Formatter(new PrintStream("foo"),
+ Locale.JAPANESE)) {
+ pass();
+ locale(f, Locale.JAPANESE);
+ out(f, PrintStream.class);
+ } catch (FileNotFoundException x) {
+ fail("new Formatter(new PrintStream(\"foo\")", x);
+ } catch (Exception x) {
+ fail("new Formatter(new PrintStream(\"foo\")", x);
+ }
+
+ try (PrintStream ps = new PrintStream("foo")) {
+ // The cast here is necessary to avoid an ambiguity error
+ // between Formatter(Appendable a, Locale l)
+ // and Formatter(OutputStream os, String csn)
+ new Formatter(ps, (String)null);
+ fail("new Formatter(new PrintStream(\"foo\"), (String)null)");
+ } catch (FileNotFoundException x) {
+ fail("new Formatter(new PrintStream(\"foo\"), (String)null)", x);
+ } catch (NullPointerException x) {
+ pass();
+ } catch (UnsupportedEncodingException x) {
+ fail("new Formatter(new PrintStream(\"foo\"), (String)null)", x);
+ } catch (Exception x) {
+ fail("new Formatter(new PrintStream(\"foo\"), (String)null)", x);
+ }
+
+ // The cast here is necessary to avoid an ambiguity error
+ // between Formatter(Appendable a, Locale l)
+ // and Formatter(OutputStream os, String csn)
+ try (Formatter f = new Formatter(new PrintStream("foo"),
+ (Locale)null)) {
+ pass();
+ locale(f, null);
+ out(f, PrintStream.class);
+ } catch (FileNotFoundException x) {
+ fail("new Formatter(new PrintStream(\"foo\"), (Locale)null)", x);
+ } catch (Exception x) {
+ fail("new Formatter(new PrintStream(\"foo\"), (Locale)null)", x);
+ }
+
+ try (Formatter f = new Formatter(new PrintStream("foo"),
+ Locale.KOREAN)) {
+ pass();
+ locale(f, Locale.KOREAN);
+ out(f, PrintStream.class);
+ } catch (FileNotFoundException x) {
+ fail("new Formatter(new PrintStream(\"foo\"), Locale.KOREAN)", x);
+ } catch (Exception x) {
+ fail("new Formatter(new PrintStream(\"foo\"), Locale.KOREAN)", x);
+ }
+
+ try (Formatter f = new Formatter(new PrintStream("foo"),
+ "UTF-16BE", null)) {
+ pass();
+ locale(f, null);
+ out(f, BufferedWriter.class);
+ } catch (FileNotFoundException x) {
+ fail("new Formatter(new PrintStream(\"foo\"), \"UTF-16BE\", null");
+ } catch (UnsupportedEncodingException x) {
+ fail("new Formatter(new PrintStream(\"foo\"), \"UTF-16BE\", null");
+ } catch (Exception x) {
+ fail("new Formatter(new PrintStream(\"foo\"), \"UTF-16BE\", null");
+ }
+
+ try (Formatter f = new Formatter(new PrintStream("foo"),
+ "UTF-16BE", Locale.ITALIAN)) {
+ pass();
+ locale(f, Locale.ITALIAN);
+ out(f, BufferedWriter.class);
+ } catch (FileNotFoundException x) {
+ fail("new Formatter(new PrintStream(\"foo\"), \"UTF-16BE\", Locale.ITALIAN");
+ } catch (UnsupportedEncodingException x) {
+ fail("new Formatter(new PrintStream(\"foo\"), \"UTF-16BE\", Locale.ITALIAN");
+ } catch (Exception x) {
+ fail("new Formatter(new PrintStream(\"foo\"), \"UTF-16BE\", Locale.ITALIAN");
+ }
+
+ String csn = Charset.defaultCharset().newEncoder().canEncode('\u00a3') ?
+ "ASCII" : "ISO-8859-1";
+ try {
+ ByteArrayOutputStream bs[] = { new ByteArrayOutputStream(),
+ new ByteArrayOutputStream(),
+ new ByteArrayOutputStream()
+ };
+ new Formatter((Appendable) new PrintStream(bs[0], true, csn)).format("\u00a3");
+ new Formatter((OutputStream)new PrintStream(bs[1], true, csn)).format("\u00a3");
+ new Formatter( new PrintStream(bs[2], true, csn)).format("\u00a3");
+ if (Arrays.equals(bs[0].toByteArray(), bs[1].toByteArray())) {
+ fail("arrays shouldn't match: " + bs[0].toByteArray());
+ } else {
+ pass();
+ }
+ if (! Arrays.equals(bs[0].toByteArray(), bs[2].toByteArray())) {
+ fail("arrays should match: " + bs[0].toByteArray() + " != "
+ + bs[2].toByteArray());
+ } else {
+ pass();
+ }
+ } catch (UnsupportedEncodingException x) {
+ fail("new PrintStream(newByteArrayOutputStream, true, " + csn + ")", x);
+ }
+
+ // Formatter(OutputStream os)
+ try {
+ new Formatter((OutputStream) null);
+ fail("new Formatter((OutputStream) null)");
+ } catch (NullPointerException x) {
+ pass();
+ } catch (Exception x) {
+ fail("new Formatter((OutputStream) null)", x);
+ }
+
+ try (Formatter f = new Formatter((OutputStream) new PrintStream("foo"))) {
+ pass();
+ locale(f);
+ out(f, BufferedWriter.class);
+ } catch (Exception x) {
+ fail("new Formatter((OutputStream) new PrintStream(\"foo\")", x);
+ }
+
+ // Formatter(OutputStream os, String csn)
+ try {
+ new Formatter((OutputStream) null, "ISO-8859-1");
+ fail("new Formatter((OutputStream) null, \"ISO-8859-1\")");
+ } catch (NullPointerException x) {
+ pass();
+ } catch (Exception x) {
+ fail("new Formatter((OutputStream) null, \"ISO-8859-1\")", x);
+ }
+
+ try (PrintStream ps = new PrintStream("foo")) {
+ new Formatter((OutputStream) ps, null);
+ fail("new Formatter((OutputStream) new PrintStream(\"foo\"), null");
+ } catch (NullPointerException x) {
+ pass();
+ } catch (Exception x) {
+ fail("new Formatter((OutputStream) new PrintStream(\"foo\"), null",
+ x);
+ }
+
+ try (PrintStream ps = new PrintStream("foo")) {
+ new Formatter(ps, "bar");
+ fail("new Formatter(new PrintStream(\"foo\"), \"bar\")");
+ } catch (UnsupportedEncodingException x) {
+ pass();
+ } catch (Exception x) {
+ fail("new Formatter(new PrintStream(\"foo\"), \"bar\")", x);
+ }
+
+ try (Formatter f = new Formatter(new PrintStream("foo"), "UTF-8")) {
+ pass();
+ locale(f);
+ out(f, BufferedWriter.class);
+ } catch (Exception x) {
+ fail("new Formatter(new PrintStream(\"foo\"), \"UTF-8\")", x);
+ }
+
+ // Formatter(OutputStream os, String csn, Locale l)
+ try {
+ new Formatter((OutputStream) null, "ISO-8859-1", Locale.UK);
+ fail("new Formatter((OutputStream) null, \"ISO-8859-1\", Locale.UK)");
+ } catch (NullPointerException x) {
+ pass();
+ } catch (Exception x) {
+ fail("new Formatter((OutputStream) null, \"ISO-8859-1\", Locale.UK)",
+ x);
+ }
+
+ try (PrintStream ps = new PrintStream("foo")) {
+ new Formatter(ps, null, Locale.UK);
+ fail("new Formatter(new PrintStream(\"foo\"), null, Locale.UK)");
+ } catch (NullPointerException x) {
+ pass();
+ } catch (Exception x) {
+ fail("new Formatter(new PrintStream(\"foo\"), null, Locale.UK)",
+ x);
+ }
+
+ try (PrintStream ps = new PrintStream("foo")) {
+ new Formatter(ps, "bar", Locale.UK);
+ fail("new Formatter(new PrintStream(\"foo\"), \"bar\", Locale.UK)");
+ } catch (UnsupportedEncodingException x) {
+ pass();
+ } catch (Exception x) {
+ fail("new Formatter(new PrintStream(\"foo\"), \"bar\", Locale.UK)",
+ x);
+ }
+
+ try (Formatter f = new Formatter(new PrintStream("foo"), "UTF-8", Locale.UK)) {
+ pass();
+ out(f, BufferedWriter.class);
+ locale(f, Locale.UK);
+ } catch (Exception x) {
+ fail("new Formatter(new PrintStream(\"foo\"), \"UTF-8\"), Locale.UK",
+ x);
+ }
+
+ // PrintStream(String fileName)
+ try (PrintStream ps = new PrintStream("foo")) {
+ pass();
+ } catch (Exception x) {
+ fail("new PrintStream(\"foo\")", x);
+ }
+
+ // PrintStream(String fileName, String csn)
+ try {
+ new PrintStream("foo", null);
+ fail("new PrintStream(\"foo\", null)");
+ } catch (NullPointerException x) {
+ pass();
+ } catch (Exception x) {
+ fail("new PrintStream(\"foo\", null)", x);
+ }
+
+ // PrintStream(File file)
+ try (PrintStream ps = new PrintStream(new File("foo"))) {
+ pass();
+ } catch (Exception x) {
+ fail("new PrintStream(new File(\"foo\"))", x);
+ }
+
+ // PrintStream(File file, String csn)
+ try {
+ new PrintStream(new File("foo"), null);
+ fail("new PrintStream(new File(\"foo\"), null)");
+ } catch (NullPointerException x) {
+ pass();
+ } catch (Exception x) {
+ fail("new PrintStream(new File(\"foo\"), null)", x);
+ }
+
+ // PrintWriter(String fileName)
+ try (PrintWriter pw = new PrintWriter("foo")) {
+ pass();
+ } catch (Exception x) {
+ fail("new PrintWriter(\"foo\")", x);
+ }
+
+ // PrintWriter(String fileName, String csn)
+ try {
+ new PrintWriter("foo", null);
+ fail("new PrintWriter(\"foo\"), null");
+ } catch (NullPointerException x) {
+ pass();
+ } catch (Exception x) {
+ fail("new PrintWriter(\"foo\"), null", x);
+ }
+
+ // PrintWriter(File file)
+ try (PrintWriter pw = new PrintWriter(new File("foo"))) {
+ pass();
+ } catch (Exception x) {
+ fail("new PrintWriter(new File(\"foo\"))", x);
+ }
+
+ // PrintWriter(File file, String csn)
+ try {
+ new PrintWriter(new File("foo"), null);
+ fail("new PrintWriter(new File(\"foo\")), null");
+ } catch (NullPointerException x) {
+ pass();
+ } catch (Exception x) {
+ fail("new PrintWriter(new File(\"foo\")), null", x);
+ }
+
+ if (fail != 0)
+ throw new RuntimeException((fail + pass) + " tests: "
+ + fail + " failure(s), first", first);
+ else
+ System.out.println("all " + (fail + pass) + " tests passed");
+ }
+}