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.PipedInputStream;
22cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.PipedOutputStream;
23cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.UnsupportedEncodingException;
24cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
25cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport junit.framework.TestCase;
26cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
27cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathpublic class PipedOutputStreamTest extends TestCase {
28cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
29cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static class PReader implements Runnable {
30cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedInputStream reader;
31cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
32cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public PipedInputStream getReader() {
33cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return reader;
34cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
35cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
36cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public PReader(PipedOutputStream out) {
37cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
38cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                reader = new PipedInputStream(out);
39cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (Exception e) {
40cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                System.out.println("Couldn't start reader");
41cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
42cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
43cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
44cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public int available() {
45cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
46cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return reader.available();
47cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (Exception e) {
48cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return -1;
49cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
50cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
51cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
52cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public void run() {
53cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
54cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                while (true) {
55cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    Thread.sleep(1000);
56cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    Thread.yield();
57cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
58cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (InterruptedException e) {
59cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
60cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
61cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
62cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public String read(int nbytes) {
63cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            byte[] buf = new byte[nbytes];
64cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
65cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                reader.read(buf, 0, nbytes);
66cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return new String(buf, "UTF-8");
67cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (IOException e) {
68cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                System.out.println("Exception reading info");
69cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                return "ERROR";
70cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
71cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
72cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
73cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
74cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    Thread rt;
75cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
76cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    PReader reader;
77cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
78cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    PipedOutputStream out;
79cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
80cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
81cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedOutputStream#PipedOutputStream()
82cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
83cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_Constructor() {
84cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Used in tests
85cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
86cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
87cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
88cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedOutputStream#PipedOutputStream(java.io.PipedInputStream)
89cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
90cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_ConstructorLjava_io_PipedInputStream() throws Exception {
91cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        out = new PipedOutputStream(new PipedInputStream());
92cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        out.write('b');
93cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
94cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
95cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
96cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedOutputStream#close()
97cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
98cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_close() throws Exception {
99cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        out = new PipedOutputStream();
100cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        rt = new Thread(reader = new PReader(out));
101cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        rt.start();
102cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        out.close();
103cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
104cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
105cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
106cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedOutputStream#connect(java.io.PipedInputStream)
107cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
108cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_connectLjava_io_PipedInputStream_Exception()
109cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            throws IOException {
110cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        out = new PipedOutputStream();
111cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        out.connect(new PipedInputStream());
112cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
113cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            out.connect(null);
114cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("should throw NullPointerException"); //$NON-NLS-1$
115cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
116cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
117cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
118cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
119cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
120cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
121cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedOutputStream#connect(java.io.PipedInputStream)
122cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
123cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_connectLjava_io_PipedInputStream() {
124cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
125cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            out = new PipedOutputStream();
126cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            rt = new Thread(reader = new PReader(out));
127cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            rt.start();
128cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            out.connect(new PipedInputStream());
129cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Failed to throw exception attempting connect on already connected stream");
130cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
131cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
132cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
133cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
134cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
135cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
136cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedOutputStream#flush()
137cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
138cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_flush() throws IOException, UnsupportedEncodingException {
139cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        out = new PipedOutputStream();
140cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        rt = new Thread(reader = new PReader(out));
141cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        rt.start();
142cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        out.write("HelloWorld".getBytes("UTF-8"), 0, 10);
143cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Bytes written before flush", reader.available() != 0);
144cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        out.flush();
145cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Wrote incorrect bytes", "HelloWorld", reader.read(10));
146cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
147cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
148cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
149cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedOutputStream#write(byte[], int, int)
150cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
151cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_write$BII() throws IOException, UnsupportedEncodingException {
152cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        out = new PipedOutputStream();
153cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        rt = new Thread(reader = new PReader(out));
154cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        rt.start();
155cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        out.write("HelloWorld".getBytes("UTF-8"), 0, 10);
156cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        out.flush();
157cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Wrote incorrect bytes", "HelloWorld", reader.read(10));
158cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
159cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
160cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
161cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedOutputStream#write(byte[], int, int) Regression for
162cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * HARMONY-387
163cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
164cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_write$BII_2() throws IOException {
165cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedInputStream pis = new PipedInputStream();
166cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        PipedOutputStream pos = null;
167cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
168cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pos = new PipedOutputStream(pis);
169cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pos.write(new byte[0], -1, -1);
170cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
171cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException expected) {
172cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
173cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
174cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Regression for HARMONY-4311
175cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
176cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pis = new PipedInputStream();
177cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            PipedOutputStream out = new PipedOutputStream(pis);
178cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            out.write(null, -10, 10);
179cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("should throw NullPointerException.");
180cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
181cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
182cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
183cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
184cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pis = new PipedInputStream();
185cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pos = new PipedOutputStream(pis);
186cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pos.close();
187cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pos.write(new byte[0], 0, 0);
188cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
189cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
190cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pis = new PipedInputStream();
191cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pos = new PipedOutputStream(pis);
192cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pos.write(new byte[0], -1, 0);
193cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IndexOutOfBoundsException expected");
194cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException t) {
195cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            //expected
196cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
197cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
198cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
199cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pis = new PipedInputStream();
200cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pos = new PipedOutputStream(pis);
201cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pos.write(null, -10, 0);
202cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("should throw NullPointerException.");
203cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
204cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
205cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
206cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
207cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
208cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
209cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
210cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PipedOutputStream#write(int)
211cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
212cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_writeI() throws IOException {
213cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        out = new PipedOutputStream();
214cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        rt = new Thread(reader = new PReader(out));
215cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        rt.start();
216cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        out.write('c');
217cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        out.flush();
218cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Wrote incorrect byte", "c", reader.read(1));
219cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
220cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
221cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
222cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * Tears down the fixture, for example, close a network connection. This
223cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * method is called after a test is executed.
224cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
225cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @Override
226cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected void tearDown() {
227cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        if (rt != null) {
228cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            rt.interrupt();
229cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
230cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
231cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath}
232