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