1cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath/*
2cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  Licensed to the Apache Software Foundation (ASF) under one or more
3cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  contributor license agreements.  See the NOTICE file distributed with
4cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  this work for additional information regarding copyright ownership.
5cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  The ASF licenses this file to You under the Apache License, Version 2.0
6cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  (the "License"); you may not use this file except in compliance with
7cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  the License.  You may obtain a copy of the License at
8cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *
9cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *     http://www.apache.org/licenses/LICENSE-2.0
10cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *
11cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  Unless required by applicable law or agreed to in writing, software
12cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  distributed under the License is distributed on an "AS IS" BASIS,
13cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  See the License for the specific language governing permissions and
15cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  limitations under the License.
16cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */
17cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
18ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamathpackage org.apache.harmony.tests.java.io;
19cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
20cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.IOException;
21cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.PipedReader;
22cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.PipedWriter;
23cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
24cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport junit.framework.TestCase;
25cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
26cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathpublic class PipedReaderTest extends TestCase {
27cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
28cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static class PWriter implements Runnable {
29cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public PipedWriter pw;
30cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
31cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public PWriter(PipedReader reader) {
32cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
33cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                pw = new PipedWriter(reader);
34cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (Exception e) {
35cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                System.out.println("Couldn't create writer");
36cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
37cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
38cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
39cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public PWriter() {
40cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pw = new PipedWriter();
41cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
42cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
43cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public void run() {
44cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
45cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                char[] c = new char[11];
46cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                "Hello World".getChars(0, 11, c, 0);
47cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                pw.write(c);
48cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Thread.sleep(10000);
49cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (InterruptedException e) {
50cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (Exception e) {
51cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                System.out.println("Exception occurred: " + e.toString());
52cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
53cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
54cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
55cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
56cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    PipedReader preader;
57cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
58cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    PWriter pwriter;
59cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
60cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    Thread t;
61cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
62cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
63cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedReader#PipedReader()
64cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
65cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_Constructor() {
66cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Used in test
67cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
68cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
69cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
70cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedReader#PipedReader(java.io.PipedWriter)
71cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
72cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_ConstructorLjava_io_PipedWriter() throws IOException {
73cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        preader = new PipedReader(new PipedWriter());
74cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
75cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
76cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
77cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedReader#PipedReader(java.io.PipedWriter,
78cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     *int)
79cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * @since 1.6
80cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
81cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_Constructor_LPipedWriter_I() throws Exception {
82cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method java.io.PipedReader(java.io.PipedWriter,
83cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // int)
84cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
85cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            preader = new PipedReader(null, -1);
86cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw IllegalArgumentException"); //$NON-NLS-1$
87cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IllegalArgumentException e) {
88cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
89cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
90cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
91cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
92cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            preader = new PipedReader(null, 0);
93cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw IllegalArgumentException"); //$NON-NLS-1$
94cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IllegalArgumentException e) {
95cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
96cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
97cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
98cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
99cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
100cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedReader#PipedReader(int)
101cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * @since 1.6
102cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
103cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_Constructor_I() throws Exception {
104cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method java.io.PipedReader(int)
105cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
106cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            preader = new PipedReader(-1);
107cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw IllegalArgumentException"); //$NON-NLS-1$
108cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IllegalArgumentException e) {
109cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
110cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
111cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
112cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
113cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            preader = new PipedReader(0);
114cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw IllegalArgumentException"); //$NON-NLS-1$
115cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IllegalArgumentException e) {
116cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
117cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
118cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
119cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
120cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
121cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedReader#close()
122cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
123cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_close() throws Exception {
124cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        char[] c = null;
125cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        preader = new PipedReader();
126cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        t = new Thread(new PWriter(preader), "");
127cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        t.start();
128cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Thread.sleep(500); // Allow writer to start
129cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        c = new char[11];
130cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        preader.read(c, 0, 11);
131cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        preader.close();
132cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Read incorrect chars", "Hello World", new String(c));
133cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
134cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
135cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
136cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedReader#connect(java.io.PipedWriter)
137cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
138cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_connectLjava_io_PipedWriter() throws Exception {
139cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        char[] c = null;
140cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
141cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        preader = new PipedReader();
142cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        t = new Thread(pwriter = new PWriter(), "");
143cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        preader.connect(pwriter.pw);
144cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        t.start();
145cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Thread.sleep(500); // Allow writer to start
146cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        c = new char[11];
147cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        preader.read(c, 0, 11);
148cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
149cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Read incorrect chars", "Hello World", new String(c));
150cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
151cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            preader.connect(pwriter.pw);
152cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Failed to throw exception connecting to pre-connected reader");
153cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
154cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
155cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
156cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
157cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
158cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
159cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedReader#read()
160cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
161cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_read() throws Exception {
162cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        char[] c = null;
163cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        preader = new PipedReader();
164cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        t = new Thread(new PWriter(preader), "");
165cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        t.start();
166cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Thread.sleep(500); // Allow writer to start
167cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        c = new char[11];
168cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int i = 0; i < c.length; i++) {
169cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            c[i] = (char) preader.read();
170cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
171cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Read incorrect chars", "Hello World", new String(c));
172cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
173cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
174cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
175cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedReader#read(char[], int, int)
176cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
177cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_read$CII() throws Exception {
178cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        char[] c = null;
179cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        preader = new PipedReader();
180cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        t = new Thread(new PWriter(preader), "");
181cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        t.start();
182cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Thread.sleep(500); // Allow writer to start
183cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        c = new char[11];
184cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        int n = 0;
185cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        int x = n;
186cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        while (x < 11) {
187cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            n = preader.read(c, x, 11 - x);
188cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            x = x + n;
189cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
190cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Read incorrect chars", "Hello World", new String(c));
191cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
192cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            preader.close();
193cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            preader.read(c, 8, 7);
194cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Failed to throw exception reading from closed reader");
195cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
196cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
197cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
198cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
199cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
200cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_read$CII_ExceptionPriority() throws IOException {
201cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Regression for HARMONY-387
202cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedWriter pw = new PipedWriter();
203cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedReader obj = null;
204cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
205cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj = new PipedReader(pw);
206cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj.read(new char[0], (int) 0, (int) -1);
207cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
208cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException expected) {
209cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
210cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
211cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
212cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_read$CII_ExceptionPriority2() throws IOException {
213cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedWriter pw = new PipedWriter();
214cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedReader obj = null;
215cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
216cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj = new PipedReader(pw);
217cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj.read(new char[0], (int) -1, (int) 0);
218cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
219cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException expected) {
220cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
221cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
222cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
223cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_read$CII_ExceptionPriority3() throws IOException {
224cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedWriter pw = new PipedWriter();
225cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedReader obj = null;
226cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
227cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj = new PipedReader(pw);
228cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj.read(new char[0], (int) -1, (int) -1);
229cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
230cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException expected) {
231cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
232cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
233cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
234cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_read$CII_ExceptionPriority4() throws IOException {
235cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedWriter pw = new PipedWriter();
236cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedReader pr = new PipedReader(pw);
237cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
238cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pr.read(null, -1, 1);
239cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
240cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException expected) {
241cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException expected) {
242cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
243cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
244cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
245cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_read_$CII_IOException() throws IOException {
246cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedWriter pw = new PipedWriter();
247cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedReader pr = new PipedReader(pw);
248cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pr.close();
249cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
250cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pr.read(null, 0, 10);
251cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throws IOException"); //$NON-NLS-1$
252cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
253cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
254cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } finally {
255cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pw = null;
256cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pr = null;
257cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
258cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
259cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pr = new PipedReader();
260cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pr.close();
261cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
262cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pr.read(null, 0, 10);
263cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throws IOException"); //$NON-NLS-1$
264cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
265cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
266cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } finally {
267cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pr = null;
268cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
269cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
270cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw = new PipedWriter();
271cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pr = new PipedReader(pw);
272cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pr.close();
273cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
274cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pr.read(new char[10], -1, 0);
275cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throws IOException"); //$NON-NLS-1$
276cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
277cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
278cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } finally {
279cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pw = null;
280cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pr = null;
281cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
282cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
283cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw = new PipedWriter();
284cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pr = new PipedReader(pw);
285cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pr.close();
286cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
287cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pr.read(new char[10], 0, -1);
288cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throws IOException"); //$NON-NLS-1$
289cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
290cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
291cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } finally {
292cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pw = null;
293cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pr = null;
294cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
295cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
296cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw = new PipedWriter();
297cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pr = new PipedReader(pw);
298cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pr.close();
299cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
300cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pr.read(new char[10], 1, 10);
301cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throws IOException"); //$NON-NLS-1$
302cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
303cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
304cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } finally {
305cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pw = null;
306cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pr = null;
307cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
308cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
309cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw = new PipedWriter();
310cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pr = new PipedReader(pw);
311cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pr.close();
312cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
313cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pr.read(new char[0], -1, -1);
314cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("should throw IOException"); //$NON-NLS-1$
315cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
316cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
317cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } finally {
318cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pw = null;
319cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pr = null;
320cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
321cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
322cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw = new PipedWriter();
323cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pr = new PipedReader(pw);
324cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pr.close();
325cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
326cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pr.read(null, 0, 1);
327cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("should throw IOException"); //$NON-NLS-1$
328cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
329cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
330cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } finally {
331cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pw = null;
332cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pr = null;
333cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
334cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
335cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw = new PipedWriter();
336cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pr = new PipedReader(pw);
337cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
338cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pr.read(null, 0, -1);
339cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("should throw NullPointerException"); //$NON-NLS-1$
340cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
341cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
342cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } finally {
343cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pw = null;
344cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pr = null;
345cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
346cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
347cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw = new PipedWriter();
348cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pr = new PipedReader(pw);
349cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
350cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pr.read(new char[10], 11, 0);
351cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("should throw IndexOutOfBoundsException"); //$NON-NLS-1$
352cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException e) {
353cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
354cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } finally {
355cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pw = null;
356cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pr = null;
357cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
358cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
359cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw = new PipedWriter();
360cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pr = new PipedReader(pw);
361cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
362cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pr.read(null, 1, 0);
363cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("should throw NullPointerException"); //$NON-NLS-1$
364cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
365cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
366cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } finally {
367cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pw = null;
368cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pr = null;
369cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
370cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
371cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
372cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
373cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedReader#ready()
374cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
375cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_ready() throws Exception {
376cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        char[] c = null;
377cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        preader = new PipedReader();
378cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        t = new Thread(new PWriter(preader), "");
379cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        t.start();
380cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Thread.sleep(500); // Allow writer to start
381cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Reader should be ready", preader.ready());
382cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        c = new char[11];
383cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int i = 0; i < c.length; i++)
384cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            c[i] = (char) preader.read();
385cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertFalse("Reader should not be ready after reading all chars",
386cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                preader.ready());
387cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
388cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
389cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
390cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * Tears down the fixture, for example, close a network connection. This
391cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * method is called after a test is executed.
392cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
393cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected void tearDown() throws Exception {
394cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        if (t != null) {
395cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            t.interrupt();
396cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
397cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        super.tearDown();
398cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
399cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath}
400