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