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 Kamathpublic class PipedWriterTest extends junit.framework.TestCase {
25cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
26cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static class PReader implements Runnable {
27cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public PipedReader pr;
28cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
29cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public char[] buf = new char[10];
30cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
31cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public PReader(PipedWriter pw) {
32cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
33cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                pr = new PipedReader(pw);
34cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (IOException e) {
350048bf7983e68d6d99b7b1332db8a2239de50949Narayan Kamath                fail();
36cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
37cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
38cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
39cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public PReader(PipedReader pr) {
40cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            this.pr = pr;
41cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
42cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
43cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public void run() {
44cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
45cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                int r = 0;
46cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                for (int i = 0; i < buf.length; i++) {
47cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    r = pr.read();
48cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    if (r == -1)
49cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        break;
50cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    buf[i] = (char) r;
51cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
52cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (Exception e) {
530048bf7983e68d6d99b7b1332db8a2239de50949Narayan Kamath                fail();
54cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
55cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
56cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
57cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
58cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    Thread rdrThread;
59cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
60cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    PReader reader;
61cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
62cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    PipedWriter pw;
63cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
64cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
65cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedWriter#PipedWriter()
66cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
67cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_Constructor() {
68cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method java.io.PipedWriter()
69cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Used in tests
70cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
71cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
72cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
73cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedWriter#PipedWriter(java.io.PipedReader)
74cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
75cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_ConstructorLjava_io_PipedReader() throws Exception {
76cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method java.io.PipedWriter(java.io.PipedReader)
77cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        char[] buf = new char[10];
78cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        "HelloWorld".getChars(0, 10, buf, 0);
79cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedReader rd = new PipedReader();
80cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw = new PipedWriter(rd);
81cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        rdrThread = new Thread(reader = new PReader(rd), "Constructor(Reader)");
82cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        rdrThread.start();
83cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw.write(buf);
84cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw.close();
850048bf7983e68d6d99b7b1332db8a2239de50949Narayan Kamath        rdrThread.join();
86cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Failed to construct writer", "HelloWorld", new String(
87cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                reader.buf));
88cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
89cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
90cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
91cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedWriter#close()
92cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
93cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_close() throws Exception {
94cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.PipedWriter.close()
95cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        char[] buf = new char[10];
96cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        "HelloWorld".getChars(0, 10, buf, 0);
97cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedReader rd = new PipedReader();
98cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw = new PipedWriter(rd);
99cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        reader = new PReader(rd);
100cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw.close();
101cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
102cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pw.write(buf);
103cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should have thrown exception when attempting to write to closed writer.");
104cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (Exception e) {
105cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // correct
106cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
107cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
108cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
109cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
110cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedWriter#connect(java.io.PipedReader)
111cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
112cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_connectLjava_io_PipedReader() throws Exception {
113cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.PipedWriter.connect(java.io.PipedReader)
114cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        char[] buf = new char[10];
115cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        "HelloWorld".getChars(0, 10, buf, 0);
116cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedReader rd = new PipedReader();
117cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw = new PipedWriter();
118cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw.connect(rd);
119cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        rdrThread = new Thread(reader = new PReader(rd), "connect");
120cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        rdrThread.start();
121cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw.write(buf);
122cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw.close();
1230048bf7983e68d6d99b7b1332db8a2239de50949Narayan Kamath        rdrThread.join();
124cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Failed to write correct chars", "HelloWorld", new String(
125cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                reader.buf));
126cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
127cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
128cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
129cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedWriter#flush()
130cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
131cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_flush() throws Exception {
132cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.PipedWriter.flush()
133cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        char[] buf = new char[10];
134cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        "HelloWorld".getChars(0, 10, buf, 0);
135cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw = new PipedWriter();
136cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        rdrThread = new Thread(reader = new PReader(pw), "flush");
137cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        rdrThread.start();
138cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw.write(buf);
139cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw.flush();
1400048bf7983e68d6d99b7b1332db8a2239de50949Narayan Kamath        rdrThread.join();
141cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Failed to flush chars", "HelloWorld", new String(
142cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                reader.buf));
143cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
144cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
145cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
146cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedWriter#flush()
147cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * Regression HARMONY-6293
148cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
149cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_flushAfterClose() throws Exception {
150cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
151cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedReader pr = new PipedReader();
152cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw = new PipedWriter(pr);
153cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw.close();
154cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
155cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pw.flush();
156cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("should throw IOException");
157cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
158cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
159cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
160cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
161cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pr = new PipedReader();
162cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw = new PipedWriter(pr);
163cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pr.close();
164cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
165cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
166cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pw.flush();
167cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("should throw IOException");
168cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
169cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
170cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
171cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
172cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
173cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
174cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedWriter#write(char[], int, int)
175cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
176cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_write$CII() throws Exception {
177cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.PipedWriter.write(char [], int, int)
178cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        char[] buf = new char[10];
179cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        "HelloWorld".getChars(0, 10, buf, 0);
180cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw = new PipedWriter();
181cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        rdrThread = new Thread(reader = new PReader(pw), "writeCII");
182cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        rdrThread.start();
183cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw.write(buf, 0, 10);
184cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw.close();
1850048bf7983e68d6d99b7b1332db8a2239de50949Narayan Kamath        rdrThread.join();
186cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Failed to write correct chars", "HelloWorld", new String(
187cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                reader.buf));
188cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
189cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
190cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
191cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedWriter#write(char[], int, int) Regression for
192cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * HARMONY-387
193cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
194cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_write$CII_2() throws IOException {
195cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedReader pr = new PipedReader();
196cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedWriter obj = null;
197cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
198cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj = new java.io.PipedWriter(pr);
199cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj.write(new char[0], (int) 0, (int) -1);
200cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IndexOutOfBoundsException expected");
201cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException expected) {
202cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
203cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
204cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
205cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
206cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedWriter#write(char[], int, int)
207cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
208cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_write$CII_3() throws IOException {
209cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedReader pr = new PipedReader();
210cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedWriter obj = null;
211cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
212cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj = new java.io.PipedWriter(pr);
213cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj.write(new char[0], (int) -1, (int) 0);
214cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
215cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException expected) {
216cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
217cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
218cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
219cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
220cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedWriter#write(char[], int, int)
221cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
222cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_write$CII_4() throws IOException {
223cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedReader pr = new PipedReader();
224cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedWriter obj = null;
225cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
226cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj = new java.io.PipedWriter(pr);
227cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj.write(new char[0], (int) -1, (int) -1);
228cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
229cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException expected) {
230cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
231cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
232cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
233cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
234cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedWriter#write(char[], int, int)
235cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
236cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_write$CII_5() throws IOException {
237cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedReader pr = new PipedReader();
238cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedWriter obj = null;
239cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
240cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj = new PipedWriter(pr);
241cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj.write((char[]) null, (int) -1, (int) 0);
242cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("NullPointerException expected");
243cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException t) {
244cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("NullPointerException expected");
245cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException t) {
246cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
247cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
248cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
249cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
250cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedWriter#write(char[], int, int)
251cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
252cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_write$CII_6() throws IOException {
253cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedReader pr = new PipedReader();
254cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedWriter obj = null;
255cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
256cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj = new PipedWriter(pr);
257cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj.write((char[]) null, (int) -1, (int) -1);
258cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("NullPointerException expected");
259cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException t) {
260cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("NullPointerException expected");
261cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException t) {
262cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
263cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
264cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
265cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
266cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedWriter#write(char[], int, int)
267cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
268cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_write$CII_notConnected() throws IOException {
269cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Regression test for Harmony-2404
270cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // create not connected pipe
271cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedWriter obj = new PipedWriter();
272cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
273cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // char array is null
274cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
275cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj.write((char[]) null, 0, 1);
276cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException expected");
277cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException ioe) {
278cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
279cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
280cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
281cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // negative offset
282cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
283cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj.write(new char[] { 1 }, -10, 1);
284cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException expected");
285cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException ioe) {
286cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
287cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
288cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
289cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // wrong offset
290cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
291cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj.write(new char[] { 1 }, 10, 1);
292cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException expected");
293cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException ioe) {
294cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
295cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
296cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
297cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // negative length
298cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
299cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj.write(new char[] { 1 }, 0, -10);
300cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException expected");
301cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException ioe) {
302cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
303cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
304cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
305cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // all valid params
306cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
307cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            obj.write(new char[] { 1, 1 }, 0, 1);
308cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException expected");
309cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException ioe) {
310cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
311cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
312cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
313cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
314cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
315cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedWriter#write(int)
316cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
317cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_write_I_MultiThread() throws IOException {
318cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        final PipedReader pr = new PipedReader();
319cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        final PipedWriter pw = new PipedWriter();
320cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // test if writer recognizes dead reader
321cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pr.connect(pw);
322cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
323cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        class WriteRunnable implements Runnable {
324cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            boolean pass = false;
325cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            volatile boolean readerAlive = true;
326cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
327cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public void run() {
328cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                try {
329cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    pw.write(1);
330cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    while (readerAlive) {
331cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        // wait the reader thread dead
332cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    }
333cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    try {
334cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        // should throw exception since reader thread
335cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        // is now dead
336cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        pw.write(1);
337cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    } catch (IOException e) {
338cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        pass = true;
339cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    }
340cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                } catch (IOException e) {
341cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    //ignore
342cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
343cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
344cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
345cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        WriteRunnable writeRunnable = new WriteRunnable();
346cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Thread writeThread = new Thread(writeRunnable);
347cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        class ReadRunnable implements Runnable {
348cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            boolean pass;
349cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
350cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public void run() {
351cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                try {
352cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    pr.read();
353cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    pass = true;
354cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                } catch (IOException e) {
355cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    //ignore
356cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
357cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
358cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
359cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        ReadRunnable readRunnable = new ReadRunnable();
360cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Thread readThread = new Thread(readRunnable);
361cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writeThread.start();
362cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        readThread.start();
363cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        while (readThread.isAlive()) {
364cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            //wait the reader thread dead
365cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
366cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writeRunnable.readerAlive = false;
367cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("reader thread failed to read", readRunnable.pass);
368cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        while (writeThread.isAlive()) {
369cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            //wait the writer thread dead
370cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
371cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("writer thread failed to recognize dead reader",
372cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                writeRunnable.pass);
373cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
374cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
375cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
376cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedWriter#write(char[], int, int)
377cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
378cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_write_$CII_MultiThread() throws Exception {
379cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        final PipedReader pr = new PipedReader();
380cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        final PipedWriter pw = new PipedWriter();
381cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
382cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // test if writer recognizes dead reader
383cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pr.connect(pw);
384cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
385cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        class WriteRunnable implements Runnable {
386cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            boolean pass = false;
387cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
388cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            volatile boolean readerAlive = true;
389cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
390cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public void run() {
391cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                try {
392cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    pw.write(1);
393cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    while (readerAlive) {
394cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        // wait the reader thread dead
395cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    }
396cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    try {
397cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        // should throw exception since reader thread
398cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        // is now dead
399cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        char[] buf = new char[10];
400cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        pw.write(buf, 0, 10);
401cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    } catch (IOException e) {
402cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        pass = true;
403cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    }
404cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                } catch (IOException e) {
405cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    //ignore
406cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
407cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
408cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
409cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        WriteRunnable writeRunnable = new WriteRunnable();
410cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Thread writeThread = new Thread(writeRunnable);
411cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        class ReadRunnable implements Runnable {
412cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            boolean pass;
413cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
414cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public void run() {
415cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                try {
416cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    pr.read();
417cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    pass = true;
418cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                } catch (IOException e) {
419cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    //ignore
420cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
421cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
422cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
423cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        ReadRunnable readRunnable = new ReadRunnable();
424cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Thread readThread = new Thread(readRunnable);
425cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writeThread.start();
426cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        readThread.start();
427cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        while (readThread.isAlive()) {
428cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            //wait the reader thread dead
429cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
430cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writeRunnable.readerAlive = false;
431cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("reader thread failed to read", readRunnable.pass);
432cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        while (writeThread.isAlive()) {
433cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            //wait the writer thread dead
434cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
435cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("writer thread failed to recognize dead reader",
436cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                writeRunnable.pass);
437cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
438cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
439cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
440cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedWriter#write(int)
441cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
442cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_writeI() throws Exception {
443cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.PipedWriter.write(int)
444cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
445cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw = new PipedWriter();
446cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        rdrThread = new Thread(reader = new PReader(pw), "writeI");
447cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        rdrThread.start();
448cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw.write(1);
449cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw.write(2);
450cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw.write(3);
451cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pw.close();
452cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        rdrThread.join(1000);
453cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Failed to write correct chars: " + (int) reader.buf[0]
454cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                + " " + (int) reader.buf[1] + " " + (int) reader.buf[2],
455cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                reader.buf[0] == 1 && reader.buf[1] == 2 && reader.buf[2] == 3);
456cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
457cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
458cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
459cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * Tears down the fixture, for example, close a network connection. This
460cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * method is called after a test is executed.
461cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
462cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected void tearDown() throws Exception {
463cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
464cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            if (rdrThread != null) {
465cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                rdrThread.interrupt();
466cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
467cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (Exception ignore) {
468cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
469cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
470cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            if (pw != null) {
471cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                pw.close();
472cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
473cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (Exception ignore) {
474cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
475cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        super.tearDown();
476cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
477cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath}
478