test/jdk/java/lang/String/Lines.java
changeset 50215 2fb27c352cae
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/lang/String/Lines.java	Tue May 22 12:04:05 2018 -0300
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2018, 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
+ * @summary Basic lines functionality
+ * @bug 8200380
+ * @run main/othervm Lines
+ */
+
+import java.util.Iterator;
+import java.util.stream.Stream;
+import java.io.BufferedReader;
+import java.io.StringReader;
+
+public class Lines {
+    public static void main(String... arg) {
+        testLines();
+    }
+
+    /*
+     * Test with strings
+     */
+    static void testLines() {
+        testString("");
+        testString(" ");
+        testString("\n");
+        testString("\n\n\n");
+        testString("\r\r\r");
+        testString("\r\n\r\n\r\n");
+        testString("\n\r\r\n");
+        testString("abc\ndef\nghi\n");
+        testString("abc\ndef\nghi");
+        testString("abc\rdef\rghi\r");
+        testString("abc\rdef\rghi");
+        testString("abc\r\ndef\r\nghi\r\n");
+        testString("abc\r\ndef\r\nghi");
+
+        testString("\2022");
+        testString("\2022\n");
+        testString("\2022\n\2022\n\2022\n");
+        testString("\2022\r\2022\r\2022\r");
+        testString("\2022\r\n\2022\r\n\2022\r\n");
+        testString("\2022\n\2022\r\2022\r\n");
+        testString("abc\2022\ndef\2022\nghi\2022\n");
+        testString("abc\2022\ndef\2022\nghi\2022");
+        testString("abc\2022\rdef\2022\rghi\2022\r");
+        testString("abc\2022\rdef\2022\rghi\2022");
+        testString("abc\2022\r\ndef\2022\r\nghi\2022\r\n");
+        testString("abc\2022\r\ndef\2022\r\nghi\2022");
+        testString("\2022\n\n\n");
+    }
+
+    static void testString(String string) {
+        Stream<String> lines = string.lines();
+        Stream<String> brLines = new BufferedReader(new StringReader(string)).lines();
+
+        Iterator<String> iterator = lines.iterator();
+        Iterator<String> brIterator = brLines.iterator();
+        int count = 0;
+
+        while (iterator.hasNext() && brIterator.hasNext()) {
+            count++;
+            String line = iterator.next();
+            String brLine = brIterator.next();
+
+            if (!line.equals(brLine)) {
+                String replace = string.replaceAll("\n", "\\n").replaceAll("\r", "\\r");
+                System.err.format("Mismatch at line %d of \"%s\"%n", count, replace);
+                throw new RuntimeException();
+            }
+        }
+
+        if (iterator.hasNext() || brIterator.hasNext()) {
+            System.err.format("Mismatch after line %d of \"%s\"%n", count, string);
+            throw new RuntimeException();
+        }
+    }
+}