jdk/test/java/nio/file/Files/BytesAndLines.java
author igerasim
Mon, 29 Jul 2013 12:35:42 +0400
changeset 19185 34aa83720203
parent 8158 77d9c0f1c19f
child 20541 bd0a8b142cb3
permissions -rw-r--r--
8020669: (fs) Files.readAllBytes() does not read any data when Files.size() is 0 Reviewed-by: alanb, chegar, martin, rriggs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8158
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
     1
/*
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
     2
 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
     4
 *
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
     7
 * published by the Free Software Foundation.
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
     8
 *
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    13
 * accompanied this code).
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    14
 *
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    18
 *
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    21
 * questions.
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    22
 */
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    23
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    24
/* @test
19185
34aa83720203 8020669: (fs) Files.readAllBytes() does not read any data when Files.size() is 0
igerasim
parents: 8158
diff changeset
    25
 * @bug 7006126 8020669
8158
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    26
 * @summary Unit test for methods for Files readAllBytes, readAllLines and
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    27
 *     and write methods.
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    28
 */
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    29
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    30
import java.nio.file.*;
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    31
import static java.nio.file.Files.*;
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    32
import java.io.*;
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    33
import java.util.*;
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    34
import java.nio.charset.*;
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    35
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    36
public class BytesAndLines {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    37
    static final Random rand = new Random();
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    38
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    39
    static final Charset US_ASCII = Charset.forName("US-ASCII");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    40
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    41
    public static void main(String[] args) throws IOException {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    42
        testReadAndWriteBytes();
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    43
        testReadLines();
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    44
        testWriteLines();
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    45
    }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    46
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    47
    /**
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    48
     * Test readAllBytes(Path) and write(Path, byte[], OpenOption...)
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    49
     */
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    50
    static void testReadAndWriteBytes() throws IOException {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    51
        // exercise methods with various sizes
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    52
        testReadAndWriteBytes(0);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    53
        for (int i=0; i<100; i++) {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    54
            testReadAndWriteBytes(rand.nextInt(32000));
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    55
        }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    56
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    57
        // NullPointerException
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    58
        Path file = Paths.get("foo");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    59
        List<String> lines = Collections.emptyList();
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    60
        try {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    61
            readAllBytes(null);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    62
            throw new RuntimeException("NullPointerException expected");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    63
        } catch (NullPointerException ignore) { }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    64
        try {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    65
            write(null, lines, Charset.defaultCharset());
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    66
            throw new RuntimeException("NullPointerException expected");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    67
        } catch (NullPointerException ignore) { }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    68
        try {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    69
            write(file, null, Charset.defaultCharset());
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    70
            throw new RuntimeException("NullPointerException expected");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    71
        } catch (NullPointerException ignore) { }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    72
        try {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    73
            write(file, lines, null);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    74
            throw new RuntimeException("NullPointerException expected");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    75
        } catch (NullPointerException ignore) { }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    76
        try {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    77
            write(file, lines, Charset.defaultCharset(), (OpenOption[])null);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    78
            throw new RuntimeException("NullPointerException expected");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    79
        } catch (NullPointerException ignore) { }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    80
        try {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    81
            OpenOption[] opts = { null };
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    82
            write(file, lines, Charset.defaultCharset(), opts);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    83
            throw new RuntimeException("NullPointerException expected");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    84
        } catch (NullPointerException ignore) { }
19185
34aa83720203 8020669: (fs) Files.readAllBytes() does not read any data when Files.size() is 0
igerasim
parents: 8158
diff changeset
    85
34aa83720203 8020669: (fs) Files.readAllBytes() does not read any data when Files.size() is 0
igerasim
parents: 8158
diff changeset
    86
        // read from procfs
34aa83720203 8020669: (fs) Files.readAllBytes() does not read any data when Files.size() is 0
igerasim
parents: 8158
diff changeset
    87
        if (System.getProperty("os.name").equals("Linux")) {
34aa83720203 8020669: (fs) Files.readAllBytes() does not read any data when Files.size() is 0
igerasim
parents: 8158
diff changeset
    88
            // Refer to the Linux proc(5) man page for details about /proc/self/stat file
34aa83720203 8020669: (fs) Files.readAllBytes() does not read any data when Files.size() is 0
igerasim
parents: 8158
diff changeset
    89
            // procfs reports it to be zero sized, even though data can be read from it
34aa83720203 8020669: (fs) Files.readAllBytes() does not read any data when Files.size() is 0
igerasim
parents: 8158
diff changeset
    90
            String statFile = "/proc/self/stat";
34aa83720203 8020669: (fs) Files.readAllBytes() does not read any data when Files.size() is 0
igerasim
parents: 8158
diff changeset
    91
            Path pathStat = Paths.get(statFile);
34aa83720203 8020669: (fs) Files.readAllBytes() does not read any data when Files.size() is 0
igerasim
parents: 8158
diff changeset
    92
            byte[] data = Files.readAllBytes(pathStat);
34aa83720203 8020669: (fs) Files.readAllBytes() does not read any data when Files.size() is 0
igerasim
parents: 8158
diff changeset
    93
            assertTrue(data.length > 0, "Files.readAllBytes('" + statFile + "') failed to read");
34aa83720203 8020669: (fs) Files.readAllBytes() does not read any data when Files.size() is 0
igerasim
parents: 8158
diff changeset
    94
        }
8158
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    95
    }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    96
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    97
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    98
    static void testReadAndWriteBytes(int size) throws IOException {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
    99
        Path path = createTempFile("blah", null);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   100
        try {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   101
            boolean append = rand.nextBoolean();
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   102
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   103
            byte[] b1 = new byte[size];
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   104
            rand.nextBytes(b1);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   105
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   106
            byte[] b2 = (append) ? new byte[size] : new byte[0];
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   107
            rand.nextBytes(b2);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   108
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   109
            // write method should create file if it doesn't exist
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   110
            if (rand.nextBoolean())
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   111
                delete(path);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   112
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   113
            // write bytes to file
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   114
            Path target = write(path, b1);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   115
            assertTrue(target==path, "Unexpected path");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   116
            assertTrue(size(path) == b1.length, "Unexpected file size");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   117
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   118
            // append bytes to file (might be 0 bytes)
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   119
            write(path, b2, StandardOpenOption.APPEND);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   120
            assertTrue(size(path) == b1.length + b2.length, "Unexpected file size");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   121
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   122
            // read entire file
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   123
            byte[] read = readAllBytes(path);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   124
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   125
            // check bytes are correct
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   126
            byte[] expected;
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   127
            if (append) {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   128
                expected = new byte[b1.length + b2.length];
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   129
                System.arraycopy(b1, 0, expected, 0, b1.length);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   130
                System.arraycopy(b2, 0, expected, b1.length, b2.length);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   131
            } else {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   132
                expected = b1;
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   133
            }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   134
            assertTrue(Arrays.equals(read, expected),
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   135
                       "Bytes read not the same as bytes written");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   136
        } finally {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   137
            deleteIfExists(path);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   138
        }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   139
    }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   140
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   141
    /**
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   142
     * Test readAllLines(Path,Charset)
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   143
     */
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   144
    static void testReadLines() throws IOException {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   145
        Path tmpfile = createTempFile("blah", "txt");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   146
        try {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   147
            List<String> lines;
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   148
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   149
            // zero lines
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   150
            assertTrue(size(tmpfile) == 0, "File should be empty");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   151
            lines = readAllLines(tmpfile, US_ASCII);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   152
            assertTrue(lines.isEmpty(), "No line expected");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   153
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   154
            // one line
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   155
            byte[] hi = { (byte)'h', (byte)'i' };
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   156
            write(tmpfile, hi);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   157
            lines = readAllLines(tmpfile, US_ASCII);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   158
            assertTrue(lines.size() == 1, "One line expected");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   159
            assertTrue(lines.get(0).equals("hi"), "'Hi' expected");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   160
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   161
            // two lines using platform's line separator
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   162
            List<String> expected = Arrays.asList("hi", "there");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   163
            write(tmpfile, expected, US_ASCII);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   164
            assertTrue(size(tmpfile) > 0, "File is empty");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   165
            lines = readAllLines(tmpfile, US_ASCII);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   166
            assertTrue(lines.equals(expected), "Unexpected lines");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   167
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   168
            // MalformedInputException
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   169
            byte[] bad = { (byte)0xff, (byte)0xff };
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   170
            write(tmpfile, bad);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   171
            try {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   172
                readAllLines(tmpfile, US_ASCII);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   173
                throw new RuntimeException("MalformedInputException expected");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   174
            } catch (MalformedInputException ignore) { }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   175
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   176
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   177
            // NullPointerException
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   178
            try {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   179
                readAllLines(null, US_ASCII);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   180
                throw new RuntimeException("NullPointerException expected");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   181
            } catch (NullPointerException ignore) { }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   182
            try {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   183
                readAllLines(tmpfile, null);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   184
                throw new RuntimeException("NullPointerException expected");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   185
            } catch (NullPointerException ignore) { }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   186
19185
34aa83720203 8020669: (fs) Files.readAllBytes() does not read any data when Files.size() is 0
igerasim
parents: 8158
diff changeset
   187
            // read from procfs
34aa83720203 8020669: (fs) Files.readAllBytes() does not read any data when Files.size() is 0
igerasim
parents: 8158
diff changeset
   188
            if (System.getProperty("os.name").equals("Linux")) {
34aa83720203 8020669: (fs) Files.readAllBytes() does not read any data when Files.size() is 0
igerasim
parents: 8158
diff changeset
   189
                // Refer to the Linux proc(5) man page for details about /proc/self/status file
34aa83720203 8020669: (fs) Files.readAllBytes() does not read any data when Files.size() is 0
igerasim
parents: 8158
diff changeset
   190
                // procfs reports this file to be zero sized, even though data can be read from it
34aa83720203 8020669: (fs) Files.readAllBytes() does not read any data when Files.size() is 0
igerasim
parents: 8158
diff changeset
   191
                String statusFile = "/proc/self/status";
34aa83720203 8020669: (fs) Files.readAllBytes() does not read any data when Files.size() is 0
igerasim
parents: 8158
diff changeset
   192
                Path pathStatus = Paths.get(statusFile);
34aa83720203 8020669: (fs) Files.readAllBytes() does not read any data when Files.size() is 0
igerasim
parents: 8158
diff changeset
   193
                lines = Files.readAllLines(pathStatus, US_ASCII);
34aa83720203 8020669: (fs) Files.readAllBytes() does not read any data when Files.size() is 0
igerasim
parents: 8158
diff changeset
   194
                assertTrue(lines.size() > 0, "Files.readAllLines('" + pathStatus + "') failed to read");
34aa83720203 8020669: (fs) Files.readAllBytes() does not read any data when Files.size() is 0
igerasim
parents: 8158
diff changeset
   195
            }
34aa83720203 8020669: (fs) Files.readAllBytes() does not read any data when Files.size() is 0
igerasim
parents: 8158
diff changeset
   196
8158
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   197
        } finally {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   198
            delete(tmpfile);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   199
        }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   200
    }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   201
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   202
    /**
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   203
     * Test write(Path,Iterable<? extends CharSequence>,Charset,OpenOption...)
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   204
     */
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   205
    static void testWriteLines() throws IOException {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   206
        Path tmpfile = createTempFile("blah", "txt");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   207
        try {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   208
            // write method should create file if it doesn't exist
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   209
            if (rand.nextBoolean())
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   210
                delete(tmpfile);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   211
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   212
            // zero lines
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   213
            Path result = write(tmpfile, Collections.<String>emptyList(), US_ASCII);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   214
            assert(size(tmpfile) == 0);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   215
            assert(result == tmpfile);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   216
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   217
            // two lines
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   218
            List<String> lines = Arrays.asList("hi", "there");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   219
            write(tmpfile, lines, US_ASCII);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   220
            List<String> actual = readAllLines(tmpfile, US_ASCII);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   221
            assertTrue(actual.equals(lines), "Unexpected lines");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   222
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   223
            // append two lines
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   224
            write(tmpfile, lines, US_ASCII, StandardOpenOption.APPEND);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   225
            List<String> expected = new ArrayList<String>();
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   226
            expected.addAll(lines);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   227
            expected.addAll(lines);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   228
            assertTrue(expected.size() == 4, "List should have 4 elements");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   229
            actual = readAllLines(tmpfile, US_ASCII);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   230
            assertTrue(actual.equals(expected), "Unexpected lines");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   231
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   232
            // UnmappableCharacterException
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   233
            try {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   234
                String s = "\u00A0\u00A1";
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   235
                write(tmpfile, Arrays.asList(s), US_ASCII);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   236
                throw new RuntimeException("UnmappableCharacterException expected");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   237
            } catch (UnmappableCharacterException ignore) { }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   238
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   239
            // NullPointerException
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   240
            try {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   241
                write(null, lines, US_ASCII);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   242
                throw new RuntimeException("NullPointerException expected");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   243
            } catch (NullPointerException ignore) { }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   244
            try {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   245
                write(tmpfile, null, US_ASCII);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   246
                throw new RuntimeException("NullPointerException expected");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   247
            } catch (NullPointerException ignore) { }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   248
            try {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   249
                write(tmpfile, lines, null);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   250
                throw new RuntimeException("NullPointerException expected");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   251
            } catch (NullPointerException ignore) { }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   252
            try {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   253
                write(tmpfile, lines, US_ASCII, (OpenOption[])null);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   254
                throw new RuntimeException("NullPointerException expected");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   255
            } catch (NullPointerException ignore) { }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   256
            try {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   257
                OpenOption[] opts = { (OpenOption)null };
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   258
                write(tmpfile, lines, US_ASCII, opts);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   259
                throw new RuntimeException("NullPointerException expected");
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   260
            } catch (NullPointerException ignore) { }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   261
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   262
        } finally {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   263
            delete(tmpfile);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   264
        }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   265
    }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   266
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   267
    static void assertTrue(boolean expr, String errmsg) {
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   268
        if (!expr)
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   269
            throw new RuntimeException(errmsg);
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   270
    }
77d9c0f1c19f 7006126: (fs) Updates to file system API (1/2011)
alanb
parents:
diff changeset
   271
}