/external/apache-harmony/luni/src/test/api/common/org/apache/harmony/luni/tests/java/io/PipedWriterTest.java
Java | 472 lines | 320 code | 43 blank | 109 comment | 18 complexity | e207494e1924365f85c2c91aaca26b0d MD5 | raw file
- /*
- * 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 org.apache.harmony.luni.tests.java.io;
- import java.io.IOException;
- import java.io.PipedReader;
- import java.io.PipedWriter;
- public class PipedWriterTest extends junit.framework.TestCase {
- static class PReader implements Runnable {
- public PipedReader pr;
- public char[] buf = new char[10];
- public PReader(PipedWriter pw) {
- try {
- pr = new PipedReader(pw);
- } catch (IOException e) {
- System.out.println("Exception setting up reader: "
- + e.toString());
- }
- }
- public PReader(PipedReader pr) {
- this.pr = pr;
- }
- public void run() {
- try {
- int r = 0;
- for (int i = 0; i < buf.length; i++) {
- r = pr.read();
- if (r == -1)
- break;
- buf[i] = (char) r;
- }
- } catch (Exception e) {
- System.out.println("Exception reading ("
- + Thread.currentThread().getName() + "): "
- + e.toString());
- }
- }
- }
- Thread rdrThread;
- PReader reader;
- PipedWriter pw;
- /**
- * @tests java.io.PipedWriter#PipedWriter()
- */
- public void test_Constructor() {
- // Test for method java.io.PipedWriter()
- // Used in tests
- }
- /**
- * @tests java.io.PipedWriter#PipedWriter(java.io.PipedReader)
- */
- public void test_ConstructorLjava_io_PipedReader() throws Exception {
- // Test for method java.io.PipedWriter(java.io.PipedReader)
- char[] buf = new char[10];
- "HelloWorld".getChars(0, 10, buf, 0);
- PipedReader rd = new PipedReader();
- pw = new PipedWriter(rd);
- rdrThread = new Thread(reader = new PReader(rd), "Constructor(Reader)");
- rdrThread.start();
- pw.write(buf);
- pw.close();
- rdrThread.join(500);
- assertEquals("Failed to construct writer", "HelloWorld", new String(
- reader.buf));
- }
- /**
- * @tests java.io.PipedWriter#close()
- */
- public void test_close() throws Exception {
- // Test for method void java.io.PipedWriter.close()
- char[] buf = new char[10];
- "HelloWorld".getChars(0, 10, buf, 0);
- PipedReader rd = new PipedReader();
- pw = new PipedWriter(rd);
- reader = new PReader(rd);
- pw.close();
- try {
- pw.write(buf);
- fail("Should have thrown exception when attempting to write to closed writer.");
- } catch (Exception e) {
- // correct
- }
- }
- /**
- * @tests java.io.PipedWriter#connect(java.io.PipedReader)
- */
- public void test_connectLjava_io_PipedReader() throws Exception {
- // Test for method void java.io.PipedWriter.connect(java.io.PipedReader)
- char[] buf = new char[10];
- "HelloWorld".getChars(0, 10, buf, 0);
- PipedReader rd = new PipedReader();
- pw = new PipedWriter();
- pw.connect(rd);
- rdrThread = new Thread(reader = new PReader(rd), "connect");
- rdrThread.start();
- pw.write(buf);
- pw.close();
- rdrThread.join(500);
- assertEquals("Failed to write correct chars", "HelloWorld", new String(
- reader.buf));
- }
- /**
- * @tests java.io.PipedWriter#flush()
- */
- public void test_flush() throws Exception {
- // Test for method void java.io.PipedWriter.flush()
- char[] buf = new char[10];
- "HelloWorld".getChars(0, 10, buf, 0);
- pw = new PipedWriter();
- rdrThread = new Thread(reader = new PReader(pw), "flush");
- rdrThread.start();
- pw.write(buf);
- pw.flush();
- rdrThread.join(700);
- assertEquals("Failed to flush chars", "HelloWorld", new String(
- reader.buf));
- }
-
- /**
- * @tests java.io.PipedWriter#flush()
- * Regression HARMONY-6293
- */
- public void test_flushAfterClose() throws Exception {
-
- PipedReader pr = new PipedReader();
- pw = new PipedWriter(pr);
- pw.close();
- try {
- pw.flush();
- fail("should throw IOException");
- } catch (IOException e) {
- // expected
- }
-
- pr = new PipedReader();
- pw = new PipedWriter(pr);
- pr.close();
-
- try {
- pw.flush();
- fail("should throw IOException");
- } catch (IOException e) {
- // expected
- }
- }
- /**
- * @tests java.io.PipedWriter#write(char[], int, int)
- */
- public void test_write$CII() throws Exception {
- // Test for method void java.io.PipedWriter.write(char [], int, int)
- char[] buf = new char[10];
- "HelloWorld".getChars(0, 10, buf, 0);
- pw = new PipedWriter();
- rdrThread = new Thread(reader = new PReader(pw), "writeCII");
- rdrThread.start();
- pw.write(buf, 0, 10);
- pw.close();
- rdrThread.join(1000);
- assertEquals("Failed to write correct chars", "HelloWorld", new String(
- reader.buf));
- }
- /**
- * @tests java.io.PipedWriter#write(char[], int, int) Regression for
- * HARMONY-387
- */
- public void test_write$CII_2() throws IOException {
- PipedReader pr = new PipedReader();
- PipedWriter obj = null;
- try {
- obj = new java.io.PipedWriter(pr);
- obj.write(new char[0], (int) 0, (int) -1);
- fail("IndexOutOfBoundsException expected");
- } catch (IndexOutOfBoundsException expected) {
- }
- }
- /**
- * @tests java.io.PipedWriter#write(char[], int, int)
- */
- public void test_write$CII_3() throws IOException {
- PipedReader pr = new PipedReader();
- PipedWriter obj = null;
- try {
- obj = new java.io.PipedWriter(pr);
- obj.write(new char[0], (int) -1, (int) 0);
- fail();
- } catch (IndexOutOfBoundsException expected) {}
- }
- /**
- * @tests java.io.PipedWriter#write(char[], int, int)
- */
- public void test_write$CII_4() throws IOException {
- PipedReader pr = new PipedReader();
- PipedWriter obj = null;
- try {
- obj = new java.io.PipedWriter(pr);
- obj.write(new char[0], (int) -1, (int) -1);
- fail();
- } catch (IndexOutOfBoundsException expected) {}
- }
- /**
- * @tests java.io.PipedWriter#write(char[], int, int)
- */
- public void test_write$CII_5() throws IOException {
- PipedReader pr = new PipedReader();
- PipedWriter obj = null;
- try {
- obj = new PipedWriter(pr);
- obj.write((char[]) null, (int) -1, (int) 0);
- fail("NullPointerException expected");
- } catch (IndexOutOfBoundsException t) {
- fail("NullPointerException expected");
- } catch (NullPointerException t) {}
- }
- /**
- * @tests java.io.PipedWriter#write(char[], int, int)
- */
- public void test_write$CII_6() throws IOException {
- PipedReader pr = new PipedReader();
- PipedWriter obj = null;
- try {
- obj = new PipedWriter(pr);
- obj.write((char[]) null, (int) -1, (int) -1);
- fail("NullPointerException expected");
- } catch (IndexOutOfBoundsException t) {
- fail("NullPointerException expected");
- } catch (NullPointerException t) {}
- }
- /**
- * @tests java.io.PipedWriter#write(char[], int, int)
- */
- public void test_write$CII_notConnected() throws IOException {
- // Regression test for Harmony-2404
- // create not connected pipe
- PipedWriter obj = new PipedWriter();
- // char array is null
- try {
- obj.write((char[]) null, 0, 1);
- fail("IOException expected");
- } catch (IOException ioe) {
- // expected
- }
- // negative offset
- try {
- obj.write( new char[] { 1 }, -10, 1);
- fail("IOException expected");
- } catch (IOException ioe) {
- // expected
- }
- // wrong offset
- try {
- obj.write( new char[] { 1 }, 10, 1);
- fail("IOException expected");
- } catch (IOException ioe) {
- // expected
- }
- // negative length
- try {
- obj.write( new char[] { 1 }, 0, -10);
- fail("IOException expected");
- } catch (IOException ioe) {
- // expected
- }
- // all valid params
- try {
- obj.write( new char[] { 1, 1 }, 0, 1);
- fail("IOException expected");
- } catch (IOException ioe) {
- // expected
- }
- }
-
- /**
- * @tests java.io.PipedWriter#write(int)
- */
- public void test_write_I_MultiThread() throws IOException {
- final PipedReader pr = new PipedReader();
- final PipedWriter pw = new PipedWriter();
- // test if writer recognizes dead reader
- pr.connect(pw);
- class WriteRunnable implements Runnable {
- boolean pass = false;
- volatile boolean readerAlive = true;
- public void run() {
- try {
- pw.write(1);
- while (readerAlive) {
- // wait the reader thread dead
- }
- try {
- // should throw exception since reader thread
- // is now dead
- pw.write(1);
- } catch (IOException e) {
- pass = true;
- }
- } catch (IOException e) {
- //ignore
- }
- }
- }
- WriteRunnable writeRunnable = new WriteRunnable();
- Thread writeThread = new Thread(writeRunnable);
- class ReadRunnable implements Runnable {
- boolean pass;
- public void run() {
- try {
- pr.read();
- pass = true;
- } catch (IOException e) {
- //ignore
- }
- }
- }
- ReadRunnable readRunnable = new ReadRunnable();
- Thread readThread = new Thread(readRunnable);
- writeThread.start();
- readThread.start();
- while (readThread.isAlive()) {
- //wait the reader thread dead
- }
- writeRunnable.readerAlive = false;
- assertTrue("reader thread failed to read", readRunnable.pass);
- while (writeThread.isAlive()) {
- //wait the writer thread dead
- }
- assertTrue("writer thread failed to recognize dead reader",
- writeRunnable.pass);
- }
-
- /**
- * @tests java.io.PipedWriter#write(char[],int,int)
- */
- public void test_write_$CII_MultiThread() throws Exception {
- final PipedReader pr = new PipedReader();
- final PipedWriter pw = new PipedWriter();
- // test if writer recognizes dead reader
- pr.connect(pw);
- class WriteRunnable implements Runnable {
- boolean pass = false;
- volatile boolean readerAlive = true;
- public void run() {
- try {
- pw.write(1);
- while (readerAlive) {
- // wait the reader thread dead
- }
- try {
- // should throw exception since reader thread
- // is now dead
- char[] buf = new char[10];
- pw.write(buf, 0, 10);
- } catch (IOException e) {
- pass = true;
- }
- } catch (IOException e) {
- //ignore
- }
- }
- }
- WriteRunnable writeRunnable = new WriteRunnable();
- Thread writeThread = new Thread(writeRunnable);
- class ReadRunnable implements Runnable {
- boolean pass;
- public void run() {
- try {
- pr.read();
- pass = true;
- } catch (IOException e) {
- //ignore
- }
- }
- }
- ReadRunnable readRunnable = new ReadRunnable();
- Thread readThread = new Thread(readRunnable);
- writeThread.start();
- readThread.start();
- while (readThread.isAlive()) {
- //wait the reader thread dead
- }
- writeRunnable.readerAlive = false;
- assertTrue("reader thread failed to read", readRunnable.pass);
- while (writeThread.isAlive()) {
- //wait the writer thread dead
- }
- assertTrue("writer thread failed to recognize dead reader",
- writeRunnable.pass);
- }
- /**
- * @tests java.io.PipedWriter#write(int)
- */
- public void test_writeI() throws Exception {
- // Test for method void java.io.PipedWriter.write(int)
- pw = new PipedWriter();
- rdrThread = new Thread(reader = new PReader(pw), "writeI");
- rdrThread.start();
- pw.write(1);
- pw.write(2);
- pw.write(3);
- pw.close();
- rdrThread.join(1000);
- assertTrue("Failed to write correct chars: " + (int) reader.buf[0]
- + " " + (int) reader.buf[1] + " " + (int) reader.buf[2],
- reader.buf[0] == 1 && reader.buf[1] == 2 && reader.buf[2] == 3);
- }
- /**
- * Tears down the fixture, for example, close a network connection. This
- * method is called after a test is executed.
- */
- protected void tearDown() throws Exception {
- try {
- if (rdrThread != null) {
- rdrThread.interrupt();
- }
- } catch (Exception ignore) {}
- try {
- if (pw != null) {
- pw.close();
- }
- } catch (Exception ignore) {}
- super.tearDown();
- }
- }