1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License. You may obtain a copy of the License at 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage tests.api.java.io; 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.PipedReader; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.PipedWriter; 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Arrays; 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2598fd0bafe7f75dce1dff5bd4748d7113f52a023dJorg Pleumannimport dalvik.annotation.TestLevel; 2698fd0bafe7f75dce1dff5bd4748d7113f52a023dJorg Pleumannimport dalvik.annotation.TestTargetClass; 2798fd0bafe7f75dce1dff5bd4748d7113f52a023dJorg Pleumannimport dalvik.annotation.TestTargetNew; 2898fd0bafe7f75dce1dff5bd4748d7113f52a023dJorg Pleumann 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(PipedWriter.class) 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class PipedWriterTest extends junit.framework.TestCase { 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static final String testString = "Lorem ipsum..."; 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static final int testLength = testString.length(); 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static class PReader implements Runnable { 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public PipedReader pr; 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public char[] buf; 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public PReader(PipedWriter pw) { 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pr = new PipedReader(pw); 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("Exception setting up reader: " 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + e.toString()); 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public PReader(PipedReader pr) { 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.pr = pr; 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* public void run() { 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int r = 0; 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < buf.length; i++) { 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project r = pr.read(); 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (r == -1) 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project break; 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf[i] = (char) r; 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (Exception e) { 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("Exception reading (" 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + Thread.currentThread().getName() + "): " 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + e.toString()); 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } */ 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void run() { 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (true) { 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Thread.sleep(1000); 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Thread.yield(); 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InterruptedException e) { 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String read(int nbytes) { 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf = new char[nbytes]; 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pr.read(buf, 0, nbytes); 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new String(buf); 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("Exception reading (" 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + Thread.currentThread().getName() + "): " 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + e.toString()); 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return "ERROR"; 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Thread readerThread; 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PReader reader; 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PipedWriter pw; 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project char[] testBuf; 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.io.PipedWriter#PipedWriter() 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "PipedWriter", 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_Constructor() { 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw = new PipedWriter(); 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull(pw); 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.close(); 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Unexpeceted IOException."); 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.io.PipedWriter#PipedWriter(java.io.PipedReader) 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "PipedWriter", 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.io.PipedReader.class} 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_ConstructorLjava_io_PipedReader() throws Exception { 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PipedReader rd = new PipedReader(); 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw = new PipedWriter(rd); 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (Exception e) { 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Test 1: Construtor failed:" + e.getMessage()); 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project readerThread = new Thread(reader = new PReader(rd), "Constructor(Reader)"); 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project readerThread.start(); 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.write(testBuf); 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (Exception e) { 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Test 2: Could not write to the constructed writer: " 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + e.getMessage()); 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.close(); 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Test 3: Incorrect character string received.", testString, 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project reader.read(testLength)); 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rd = new PipedReader(new PipedWriter()); 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw = new PipedWriter(rd); 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Test 4: IOException expected because the reader is already connected."); 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Expected. 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.io.PipedWriter#close() 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "close", 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_close() throws Exception { 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PipedReader rd = new PipedReader(); 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw = new PipedWriter(rd); 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project reader = new PReader(rd); 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.close(); 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Test 1: Unexpected IOException: " + e.getMessage()); 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.io.PipedWriter#connect(java.io.PipedReader) 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "connect", 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.io.PipedReader.class} 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_connectLjava_io_PipedReader() throws Exception { 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PipedReader rd = new PipedReader(); 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw = new PipedWriter(); 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.connect(rd); 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (Exception e) { 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Test 1: Unexpected exception when connecting: " + 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project e.getLocalizedMessage()); 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project readerThread = new Thread(reader = new PReader(rd), "connect"); 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project readerThread.start(); 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.write(testBuf); 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Test 2: Unexpected IOException when writing after connecting."); 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Test 3: Incorrect character string received.", testString, 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project reader.read(testLength)); 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.connect(new PipedReader()); 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Test 4: IOException expected when reconnecting the writer."); 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Expected. 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.io.PipedWriter#flush() 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.SUFFICIENT, 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "No IOException checking because it is never thrown in the source code.", 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "flush", 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_flush() throws Exception { 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Test for method void java.io.PipedWriter.flush() 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw = new PipedWriter(); 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project readerThread = new Thread(reader = new PReader(pw), "flush"); 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project readerThread.start(); 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.write(testBuf); 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.flush(); 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Test 1: Flush failed. ", testString, 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project reader.read(testLength)); 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.io.PipedWriter#write(char[], int, int) 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "write", 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {char[].class, int.class, int.class} 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_write$CII() throws Exception { 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw = new PipedWriter(); 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.write(testBuf, 0, 5); 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Test 1: IOException expected."); 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Expected. 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw = new PipedWriter(new PipedReader()); 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.write(testBuf, -1, 1); 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Test 2: IndexOutOfBoundsException expected."); 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IndexOutOfBoundsException e) { 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Expected. 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.write(testBuf, 0, -1); 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Test 3: IndexOutOfBoundsException expected."); 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IndexOutOfBoundsException e) { 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Expected. 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.write(testBuf, 5, testString.length()); 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Test 4: IndexOutOfBoundsException expected."); 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IndexOutOfBoundsException e) { 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Expected. 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.close(); 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw = new PipedWriter(); 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project readerThread = new Thread(reader = new PReader(pw), "writeCII"); 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project readerThread.start(); 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.write(testBuf, 0, testLength); 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.close(); 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project reader.read(testLength); 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("Test 5: Characters read do not match the characters written.", 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Arrays.equals( testBuf, reader.buf)); 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Test 5: Unexpected IOException: " + e.getMessage()); 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project readerThread.interrupt(); 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.write(testBuf, 0, 5); 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Test 6: IOException expected."); 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Expected. 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project reader.pr.close(); 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.write(testBuf, 0, 5); 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Test 7: IOException expected."); 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Expected. 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.io.PipedWriter#write(char[],int,int) 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "write", 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {char[].class, int.class, int.class} 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_write$CII_MultiThread() throws Exception { 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final PipedReader pr = new PipedReader(); 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final PipedWriter pw = new PipedWriter(); 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // test if writer recognizes dead reader 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pr.connect(pw); 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project class WriteRunnable implements Runnable { 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean pass = false; 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean readerAlive = true; 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void run() { 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.write(1); 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (readerAlive) { 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // wait the reader thread dead 33598fd0bafe7f75dce1dff5bd4748d7113f52a023dJorg Pleumann Thread.sleep(100); 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // should throw exception since reader thread 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // is now dead 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project char[] buf = new char[10]; 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.write(buf, 0, 10); 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pass = true; 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //ignore 34798fd0bafe7f75dce1dff5bd4748d7113f52a023dJorg Pleumann } catch (InterruptedException e) { 34898fd0bafe7f75dce1dff5bd4748d7113f52a023dJorg Pleumann //ignore 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project WriteRunnable writeRunnable = new WriteRunnable(); 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Thread writeThread = new Thread(writeRunnable); 354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project class ReadRunnable implements Runnable { 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean pass; 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void run() { 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pr.read(); 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pass = true; 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //ignore 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ReadRunnable readRunnable = new ReadRunnable(); 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Thread readThread = new Thread(readRunnable); 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project writeThread.start(); 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project readThread.start(); 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (readThread.isAlive()) { 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //wait the reader thread dead 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project writeRunnable.readerAlive = false; 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("reader thread failed to read", readRunnable.pass); 375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (writeThread.isAlive()) { 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //wait the writer thread dead 377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("writer thread failed to recognize dead reader", 379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project writeRunnable.pass); 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.io.PipedWriter#write(int) 384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "write", 389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {int.class} 390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_writeI() throws Exception { 392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Test for method void java.io.PipedWriter.write(int) 393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw = new PipedWriter(); 395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.write(42); 398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Test 1: IOException expected."); 399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Expected. 401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project readerThread = new Thread(reader = new PReader(pw), "writeI"); 404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project readerThread.start(); 405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.write(1); 406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.write(2); 407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.write(3); 408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.close(); 409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project reader.read(3); 410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("Test 2: The charaacters read do not match the characters written: " + 411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (int) reader.buf[0] + " " + (int) reader.buf[1] + " " + (int) reader.buf[2], 412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project reader.buf[0] == 1 && reader.buf[1] == 2 && reader.buf[2] == 3); 413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.io.PipedWriter#write(int) 417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "write", 422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {int.class} 423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_writeI_MultiThread() throws IOException { 425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final PipedReader pr = new PipedReader(); 426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final PipedWriter pw = new PipedWriter(); 427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // test if writer recognizes dead reader 428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pr.connect(pw); 429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project class WriteRunnable implements Runnable { 431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean pass = false; 432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean readerAlive = true; 433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void run() { 434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.write(1); 436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (readerAlive) { 437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // wait the reader thread dead 43898fd0bafe7f75dce1dff5bd4748d7113f52a023dJorg Pleumann Thread.sleep(100); 439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // should throw exception since reader thread 442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // is now dead 443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.write(1); 444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pass = true; 446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //ignore 44998fd0bafe7f75dce1dff5bd4748d7113f52a023dJorg Pleumann } catch (InterruptedException e) { 45098fd0bafe7f75dce1dff5bd4748d7113f52a023dJorg Pleumann //ignore 451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project WriteRunnable writeRunnable = new WriteRunnable(); 455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Thread writeThread = new Thread(writeRunnable); 456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project class ReadRunnable implements Runnable { 457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean pass; 458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void run() { 459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pr.read(); 461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pass = true; 462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //ignore 464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ReadRunnable readRunnable = new ReadRunnable(); 468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Thread readThread = new Thread(readRunnable); 469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project writeThread.start(); 470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project readThread.start(); 471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (readThread.isAlive()) { 472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //wait the reader thread dead 473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project writeRunnable.readerAlive = false; 475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("reader thread failed to read", readRunnable.pass); 476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (writeThread.isAlive()) { 477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //wait the writer thread dead 478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("writer thread failed to recognize dead reader", 480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project writeRunnable.pass); 481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void setUp() throws Exception { 484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super.setUp(); 485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testBuf = new char[testLength]; 486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testString.getChars(0, testLength, testBuf, 0); 487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void tearDown() throws Exception { 490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (readerThread != null) { 492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project readerThread.interrupt(); 493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (Exception ignore) {} 495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (pw != null) { 497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pw.close(); 498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (Exception ignore) {} 500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super.tearDown(); 501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 503