/* * Copyright (c) 2015, 2017, 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 8072773 * @library /test/lib /lib/testlibrary/bootlib * @build java.base/java.util.stream.OpTestCase * jdk.test.lib.RandomFactory * @run testng/othervm StreamLinesTest * @summary Tests streams returned from Files.lines, primarily focused on * testing the file-channel-based stream stream with supported * character sets * @key randomness
*/
static List<String> readAllLines(Path path, Charset cs) throws IOException { try (BufferedReader reader = Files.newBufferedReader(path, cs)) {
List<String> result = new ArrayList<>(); for (; ; ) {
String line = reader.readLine(); if (line == null) break;
result.add(line);
} return result;
}
}
static Object[] of(String description, IntFunction<String> lineGenerator,
IntFunction<LineSeparator> separatorGenerator, int n, Charset cs) { returnnew Object[]{description, lineGenerator, separatorGenerator, n, cs};
}
privatestaticfinal Random random = RandomFactory.getRandom();
@DataProvider publicstatic Object[][] lines() {
List<Object[]> l = new ArrayList<>();
// Include the three supported optimal-line charsets and one // which does not
List<Charset> charsets = Arrays.asList(StandardCharsets.UTF_8,
StandardCharsets.US_ASCII,
StandardCharsets.ISO_8859_1,
StandardCharsets.UTF_16);
String[] lines = {"", "A", "AB", "ABC", "ABCD"}; int[] linesSizes = {0, 1, 2, 3, 4, 16, 256, 1024};
for (Charset charset : charsets) { for (int linesSize : linesSizes) { if (linesSize > 0) { for (String line : lines) { for (LineSeparator ls : EnumSet.complementOf(EnumSet.of(LineSeparator.NONE))) {
String description = String.format("%d lines of \"%s\" with separator %s", linesSize, line, ls);
l.add(of(description,
i -> line,
i -> ls,
linesSize, charset));
}
}
} else {
l.add(of("Empty file: 0 lines",
i -> "",
i -> LineSeparator.NONE,
0, charset));
}
}
}
for (Charset charset : charsets) {
l.add(of("A maximum of 1024 random lines and separators",
i -> lines[1 + random.nextInt(lines.length - 1)],
i -> LineSeparator.values()[random.nextInt(LineSeparator.values().length)],
1024, charset));
}
for (Charset charset : charsets) {
l.add(of("One large line with no separators",
i -> "ABCD",
i -> LineSeparator.NONE,
1024, charset));
}
// Test without a separator at the end
List<String> expected = readAllLines(p, cs);
withData(TestData.Factory.ofSupplier("Lines with no separator at end", ss))
.stream(s -> s)
.expectedResult(expected)
.exercise();
// Test with a separator at the end
writeLineSeparator(p, separatorGenerator, lines, cs);
expected = readAllLines(p, cs);
withData(TestData.Factory.ofSupplier("Lines with separator at end", ss))
.stream(s -> s)
.expectedResult(expected)
.exercise();
}
}
¤ Dauer der Verarbeitung: 0.22 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.