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