You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by py...@apache.org on 2006/08/10 11:01:47 UTC
svn commit: r430323 - in
/incubator/harmony/enhanced/classlib/trunk/modules/luni/src:
main/java/java/io/SequenceInputStream.java
test/java/tests/api/java/io/SequenceInputStreamTest.java
Author: pyang
Date: Thu Aug 10 02:01:46 2006
New Revision: 430323
URL: http://svn.apache.org/viewvc?rev=430323&view=rev
Log:
Patch applied for HARMONY-1115([classlib][luni] java.io.SequenceInputStream 's constructor SequenceInputStream(InputStream, InputStream) should not throw NullPointerException)
Modified:
incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/SequenceInputStream.java
incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/SequenceInputStreamTest.java
Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/SequenceInputStream.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/SequenceInputStream.java?rev=430323&r1=430322&r2=430323&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/SequenceInputStream.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/SequenceInputStream.java Thu Aug 10 02:01:46 2006
@@ -1,4 +1,4 @@
-/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable
+/* Copyright 1998, 2006 The Apache Software Foundation or its licensors, as applicable
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,8 +18,6 @@
import java.util.Enumeration;
import java.util.Vector;
-import org.apache.harmony.luni.util.Msg;
-
/**
* SequenceInputStream is used for streaming over a sequence of streams
* concatenated together. Reads are taken from the first stream until it ends,
@@ -48,14 +46,13 @@
* the second stream to get bytes from
*/
public SequenceInputStream(InputStream s1, InputStream s2) {
- if (s1 != null && s2 != null) {
- Vector<InputStream> inVector = new Vector<InputStream>(1);
- inVector.addElement(s2);
- e = inVector.elements();
- in = s1;
- } else {
- throw new NullPointerException();
- }
+ if (s1 == null) {
+ throw new NullPointerException();
+ }
+ Vector<InputStream> inVector = new Vector<InputStream>(1);
+ inVector.addElement(s2);
+ e = inVector.elements();
+ in = s1;
}
/**
@@ -101,10 +98,6 @@
* If an error occurs attempting to close this FileInputStream.
*/
public void close() throws IOException {
- if (e == null) {
- throw new IOException(Msg.getString("K00b7")); //$NON-NLS-1$
- }
-
while (in != null) {
nextStream();
}
@@ -167,8 +160,7 @@
* @return the number of bytes actually read or -1 if end of stream.
*
* @throws IOException
- * If the stream is already closed or another IOException
- * occurs.
+ * If an error occurs while reading the stream
*/
public int read(byte[] buffer, int offset, int count) throws IOException {
if (in == null) {
@@ -178,18 +170,16 @@
throw new NullPointerException();
}
// avoid int overflow
- if (0 <= offset && offset <= buffer.length && 0 <= count
- && count <= buffer.length - offset) {
- while (in != null) {
- int result = in.read(buffer, offset, count);
- if (result >= 0) {
- return result;
- }
- nextStream();
+ if (offset < 0 || offset > buffer.length - count || count < 0) {
+ throw new IndexOutOfBoundsException();
+ }
+ while (in != null) {
+ int result = in.read(buffer, offset, count);
+ if (result >= 0) {
+ return result;
}
- return -1;
- } else {
- throw new ArrayIndexOutOfBoundsException();
+ nextStream();
}
+ return -1;
}
}
Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/SequenceInputStreamTest.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/SequenceInputStreamTest.java?rev=430323&r1=430322&r2=430323&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/SequenceInputStreamTest.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/SequenceInputStreamTest.java Thu Aug 10 02:01:46 2006
@@ -1,4 +1,4 @@
-/* Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable
+/* Copyright 1998, 2006 The Apache Software Foundation or its licensors, as applicable
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -38,6 +38,23 @@
// java.io.InputStream)
// Used in tests
}
+
+ /**
+ * @tests SequenceInputStream#SequenceInputStream(java.io.InputStream,
+ * java.io.InputStream)
+ */
+ public void test_Constructor_LInputStreamLInputStream_Null() {
+ try {
+ si = new SequenceInputStream(null , null);
+ fail("should throw NullPointerException");
+ } catch (NullPointerException e) {
+ //expected
+ }
+
+ //will not throw NullPointerException if the first InputStream is not null
+ InputStream is = new ByteArrayInputStream(s1.getBytes());
+ si = new SequenceInputStream(is , null);
+ }
/**
* @tests java.io.SequenceInputStream#SequenceInputStream(java.util.Enumeration)
@@ -93,20 +110,16 @@
/**
* @tests java.io.SequenceInputStream#close()
*/
- public void test_close() {
- // Test for method void java.io.SequenceInputStream.close()
- try {
- si.close();
- } catch (IOException e) {
- fail("IOException during close test : " + e.getMessage());
- }
-
+ public void test_close() throws IOException {
+ si.close();
+ //will not throw IOException to close a stream which is closed already
+ si.close();
}
/**
* @tests java.io.SequenceInputStream#read()
*/
- public void test_read() {
+ public void test_read() throws IOException {
// Test for method int java.io.SequenceInputStream.read()
try {
si.read();
@@ -114,6 +127,11 @@
} catch (IOException e) {
fail("IOException during read test: " + e.getMessage());
}
+
+ //returns -1 if the stream is closed , do not throw IOException
+ si.close();
+ int result = si.read();
+ assertEquals(-1 , result);
}
/**
@@ -144,6 +162,13 @@
} catch (NullPointerException e) {
// expected
}
+
+ //returns -1 if the stream is closed , do not throw IOException
+ byte[] array = new byte[] { 1 , 2 , 3 ,4 };
+ sis.close();
+ int result = sis.read(array , 0 , 5);
+ assertEquals(-1 , result);
+
}
/**