/* * 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 libcore.java.io; import java.io.IOException; import java.io.PipedReader; import java.io.PipedWriter; import java.util.Arrays; public class OldPipedWriterTest extends junit.framework.TestCase { static final String testString = "Lorem ipsum..."; static final int testLength = testString.length(); static class PReader implements Runnable { public PipedReader pr; public char[] buf; 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 { while (true) { Thread.sleep(1000); Thread.yield(); } } catch (InterruptedException e) { } } public String read(int nbytes) { buf = new char[nbytes]; try { pr.read(buf, 0, nbytes); return new String(buf); } catch (IOException e) { System.out.println("Exception reading (" + Thread.currentThread().getName() + "): " + e.toString()); return "ERROR"; } } } Thread readerThread; PReader reader; PipedWriter pw; char[] testBuf; public void test_Constructor() { pw = new PipedWriter(); assertNotNull(pw); try { pw.close(); } catch (IOException e) { fail("Unexpeceted IOException."); } } public void test_ConstructorLjava_io_PipedReader() throws Exception { PipedReader rd = new PipedReader(); try { pw = new PipedWriter(rd); } catch (Exception e) { fail("Test 1: Construtor failed:" + e.getMessage()); } readerThread = new Thread(reader = new PReader(rd), "Constructor(Reader)"); readerThread.start(); try { pw.write(testBuf); } catch (Exception e) { fail("Test 2: Could not write to the constructed writer: " + e.getMessage()); } pw.close(); assertEquals("Test 3: Incorrect character string received.", testString, reader.read(testLength)); rd = new PipedReader(new PipedWriter()); try { pw = new PipedWriter(rd); fail("Test 4: IOException expected because the reader is already connected."); } catch (IOException e) { // Expected. } } public void test_close() throws Exception { PipedReader rd = new PipedReader(); pw = new PipedWriter(rd); reader = new PReader(rd); try { pw.close(); } catch (IOException e) { fail("Test 1: Unexpected IOException: " + e.getMessage()); } } public void test_connectLjava_io_PipedReader() throws Exception { PipedReader rd = new PipedReader(); pw = new PipedWriter(); try { pw.connect(rd); } catch (Exception e) { fail("Test 1: Unexpected exception when connecting: " + e.getLocalizedMessage()); } readerThread = new Thread(reader = new PReader(rd), "connect"); readerThread.start(); try { pw.write(testBuf); } catch (IOException e) { fail("Test 2: Unexpected IOException when writing after connecting."); } assertEquals("Test 3: Incorrect character string received.", testString, reader.read(testLength)); try { pw.connect(new PipedReader()); fail("Test 4: IOException expected when reconnecting the writer."); } catch (IOException e) { // Expected. } } public void test_flush() throws Exception { // Test for method void java.io.PipedWriter.flush() pw = new PipedWriter(); readerThread = new Thread(reader = new PReader(pw), "flush"); readerThread.start(); pw.write(testBuf); pw.flush(); assertEquals("Test 1: Flush failed. ", testString, reader.read(testLength)); } public void test_write$CII() throws Exception { pw = new PipedWriter(); try { pw.write(testBuf, 0, 5); fail("Test 1: IOException expected."); } catch (IOException e) { // Expected. } pw = new PipedWriter(new PipedReader()); try { pw.write(testBuf, -1, 1); fail("Test 2: IndexOutOfBoundsException expected."); } catch (IndexOutOfBoundsException e) { // Expected. } try { pw.write(testBuf, 0, -1); fail("Test 3: IndexOutOfBoundsException expected."); } catch (IndexOutOfBoundsException e) { // Expected. } try { pw.write(testBuf, 5, testString.length()); fail("Test 4: IndexOutOfBoundsException expected."); } catch (IndexOutOfBoundsException e) { // Expected. } pw.close(); pw = new PipedWriter(); try { readerThread = new Thread(reader = new PReader(pw), "writeCII"); readerThread.start(); pw.write(testBuf, 0, testLength); pw.close(); reader.read(testLength); assertTrue("Test 5: Characters read do not match the characters written.", Arrays.equals( testBuf, reader.buf)); } catch (IOException e) { fail("Test 5: Unexpected IOException: " + e.getMessage()); } readerThread.interrupt(); try { pw.write(testBuf, 0, 5); fail("Test 6: IOException expected."); } catch (IOException e) { // Expected. } reader.pr.close(); try { pw.write(testBuf, 0, 5); fail("Test 7: IOException expected."); } catch (IOException e) { // Expected. } } public void test_writeI() throws Exception { // Test for method void java.io.PipedWriter.write(int) pw = new PipedWriter(); try { pw.write(42); fail("Test 1: IOException expected."); } catch (IOException e) { // Expected. } readerThread = new Thread(reader = new PReader(pw), "writeI"); readerThread.start(); pw.write(1); pw.write(2); pw.write(3); pw.close(); reader.read(3); assertTrue("Test 2: The charaacters read do not match the characters written: " + (int) reader.buf[0] + " " + (int) reader.buf[1] + " " + (int) reader.buf[2], reader.buf[0] == 1 && reader.buf[1] == 2 && reader.buf[2] == 3); } protected void setUp() throws Exception { super.setUp(); testBuf = new char[testLength]; testString.getChars(0, testLength, testBuf, 0); } protected void tearDown() throws Exception { try { if (readerThread != null) { readerThread.interrupt(); } } catch (Exception ignore) {} try { if (pw != null) { pw.close(); } } catch (Exception ignore) {} super.tearDown(); } }