test/jdk/java/io/PrintWriter/EncodingTest.java
author joehw
Tue, 12 Dec 2017 11:10:12 -0800
changeset 48252 77b88d8f8380
permissions -rw-r--r--
8183743: Umbrella: add overloads that take a Charset parameter Reviewed-by: alanb, rriggs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
48252
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
     1
/*
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
     2
 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
     4
 *
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
     7
 * published by the Free Software Foundation.
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
     8
 *
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    13
 * accompanied this code).
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    14
 *
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    18
 *
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    21
 * questions.
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    22
 */
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    23
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    24
import java.io.File;
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    25
import java.io.FileOutputStream;
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    26
import java.io.IOException;
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    27
import java.io.PrintWriter;
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    28
import java.nio.charset.Charset;
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    29
import java.nio.charset.StandardCharsets;
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    30
import java.nio.file.Files;
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    31
import java.nio.file.Paths;
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    32
import org.testng.Assert;
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    33
import org.testng.annotations.DataProvider;
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    34
import org.testng.annotations.Test;
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    35
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    36
/**
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    37
 * @test
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    38
 * @bug 8183743
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    39
 * @summary Test to verify the new overload method with Charset functions the same
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    40
 * as the existing method that takes a charset name.
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    41
 * @run testng EncodingTest
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    42
 */
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    43
public class EncodingTest {
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    44
    static String USER_DIR = System.getProperty("user.dir", ".");
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    45
    static boolean AUTOFLUSH = true;
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    46
    public static enum ConstructorType {
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    47
        STRING,
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    48
        FILE,
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    49
        OUTPUTSTREAM
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    50
    }
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    51
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    52
    /*
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    53
     * DataProvider fields:
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    54
     * Type of the constructor, a file to be written with a charset name,
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    55
     * a file to be written with a charset, charset name, charset.
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    56
     */
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    57
    @DataProvider(name = "parameters")
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    58
    public Object[][] getParameters() throws IOException {
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    59
        String csn = StandardCharsets.UTF_8.name();
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    60
        Charset charset = StandardCharsets.UTF_8;
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    61
        File file1 = new File(USER_DIR, "PWCharsetTest1.txt");
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    62
        File file2 = new File(USER_DIR, "PWCharsetTest2.txt");
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    63
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    64
        return new Object[][]{
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    65
            {ConstructorType.STRING, file1, file2, csn, charset},
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    66
            {ConstructorType.FILE, file1, file2, csn, charset},
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    67
            {ConstructorType.OUTPUTSTREAM, file1, file2, csn, charset}
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    68
        };
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    69
    }
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    70
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    71
    /**
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    72
     * Verifies that the overloading constructor behaves the same as the existing
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    73
     * one.
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    74
     *
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    75
     * @param type the type of the constructor
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    76
     * @param file1 file1 written with the name of a charset
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    77
     * @param file2 file2 written with a charset
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    78
     * @param csn the charset name
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    79
     * @param charset the charset
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    80
     * @throws IOException
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    81
     */
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    82
    @Test(dataProvider = "parameters")
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    83
    public void test(ConstructorType type, File file1, File file2, String csn, Charset charset)
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    84
            throws Exception {
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    85
        createFile(getWriter(type, file1.getPath(), csn, null));
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    86
        createFile(getWriter(type, file2.getPath(), null, charset));
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    87
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    88
        Assert.assertEquals(Files.readAllLines(Paths.get(file1.getPath()), charset),
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    89
                Files.readAllLines(Paths.get(file2.getPath()), charset));
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    90
    }
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    91
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    92
    void createFile(PrintWriter out) throws IOException {
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    93
        out.println("high surrogate");
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    94
        out.println(Character.MIN_HIGH_SURROGATE);
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    95
        out.println("low surrogate");
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    96
        out.println(Character.MIN_LOW_SURROGATE);
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    97
        out.flush();
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    98
        out.close();
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
    99
    }
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   100
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   101
    PrintWriter getWriter(ConstructorType type, String path, String csn, Charset charset)
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   102
            throws IOException {
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   103
        PrintWriter out = null;
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   104
        if (csn != null) {
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   105
            switch (type) {
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   106
                case STRING:
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   107
                    out = new PrintWriter(path, csn);
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   108
                    break;
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   109
                case FILE:
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   110
                    out = new PrintWriter(new File(path), csn);
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   111
                    break;
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   112
                case OUTPUTSTREAM:
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   113
                    // No corresponding method with charset name
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   114
                    // compare with PrintWriter(path, csn) instead
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   115
                    out = new PrintWriter(path, csn);
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   116
                    break;
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   117
            }
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   118
        } else {
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   119
            switch (type) {
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   120
                case STRING:
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   121
                    out = new PrintWriter(path, charset);
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   122
                    break;
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   123
                case FILE:
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   124
                    out = new PrintWriter(new File(path), charset);
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   125
                    break;
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   126
                case OUTPUTSTREAM:
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   127
                    FileOutputStream fout = new FileOutputStream(path);
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   128
                    out = new PrintWriter(fout, AUTOFLUSH, charset);
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   129
                    break;
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   130
            }
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   131
        }
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   132
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   133
        return out;
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   134
    }
77b88d8f8380 8183743: Umbrella: add overloads that take a Charset parameter
joehw
parents:
diff changeset
   135
}