1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/* 2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * contributor license agreements. See the NOTICE file distributed with 4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * this work for additional information regarding copyright ownership. 5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (the "License"); you may not use this file except in compliance with 7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the License. You may obtain a copy of the License at 8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Unless required by applicable law or agreed to in writing, software 12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See the License for the specific language governing permissions and 15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * limitations under the License. 16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.luni.tests.java.io; 19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestSuite; 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.testframework.SinkTester; 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.testframework.WrapperTester; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.Streams; 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.BufferedOutputStream; 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ByteArrayInputStream; 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ByteArrayOutputStream; 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.DataOutputStream; 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.File; 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FileInputStream; 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FileOutputStream; 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FilterOutputStream; 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException; 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ObjectInputStream; 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ObjectOutputStream; 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.OutputStream; 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.PipedInputStream; 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.PipedOutputStream; 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.PrintStream; 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.concurrent.Callable; 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.concurrent.ExecutorService; 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.concurrent.Executors; 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.concurrent.Future; 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/** 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Tests basic {@link OutputStream} behaviors for the luni implementations of 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the type. 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class OutputStreamTesterTest { 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static junit.framework.Test suite() { 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes TestSuite suite = new TestSuite(); 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // sink tests 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes suite.addTest(new FileOutputStreamSinkTester(true).createTests()); 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes suite.addTest(new FileOutputStreamSinkTester(false).createTests()); 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes suite.addTest(new ByteArrayOutputStreamSinkTester(0).setThrowsExceptions(false).createTests()); 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes suite.addTest(new ByteArrayOutputStreamSinkTester(4).setThrowsExceptions(false).createTests()); 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes suite.addTest(new PipedOutputStreamSinkTester().createTests()); 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // wrapper tests 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes suite.addTest(new BufferedOutputStreamTester(1).createTests()); 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes suite.addTest(new BufferedOutputStreamTester(5).createTests()); 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes suite.addTest(new BufferedOutputStreamTester(1024).createTests()); 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes suite.addTest(new FilterOutputStreamTester().createTests()); 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes suite.addTest(new DataOutputStreamTester().createTests()); 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // fails wrapperTestFlushThrowsViaClose() and sinkTestWriteAfterClose(): 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // suite.addTest(new ObjectOutputStreamTester().createTests()); 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes suite.addTest(new PrintStreamTester().setThrowsExceptions(false).createTests()); 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return suite; 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static class FileOutputStreamSinkTester extends SinkTester { 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private final boolean append; 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private File file; 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private FileOutputStreamSinkTester(boolean append) { 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.append = append; 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public OutputStream create() throws IOException { 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes file = File.createTempFile("FileOutputStreamSinkTester", "tmp"); 85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes file.deleteOnExit(); 86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new FileOutputStream(file, append); 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public byte[] getBytes() throws IOException { 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return Streams.streamToBytes(new FileInputStream(file)); 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static class ByteArrayOutputStreamSinkTester extends SinkTester { 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private final int size; 97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private ByteArrayOutputStream stream; 98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private ByteArrayOutputStreamSinkTester(int size) { 100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.size = size; 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public OutputStream create() throws IOException { 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes stream = new ByteArrayOutputStream(size); 105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return stream; 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public byte[] getBytes() throws IOException { 109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return stream.toByteArray(); 110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static class PipedOutputStreamSinkTester extends SinkTester { 114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private ExecutorService executor; 116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private Future<byte[]> future; 117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public OutputStream create() throws IOException { 119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final PipedInputStream in = new PipedInputStream(); 120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes PipedOutputStream out = new PipedOutputStream(in); 121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes executor = Executors.newSingleThreadExecutor(); 123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes future = executor.submit(new Callable<byte[]>() { 124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public byte[] call() throws Exception { 126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] buffer = new byte[256]; 127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int count; 128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while ((count = in.read(buffer)) != -1) { 129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes bytes.write(buffer, 0, count); 130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return bytes.toByteArray(); 132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }); 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return out; 136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public byte[] getBytes() throws Exception { 139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes executor.shutdown(); 140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return future.get(); 141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static class FilterOutputStreamTester extends WrapperTester { 145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public OutputStream create(OutputStream delegate) throws Exception { 147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new FilterOutputStream(delegate); 148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public byte[] decode(byte[] delegateBytes) throws Exception { 151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return delegateBytes; 152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static class BufferedOutputStreamTester extends WrapperTester { 156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private final int bufferSize; 157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private BufferedOutputStreamTester(int bufferSize) { 159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.bufferSize = bufferSize; 160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public OutputStream create(OutputStream delegate) throws Exception { 163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new BufferedOutputStream(delegate, bufferSize); 164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public byte[] decode(byte[] delegateBytes) throws Exception { 167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return delegateBytes; 168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static class DataOutputStreamTester extends WrapperTester { 172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public OutputStream create(OutputStream delegate) throws Exception { 174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new DataOutputStream(delegate); 175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public byte[] decode(byte[] delegateBytes) throws Exception { 178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return delegateBytes; 179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static class ObjectOutputStreamTester extends WrapperTester { 183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public OutputStream create(OutputStream delegate) throws Exception { 185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new ObjectOutputStream(delegate); 186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public byte[] decode(byte[] delegateBytes) throws Exception { 189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return Streams.streamToBytes(new ObjectInputStream( 190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new ByteArrayInputStream(delegateBytes))); 191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static class PrintStreamTester extends WrapperTester { 195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public OutputStream create(OutputStream delegate) throws Exception { 197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new PrintStream(delegate); 198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public byte[] decode(byte[] delegateBytes) throws Exception { 201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return delegateBytes; 202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 205