1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonpackage libcore.java.io;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.BufferedReader;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.CharArrayReader;
220409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughesimport java.io.InputStreamReader;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException;
240409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughesimport java.io.OutputStreamWriter;
250409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughesimport java.io.PipedInputStream;
260409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughesimport java.io.PipedOutputStream;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.PipedReader;
280409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughesimport java.io.PrintWriter;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.Reader;
3082a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilsonimport java.io.StringReader;
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.Support_ASimpleReader;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.Support_StringReader;
3382a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilsonimport tests.support.ThrowingReader;
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
35935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonpublic class OldBufferedReaderTest extends junit.framework.TestCase {
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    BufferedReader br;
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    String testString = "Test_All_Tests\nTest_java_io_BufferedInputStream\nTest_java_io_BufferedOutputStream\nTest_java_io_ByteArrayInputStream\nTest_java_io_ByteArrayOutputStream\nTest_java_io_DataInputStream\nTest_java_io_File\nTest_java_io_FileDescriptor\nTest_java_io_FileInputStream\nTest_java_io_FileNotFoundException\nTest_java_io_FileOutputStream\nTest_java_io_FilterInputStream\nTest_java_io_FilterOutputStream\nTest_java_io_InputStream\nTest_java_io_IOException\nTest_java_io_OutputStream\nTest_java_io_PrintStream\nTest_java_io_RandomAccessFile\nTest_java_io_SyncFailedException\nTest_java_lang_AbstractMethodError\nTest_java_lang_ArithmeticException\nTest_java_lang_ArrayIndexOutOfBoundsException\nTest_java_lang_ArrayStoreException\nTest_java_lang_Boolean\nTest_java_lang_Byte\nTest_java_lang_Character\nTest_java_lang_Class\nTest_java_lang_ClassCastException\nTest_java_lang_ClassCircularityError\nTest_java_lang_ClassFormatError\nTest_java_lang_ClassLoader\nTest_java_lang_ClassNotFoundException\nTest_java_lang_CloneNotSupportedException\nTest_java_lang_Double\nTest_java_lang_Error\nTest_java_lang_Exception\nTest_java_lang_ExceptionInInitializerError\nTest_java_lang_Float\nTest_java_lang_IllegalAccessError\nTest_java_lang_IllegalAccessException\nTest_java_lang_IllegalArgumentException\nTest_java_lang_IllegalMonitorStateException\nTest_java_lang_IllegalThreadStateException\nTest_java_lang_IncompatibleClassChangeError\nTest_java_lang_IndexOutOfBoundsException\nTest_java_lang_InstantiationError\nTest_java_lang_InstantiationException\nTest_java_lang_Integer\nTest_java_lang_InternalError\nTest_java_lang_InterruptedException\nTest_java_lang_LinkageError\nTest_java_lang_Long\nTest_java_lang_Math\nTest_java_lang_NegativeArraySizeException\nTest_java_lang_NoClassDefFoundError\nTest_java_lang_NoSuchFieldError\nTest_java_lang_NoSuchMethodError\nTest_java_lang_NullPointerException\nTest_java_lang_Number\nTest_java_lang_NumberFormatException\nTest_java_lang_Object\nTest_java_lang_OutOfMemoryError\nTest_java_lang_RuntimeException\nTest_java_lang_SecurityManager\nTest_java_lang_Short\nTest_java_lang_StackOverflowError\nTest_java_lang_String\nTest_java_lang_StringBuffer\nTest_java_lang_StringIndexOutOfBoundsException\nTest_java_lang_System\nTest_java_lang_Thread\nTest_java_lang_ThreadDeath\nTest_java_lang_ThreadGroup\nTest_java_lang_Throwable\nTest_java_lang_UnknownError\nTest_java_lang_UnsatisfiedLinkError\nTest_java_lang_VerifyError\nTest_java_lang_VirtualMachineError\nTest_java_lang_vm_Image\nTest_java_lang_vm_MemorySegment\nTest_java_lang_vm_ROMStoreException\nTest_java_lang_vm_VM\nTest_java_lang_Void\nTest_java_net_BindException\nTest_java_net_ConnectException\nTest_java_net_DatagramPacket\nTest_java_net_DatagramSocket\nTest_java_net_DatagramSocketImpl\nTest_java_net_InetAddress\nTest_java_net_NoRouteToHostException\nTest_java_net_PlainDatagramSocketImpl\nTest_java_net_PlainSocketImpl\nTest_java_net_Socket\nTest_java_net_SocketException\nTest_java_net_SocketImpl\nTest_java_net_SocketInputStream\nTest_java_net_SocketOutputStream\nTest_java_net_UnknownHostException\nTest_java_util_ArrayEnumerator\nTest_java_util_Date\nTest_java_util_EventObject\nTest_java_util_HashEnumerator\nTest_java_util_Hashtable\nTest_java_util_Properties\nTest_java_util_ResourceBundle\nTest_java_util_tm\nTest_java_util_Vector\n";
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_ConstructorLjava_io_Reader() {
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.io.BufferedReader(java.io.Reader)
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        br = new BufferedReader(new Support_StringReader(testString));
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(br);
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_ConstructorLjava_io_ReaderI() {
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Illegal negative size argument test.
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br = new BufferedReader(new Support_StringReader(testString), 0);
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IllegalArgumentException expected");
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IllegalArgumentException expected) {
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        br = new BufferedReader(new Support_StringReader(testString), 1024);
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(br);
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_close() {
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Support_ASimpleReader ssr = new Support_ASimpleReader(true);
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br = new BufferedReader(new Support_StringReader(testString));
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br.close();
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br.read();
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 1: Read on closed stream.");
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException x) {
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected.
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during close test " + e.toString());
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
70f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        br = new BufferedReader(ssr);
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br.close();
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 2: IOException expected.");
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected.
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Avoid IOException in tearDown().
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ssr.throwExceptionOnNextUse = false;
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
82935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson	public void test_markI() throws IOException {
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method void java.io.BufferedReader.mark(int)
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        char[] buf = null;
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br = new BufferedReader(new Support_StringReader(testString));
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br.skip(500);
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br.mark(1000);
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br.skip(250);
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br.reset();
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            buf = new char[testString.length()];
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br.read(buf, 0, 500);
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Failed to set mark properly", testString.substring(500,
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    1000).equals(new String(buf, 0, 500)));
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (java.io.IOException e) {
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during mark test");
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br = new BufferedReader(new Support_StringReader(testString), 800);
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br.skip(500);
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br.mark(250);
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br.read(buf, 0, 1000);
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br.reset();
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Failed to invalidate mark properly");
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException x) {
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        char[] chars = new char[256];
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < 256; i++)
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            chars[i] = (char) i;
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Reader in = new BufferedReader(new Support_StringReader(new String(
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                chars)), 12);
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            in.skip(6);
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            in.mark(14);
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            in.read(new char[14], 0, 14);
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            in.reset();
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Wrong chars", in.read() == (char) 6
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    && in.read() == (char) 7);
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during mark test 2:" + e);
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        in = new BufferedReader(new Support_StringReader(new String(chars)), 12);
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            in.skip(6);
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            in.mark(8);
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            in.skip(7);
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            in.reset();
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Wrong chars 2", in.read() == (char) 6
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    && in.read() == (char) 7);
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during mark test 3:" + e);
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_markSupported() {
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method boolean java.io.BufferedReader.markSupported()
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        br = new BufferedReader(new Support_StringReader(testString));
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("markSupported returned false.", br.markSupported());
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_read() throws IOException {
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Support_ASimpleReader ssr = new Support_ASimpleReader(true);
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br = new BufferedReader(new Support_StringReader(testString));
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int r = br.read();
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Char read improperly", testString.charAt(0) == r);
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br = new BufferedReader(new Support_StringReader(new String(
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new char[] { '\u8765' })));
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Wrong double byte character", br.read() == '\u8765');
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (java.io.IOException e) {
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during read test");
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        char[] chars = new char[256];
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < 256; i++)
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            chars[i] = (char) i;
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Reader in = new BufferedReader(new Support_StringReader(new String(
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                chars)), 12);
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("Wrong initial char", 0, in.read()); // Fill the
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // buffer
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            char[] buf = new char[14];
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            in.read(buf, 0, 14); // Read greater than the buffer
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Wrong block read data", new String(buf)
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .equals(new String(chars, 1, 14)));
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("Wrong chars", 15, in.read()); // Check next byte
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during read test 2:" + e);
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
172f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // regression test for HARMONY-841
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(new BufferedReader(new CharArrayReader(new char[5], 1, 0), 2).read() == -1);
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        br.close();
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        br = new BufferedReader(ssr);
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br.read();
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException expected.");
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected.
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Avoid IOException in tearDown().
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ssr.throwExceptionOnNextUse = false;
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_read$CII_Exception() throws Exception {
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        br = new BufferedReader(new Support_StringReader(testString));
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try{
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br.read(new char[10], -1, 1);
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("should throw IndexOutOfBoundsException");
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try{
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br.read(new char[10], 0, -1);
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("should throw IndexOutOfBoundsException");
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try{
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br.read(new char[10], 10, 1);
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("should throw IndexOutOfBoundsException");
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
210f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        //regression for HARMONY-831
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try{
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new BufferedReader(new PipedReader(), 9).read(new char[] {}, 7, 0);
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("should throw IndexOutOfBoundsException");
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }catch(IndexOutOfBoundsException e){
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_readLine() throws IOException {
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String line;
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        br = new BufferedReader(new Support_StringReader("Lorem\nipsum\rdolor sit amet..."));
222f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        line = br.readLine();
224f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        assertTrue("Test 1: Incorrect line written or read: " + line,
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                line.equals("Lorem"));
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        line = br.readLine();
227f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        assertTrue("Test 2: Incorrect line written or read: " + line,
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                line.equals("ipsum"));
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        line = br.readLine();
230f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        assertTrue("Test 3: Incorrect line written or read: " + line,
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                line.equals("dolor sit amet..."));
232f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        br.close();
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br.readLine();
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 4: IOException expected.");
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected.
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_ready() throws IOException {
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Support_ASimpleReader ssr = new Support_ASimpleReader(true);
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br = new BufferedReader(new Support_StringReader(testString));
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Test 1: ready() returned false", br.ready());
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (java.io.IOException e) {
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during ready test" + e.toString());
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        br.close();
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        br = new BufferedReader(ssr);
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br.close();
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 2: IOException expected.");
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected.
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Avoid IOException in tearDown().
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ssr.throwExceptionOnNextUse = false;
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_skipJ() throws IOException {
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Support_ASimpleReader ssr = new Support_ASimpleReader(true);
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        br = new BufferedReader(new Support_StringReader(testString));
266f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br.skip(-1);
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 1: IllegalArgumentException expected.");
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IllegalArgumentException e) {
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected.
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        br.skip(500);
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        char[] buf = new char[testString.length()];
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        br.read(buf, 0, 500);
277f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        assertTrue("Test 2: Failed to set skip properly.",
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                testString.substring(500, 1000).equals(
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        new String(buf, 0, 500)));
280f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        br.close();
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        br = new BufferedReader(ssr);
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br.skip(1);
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 3: IOException expected.");
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected.
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Avoid IOException in tearDown().
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ssr.throwExceptionOnNextUse = false;
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
29382a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson    public void testReadZeroLengthArray() throws IOException {
29482a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson        br = new BufferedReader(new Support_StringReader("ABCDEF"));
29582a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson        br.read();
29682a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson        br.read();
29782a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson        assertEquals(0, br.read(new char[6], 3, 0));
29882a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson    }
29982a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson
30082a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson    public void testSourceThrowsWithMark() throws IOException {
30182a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson        br = new BufferedReader(new ThrowingReader(
30282a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson                new StringReader("ABCDEFGHI"), 4));
30382a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson
30482a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson        br.read();
30582a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson        br.read();
30682a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson        br.mark(10);
30782a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson        br.read();
30882a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson        br.read();
30982a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson
31082a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson        try {
31182a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson            br.read();
31282a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson            fail();
31382a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson        } catch (IOException fromThrowingReader) {
31482a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson        }
31582a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson
31682a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson        assertEquals('E', br.read());
31782a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson        assertEquals('F', br.read());
31882a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson    }
31982a2dfcd2281c2f8042fd5f09c98bea1e728530fJesse Wilson
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void tearDown() {
321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            br.close();
323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
3260409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes
3270409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes    public void test_readLine_all_line_endings() throws Exception {
3280409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        BufferedReader r = new BufferedReader(new StringReader("1\r2\n3\r\n4"));
3290409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertEquals("1", r.readLine());
3300409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertEquals("2", r.readLine());
3310409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertEquals("3", r.readLine());
3320409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertEquals("4", r.readLine());
3330409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertNull(r.readLine());
3340409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes    }
3350409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes
3360409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes    public void test_readLine_interaction_with_read() throws Exception {
3370409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        BufferedReader r = new BufferedReader(new StringReader("1\r\n2"));
3380409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertEquals('1', r.read());
3390409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertEquals('\r', r.read());
3400409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertEquals("", r.readLine()); // The '\r' we read() didn't count.
3410409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertEquals("2", r.readLine());
3420409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertNull(r.readLine());
3430409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes    }
3440409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes
3450409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes    public void test_readLine_interaction_with_array_read_1() throws Exception {
3460409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        BufferedReader r = new BufferedReader(new StringReader("1\r\n2"));
3470409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertEquals(2, r.read(new char[2], 0, 2));
3480409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertEquals("", r.readLine()); // The '\r' we read() didn't count.
3490409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertEquals("2", r.readLine());
3500409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertNull(r.readLine());
3510409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes    }
3520409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes
3530409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes    public void test_readLine_interaction_with_array_read_2() throws Exception {
3540409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        BufferedReader r = new BufferedReader(new StringReader("1\r\n2"));
3550409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertEquals("1", r.readLine());
3560409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        char[] chars = new char[1];
3570409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertEquals(1, r.read(chars, 0, 1)); // This read skips the '\n'.
3580409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertEquals('2', chars[0]);
3590409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertNull(r.readLine());
3600409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes    }
3610409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes
3620409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes    public void test_readLine_interaction_with_skip() throws Exception {
3630409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        BufferedReader r = new BufferedReader(new StringReader("1\r\n2"));
3640409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertEquals(2, r.skip(2));
3650409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertEquals("", r.readLine()); // The '\r' we skip()ed didn't count.
3660409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertEquals("2", r.readLine());
3670409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertNull(r.readLine());
3680409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes    }
3690409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes
3700409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes    public void test_readLine_interaction_with_mark_and_reset() throws Exception {
3710409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        BufferedReader r = new BufferedReader(new StringReader("1\r\n2\n3"));
3720409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertEquals("1", r.readLine());
3730409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        r.mark(256);
3740409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertEquals('2', r.read()); // This read skips the '\n'.
3750409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertEquals("", r.readLine());
3760409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        r.reset(); // Now we're back half-way through the "\r\n".
3770409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertEquals("2", r.readLine());
3780409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertEquals("3", r.readLine());
3790409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertNull(r.readLine());
3800409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes    }
3810409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes
3820409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes    public void test_8778372() throws Exception {
3830409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        final PipedInputStream pis = new PipedInputStream();
3840409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        final PipedOutputStream pos = new PipedOutputStream(pis);
3850409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        final Thread t = new Thread() {
3860409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes          @Override public void run() {
3870409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes              PrintWriter pw = new PrintWriter(new OutputStreamWriter(pos));
3880409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes              pw.print("hello, world\r");
3890409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes              pw.flush();
3900409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes              try {
3910409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes                  Thread.sleep(2*60*1000);
3920409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes              } catch (InterruptedException ex) {
3930409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes                  fail();
3940409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes              }
3950409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes            }
3960409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        };
3970409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        t.start();
3980409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        BufferedReader br = new BufferedReader(new InputStreamReader(pis));
3990409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes        assertEquals("hello, world", br.readLine());
4000409fa8fe9b1b3cd501931a8c25e109e6ff71be0Elliott Hughes    }
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
402