3789983e89
Reviewed-by: darcy, ihse
106 lines
3.3 KiB
Java
106 lines
3.3 KiB
Java
/*
|
|
* Copyright (c) 2000, 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 4329985
|
|
* @summary Ensure that BufferedReader's ready() method handles the new line
|
|
* character following the carriage return correctly and returns the right
|
|
* value so that a read operation after a ready() does not block unnecessarily.
|
|
*/
|
|
import java.io.*;
|
|
|
|
public class Ready {
|
|
|
|
public static void main(String[] args) throws IOException {
|
|
BufferedReader reader;
|
|
String[] strings = {
|
|
"LF-Only\n",
|
|
"LF-Only\n",
|
|
"CR/LF\r\n",
|
|
"CR/LF\r\n",
|
|
"CR-Only\r",
|
|
"CR-Only\r",
|
|
"CR/LF line\r\nMore data.\r\n",
|
|
"CR/LF line\r\nMore data.\r\n"
|
|
};
|
|
|
|
// The buffer sizes are chosen such that the boundary conditions are
|
|
// tested.
|
|
int[] bufsizes = { 7, 8, 6, 5, 7, 8, 11, 10};
|
|
|
|
for (int i = 0; i < strings.length; i++) {
|
|
reader = new BufferedReader(new BoundedReader(strings[i]),
|
|
bufsizes[i]);
|
|
while (reader.ready()) {
|
|
String str = reader.readLine();
|
|
System.out.println("read>>" + str);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private static class BoundedReader extends Reader{
|
|
|
|
private char[] content;
|
|
private int limit;
|
|
private int pos = 0;
|
|
|
|
public BoundedReader(String content) {
|
|
this.limit = content.length();
|
|
this.content = new char[limit];
|
|
content.getChars(0, limit, this.content, 0);
|
|
}
|
|
|
|
public int read() throws IOException {
|
|
if (pos >= limit)
|
|
throw new RuntimeException("Hit infinite wait condition");
|
|
return content[pos++];
|
|
}
|
|
|
|
public int read(char[] buf, int offset, int length)
|
|
throws IOException
|
|
{
|
|
if (pos >= limit)
|
|
throw new RuntimeException("Hit infinite wait condition");
|
|
int oldPos = pos;
|
|
int readlen = (length > (limit - pos)) ? (limit - pos) : length;
|
|
for (int i = offset; i < readlen; i++) {
|
|
buf[i] = (char)read();
|
|
}
|
|
|
|
return (pos - oldPos);
|
|
}
|
|
|
|
public void close() {}
|
|
|
|
public boolean ready() {
|
|
if (pos < limit)
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
}
|
|
|
|
}
|