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 java.io.ByteArrayInputStream; 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException; 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.InputStream; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.SequenceInputStream; 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.UnsupportedEncodingException; 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Enumeration; 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class SequenceInputStreamTest extends junit.framework.TestCase { 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SequenceInputStream si; 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String s1 = "Hello"; 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String s2 = "World"; 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.SequenceInputStream#SequenceInputStream(java.io.InputStream, 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * java.io.InputStream) 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ConstructorLjava_io_InputStreamLjava_io_InputStream() { 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method java.io.SequenceInputStream(java.io.InputStream, 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // java.io.InputStream) 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Used in tests 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests SequenceInputStream#SequenceInputStream(java.io.InputStream, 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * java.io.InputStream) 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_Constructor_LInputStreamLInputStream_Null() throws UnsupportedEncodingException { 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes si = new SequenceInputStream(null , null); 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw NullPointerException"); 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //expected 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //will not throw NullPointerException if the first InputStream is not null 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InputStream is = new ByteArrayInputStream(s1.getBytes("UTF-8")); 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes si = new SequenceInputStream(is , null); 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.SequenceInputStream#SequenceInputStream(java.util.Enumeration) 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @SuppressWarnings("unchecked") 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ConstructorLjava_util_Enumeration() { 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method java.io.SequenceInputStream(java.util.Enumeration) 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class StreamEnumerator implements Enumeration { 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InputStream streams[] = new InputStream[2]; 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int count = 0; 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public StreamEnumerator() throws UnsupportedEncodingException { 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes streams[0] = new ByteArrayInputStream(s1.getBytes("UTF-8")); 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes streams[1] = new ByteArrayInputStream(s2.getBytes("UTF-8")); 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean hasMoreElements() { 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return count < streams.length; 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Object nextElement() { 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return streams[count++]; 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes si = new SequenceInputStream(new StreamEnumerator()); 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte buf[] = new byte[s1.length() + s2.length()]; 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes si.read(buf, 0, s1.length()); 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes si.read(buf, s1.length(), s2.length()); 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Read incorrect bytes: " + new String(buf), new String( 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes buf, "UTF-8").equals(s1 + s2)); 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("IOException during read test : " + e.getMessage()); 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.SequenceInputStream#available() 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_available() { 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method int java.io.SequenceInputStream.available() 105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Returned incorrect number of bytes: " + si.available(), 108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes si.available() == s1.length()); 109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("IOException during available test : " + e.getMessage()); 111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.SequenceInputStream#close() 116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_close() throws IOException { 118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes si.close(); 119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //will not throw IOException to close a stream which is closed already 120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes si.close(); 121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.SequenceInputStream#read() 125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_read() throws IOException { 127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method int java.io.SequenceInputStream.read() 128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes si.read(); 130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Read incorrect char", (char) si.read() == s1.charAt(1)); 131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("IOException during read test: " + e.getMessage()); 133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //returns -1 if the stream is closed , do not throw IOException 136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes si.close(); 137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int result = si.read(); 138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(-1 , result); 139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.io.SequenceInputStream#read(byte[], int, int) 143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_read$BII() throws IOException { 145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method int java.io.SequenceInputStream.read(byte [], int, 146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // int) 147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte buf[] = new byte[s1.length() + s2.length()]; 149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes si.read(buf, 0, s1.length()); 150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes si.read(buf, s1.length(), s2.length()); 151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Read incorrect bytes: " + new String(buf), new String( 152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes buf, "UTF-8").equals(s1 + s2)); 153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("IOException during read test : " + e.getMessage()); 155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayInputStream bis1 = new ByteArrayInputStream( 158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new byte[] { 1, 2, 3, 4 }); 159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayInputStream bis2 = new ByteArrayInputStream( 160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new byte[] { 5, 6, 7, 8 }); 161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SequenceInputStream sis = new SequenceInputStream(bis1, bis2); 162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sis.read(null, 0, -1); 165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected NullPointerException exception"); 166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //returns -1 if the stream is closed , do not throw IOException 171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] array = new byte[] { 1 , 2 , 3 ,4 }; 172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sis.close(); 173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int result = sis.read(array , 0 , 5); 174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(-1 , result); 175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Sets up the fixture, for example, open a network connection. This method 180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * is called before a test is executed. 181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void setUp() throws UnsupportedEncodingException { 183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes si = new SequenceInputStream(new ByteArrayInputStream(s1.getBytes("UTF-8")), 184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new ByteArrayInputStream(s2.getBytes("UTF-8"))); 185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Tears down the fixture, for example, close a network connection. This 189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * method is called after a test is executed. 190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void tearDown() { 192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 194