| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package tests.api.java.io; |
| |
| import dalvik.annotation.TestTargets; |
| import dalvik.annotation.TestLevel; |
| import dalvik.annotation.TestTargetNew; |
| import dalvik.annotation.TestTargetClass; |
| |
| import java.io.IOException; |
| import java.io.PipedReader; |
| import java.io.PipedWriter; |
| |
| @TestTargetClass(PipedReader.class) |
| public class PipedReaderTest extends junit.framework.TestCase { |
| |
| static class PWriter implements Runnable { |
| public PipedWriter pw; |
| |
| public PWriter(PipedReader reader) { |
| try { |
| pw = new PipedWriter(reader); |
| } catch (Exception e) { |
| System.out.println("Couldn't create writer"); |
| } |
| } |
| |
| public PWriter() { |
| pw = new PipedWriter(); |
| } |
| |
| public void run() { |
| try { |
| char[] c = new char[11]; |
| "Hello World".getChars(0, 11, c, 0); |
| pw.write(c); |
| Thread.sleep(10000); |
| } catch (InterruptedException e) { |
| } catch (Exception e) { |
| System.out.println("Exception occurred: " + e.toString()); |
| } |
| } |
| } |
| |
| static class PWriter2 implements Runnable { |
| PipedWriter pw; |
| |
| public boolean keepRunning = true; |
| |
| public void run() { |
| try { |
| pw.write('H'); |
| pw.close(); |
| while (keepRunning) { |
| Thread.sleep(1000); |
| } |
| } catch (Exception e) { |
| e.printStackTrace(System.out); |
| System.out.println("Error while running the writer thread."); |
| } |
| } |
| |
| public PWriter2(PipedWriter writer) { |
| pw = writer; |
| } |
| } |
| |
| PipedReader preader; |
| |
| PWriter pwriter; |
| |
| Thread t; |
| |
| /** |
| * @tests java.io.PipedReader#PipedReader() |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "", |
| method = "PipedReader", |
| args = {} |
| ) |
| public void test_Constructor() { |
| preader = new PipedReader(); |
| assertNotNull(preader); |
| try { |
| preader.close(); |
| } catch (IOException e) { |
| fail("Unexpeceted IOException"); |
| } |
| } |
| |
| /** |
| * @tests java.io.PipedReader#PipedReader(java.io.PipedWriter) |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "", |
| method = "PipedReader", |
| args = {java.io.PipedWriter.class} |
| ) |
| public void test_ConstructorLjava_io_PipedWriter() throws IOException { |
| // Test for method java.io.PipedReader(java.io.PipedWriter) |
| try { |
| preader = new PipedReader(new PipedWriter()); |
| } catch (Exception e) { |
| fail("Test 1: Constructor failed: " + e.getMessage()); |
| } |
| preader.close(); |
| |
| PipedWriter pw = new PipedWriter(new PipedReader()); |
| try { |
| preader = new PipedReader(pw); |
| fail("Test 2: IOException expected because the writer is already connected."); |
| } catch (IOException e) { |
| // Expected. |
| } |
| } |
| |
| /** |
| * @tests java.io.PipedReader#close() |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "No IOException checking because it is never thrown in the source code.", |
| method = "close", |
| args = {} |
| ) |
| public void test_close() throws Exception { |
| // Test for method void java.io.PipedReader.close() |
| char[] c = null; |
| preader = new PipedReader(); |
| t = new Thread(new PWriter(preader), ""); |
| t.start(); |
| Thread.sleep(500); // Allow writer to start |
| c = new char[11]; |
| preader.read(c, 0, 5); |
| preader.close(); |
| |
| try { |
| preader.read(c, 0, 5); |
| fail("IOException expected because the reader is closed."); |
| } catch (IOException e) { |
| // Expected. |
| } |
| } |
| |
| /** |
| * @tests java.io.PipedReader#connect(java.io.PipedWriter) |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "", |
| method = "connect", |
| args = {java.io.PipedWriter.class} |
| ) |
| public void test_connectLjava_io_PipedWriter() throws Exception { |
| // Test for method void java.io.PipedReader.connect(java.io.PipedWriter) |
| char[] c = null; |
| |
| preader = new PipedReader(); |
| t = new Thread(pwriter = new PWriter(), ""); |
| preader.connect(pwriter.pw); |
| t.start(); |
| Thread.sleep(500); // Allow writer to start |
| c = new char[11]; |
| preader.read(c, 0, 11); |
| |
| assertEquals("Test 1: Wrong characters read. ", "Hello World", new String(c)); |
| try { |
| preader.connect(new PipedWriter()); |
| fail("Test 2: IOException expected because the reader is already connected."); |
| } catch (IOException e) { |
| // Expected. |
| } |
| } |
| |
| /** |
| * @tests java.io.PipedReader#read() |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "", |
| method = "read", |
| args = {} |
| ) |
| public void test_read_1() throws Exception { |
| // Test for method int java.io.PipedReader.read() |
| char[] c = null; |
| preader = new PipedReader(); |
| t = new Thread(new PWriter(preader), ""); |
| t.start(); |
| Thread.sleep(500); // Allow writer to start |
| c = new char[11]; |
| for (int i = 0; i < c.length; i++) { |
| c[i] = (char) preader.read(); |
| } |
| assertEquals("Test 1: Wrong characters read. ", "Hello World", new String(c)); |
| |
| try { |
| preader.read(); |
| fail("Test 2: IOException expected since the thread that has " + |
| "written to the pipe is no longer alive."); |
| } catch (IOException e) { |
| // Expected. |
| } |
| |
| preader.close(); |
| try { |
| preader.read(); |
| fail("Test 3: IOException expected."); |
| } catch (IOException e) { |
| // Expected. |
| } |
| } |
| |
| /** |
| * @tests java.io.PipedReader#read() |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "Checks that read() returns -1 if the PipedWriter connectedto this PipedReader is closed.", |
| method = "read", |
| args = {} |
| ) |
| public void test_read_2() throws Exception { |
| Thread writerThread; |
| PipedWriter pw; |
| PWriter2 pwriter; |
| |
| preader = new PipedReader(); |
| pw = new PipedWriter(preader); |
| |
| writerThread = new Thread(pwriter = new PWriter2(pw), "PWriter2"); |
| writerThread.start(); |
| Thread.sleep(500); // Allow writer to start |
| |
| preader.read(); |
| assertEquals("Test 1: No more data indication expected. ", -1, preader.read()); |
| pwriter.keepRunning = false; |
| } |
| |
| /** |
| * @tests java.io.PipedReader#read(char[], int, int) |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "IOException checking missed.", |
| method = "read", |
| args = {char[].class, int.class, int.class} |
| ) |
| public void test_read$CII_1() throws Exception { |
| // Test for method int java.io.PipedReader.read(char [], int, int) |
| char[] c = null; |
| preader = new PipedReader(); |
| t = new Thread(new PWriter(preader), ""); |
| t.start(); |
| Thread.sleep(500); // Allow writer to start |
| c = new char[11]; |
| int n = 0; |
| int x = n; |
| while (x < 11) { |
| n = preader.read(c, x, 11 - x); |
| x = x + n; |
| } |
| assertEquals("Test 1: Wrong characters read. ", "Hello World", new String(c)); |
| |
| preader.close(); |
| try { |
| preader.read(c, 8, 7); |
| fail("Test 2: IOException expected."); |
| } catch (IOException e) { |
| // Expected. |
| } |
| } |
| |
| /** |
| * @tests java.io.PipedReader#read(char[], int, int) |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "", |
| method = "read", |
| args = {char[].class, int.class, int.class} |
| ) |
| public void test_read$CII_Exception() throws IOException{ |
| PipedWriter pw = new PipedWriter(); |
| PipedReader obj = new PipedReader(pw); |
| try { |
| obj.read(new char[10], 0, -1); |
| fail("IndexOutOfBoundsException expected."); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected. |
| } |
| try { |
| obj.read(new char[10], -1, 1); |
| fail("IndexOutOfBoundsException expected."); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected. |
| } |
| try { |
| obj.read(new char[10], 2, 9); |
| fail("IndexOutOfBoundsException expected."); |
| } catch (IndexOutOfBoundsException e) { |
| // Expected. |
| } |
| try { |
| obj.read(null, 0, 1); |
| fail("NullPointerException expected."); |
| } catch (NullPointerException e) { |
| // Expected. |
| } |
| } |
| |
| /** |
| * @tests java.io.PipedReader#read() |
| */ |
| @TestTargetNew( |
| level = TestLevel.PARTIAL_COMPLETE, |
| notes = "Checks that read() returns -1 if the PipedWriter connectedto this PipedReader is closed.", |
| method = "read", |
| args = {} |
| ) |
| public void test_read$CII_2() throws Exception { |
| Thread writerThread; |
| PipedWriter pw; |
| PWriter2 pwriter; |
| char[] c = new char[1]; |
| |
| preader = new PipedReader(); |
| pw = new PipedWriter(preader); |
| |
| writerThread = new Thread(pwriter = new PWriter2(pw), "PWriter2"); |
| writerThread.start(); |
| Thread.sleep(500); // Allow writer to start |
| |
| preader.read(c, 0, 1); |
| assertEquals("Test 1: No more data indication expected. ", |
| -1, preader.read(c, 0, 1)); |
| pwriter.keepRunning = false; |
| } |
| |
| /** |
| * @tests java.io.PipedReader#ready() |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "", |
| method = "ready", |
| args = {} |
| ) |
| public void test_ready() throws Exception { |
| // Test for method boolean java.io.PipedReader.ready() |
| char[] c = null; |
| preader = new PipedReader(); |
| |
| try { |
| preader.ready(); |
| fail("Test 1: IOException expected."); |
| } catch (IOException e) { |
| // Expected. |
| } |
| |
| t = new Thread(new PWriter(preader), ""); |
| t.start(); |
| Thread.sleep(500); // Allow writer to start |
| assertTrue("Test 2: Reader should be ready", preader.ready()); |
| c = new char[11]; |
| for (int i = 0; i < c.length; i++) |
| c[i] = (char) preader.read(); |
| assertFalse("Test 3: Reader should not be ready after reading all chars", |
| preader.ready()); |
| |
| preader.close(); |
| try { |
| preader.ready(); |
| fail("Test 4: IOException expected."); |
| } catch (IOException e) { |
| // Expected. |
| } |
| } |
| |
| /** |
| * Tears down the fixture, for example, close a network connection. This |
| * method is called after a test is executed. |
| */ |
| protected void tearDown() throws Exception { |
| if (t != null) { |
| t.interrupt(); |
| } |
| super.tearDown(); |
| } |
| } |