/*
* 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.tests.java.io;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInput;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
public class DataInputStreamTest extends junit.framework.TestCase {
private DataOutputStream os;
private DataInputStream dis;
private ByteArrayOutputStream bos;
String unihw = "\u0048\u0065\u006C\u006C\u006F\u0020\u0057\u006F\u0072\u006C\u0064";
public String fileString = "Test_All_Tests\nTest_java_io_BufferedInputStream\nTest_java_io_BufferedOutputStream\nTest_java_io_ByteArrayInputStream\nTest_java_io_ByteArrayOutputStream\nTest_DataInputStream\n";
/**
* java.io.DataInputStream#DataInputStream(java.io.InputStream)
*/
public void test_ConstructorLjava_io_InputStream() throws IOException {
try {
os.writeChar('t');
os.close();
openDataInputStream();
} finally {
dis.close();
}
}
/**
* java.io.DataInputStream#read(byte[])
*/
public void test_read$B() throws IOException {
os.write(fileString.getBytes());
os.close();
openDataInputStream();
byte rbytes[] = new byte[fileString.length()];
dis.read(rbytes);
assertTrue("Incorrect data read", new String(rbytes, 0, fileString
.length()).equals(fileString));
}
/**
* java.io.DataInputStream#read(byte[], int, int)
*/
public void test_read$BII() throws IOException {
os.write(fileString.getBytes());
os.close();
openDataInputStream();
byte rbytes[] = new byte[fileString.length()];
dis.read(rbytes, 0, rbytes.length);
assertTrue("Incorrect data read", new String(rbytes, 0, fileString
.length()).equals(fileString));
}
/**
* java.io.DataInputStream#readBoolean()
*/
public void test_readBoolean() throws IOException {
os.writeBoolean(true);
os.close();
openDataInputStream();
assertTrue("Incorrect boolean written", dis.readBoolean());
}
/**
* java.io.DataInputStream#readByte()
*/
public void test_readByte() throws IOException {
os.writeByte((byte) 127);
os.close();
openDataInputStream();
assertTrue("Incorrect byte read", dis.readByte() == (byte) 127);
}
/**
* java.io.DataInputStream#readChar()
*/
public void test_readChar() throws IOException {
os.writeChar('t');
os.close();
openDataInputStream();
assertEquals("Incorrect char read", 't', dis.readChar());
}
/**
* java.io.DataInputStream#readDouble()
*/
public void test_readDouble() throws IOException {
os.writeDouble(2345.76834720202);
os.close();
openDataInputStream();
assertEquals("Incorrect double read", 2345.76834720202, dis
.readDouble());
}
/**
* java.io.DataInputStream#readFloat()
*/
public void test_readFloat() throws IOException {
os.writeFloat(29.08764f);
os.close();
openDataInputStream();
assertTrue("Incorrect float read", dis.readFloat() == 29.08764f);
}
/**
* java.io.DataInputStream#readFully(byte[])
*/
public void test_readFully$B() throws IOException {
os.write(fileString.getBytes());
os.close();
openDataInputStream();
byte rbytes[] = new byte[fileString.length()];
dis.readFully(rbytes);
assertTrue("Incorrect data read", new String(rbytes, 0, fileString
.length()).equals(fileString));
}
/**
* java.io.DataInputStream#readFully(byte[], int, int)
*/
public void test_readFully$BII() throws IOException {
os.write(fileString.getBytes());
os.close();
openDataInputStream();
byte rbytes[] = new byte[fileString.length()];
dis.readFully(rbytes, 0, fileString.length());
assertTrue("Incorrect data read", new String(rbytes, 0, fileString
.length()).equals(fileString));
}
/**
* java.io.DataInputStream#readFully(byte[], int, int)
*/
public void test_readFully$BII_Exception() throws IOException {
DataInputStream is = new DataInputStream(new ByteArrayInputStream(
new byte[fileString.length()]));
byte[] byteArray = new byte[fileString.length()];
try {
is.readFully(byteArray, -1, -1);
fail("should throw IndexOutOfBoundsException");
} catch (IndexOutOfBoundsException e) {
// expected
}
try {
is.readFully(byteArray, 0, -1);
fail("should throw IndexOutOfBoundsException");
} catch (IndexOutOfBoundsException e) {
// expected
}
try {
is.readFully(byteArray, 1, -1);
fail("should throw IndexOutOfBoundsException");
} catch (IndexOutOfBoundsException e) {
// expected
}
is.readFully(byteArray, -1, 0);
is.readFully(byteArray, 0, 0);
is.readFully(byteArray, 1, 0);
try {
is.readFully(byteArray, -1, 1);
fail("should throw IndexOutOfBoundsException");
} catch (IndexOutOfBoundsException e) {
// expected
}
is.readFully(byteArray, 0, 1);
is.readFully(byteArray, 1, 1);
try {
is.readFully(byteArray, 0, Integer.MAX_VALUE);
fail("should throw IndexOutOfBoundsException");
} catch (IndexOutOfBoundsException e) {
// expected
}
}
/**
* java.io.DataInputStream#readFully(byte[], int, int)
*/
public void test_readFully$BII_NullArray() throws IOException {
DataInputStream is = new DataInputStream(new ByteArrayInputStream(
new byte[fileString.length()]));
byte[] nullByteArray = null;
try {
is.readFully(nullByteArray, -1, -1);
fail();
} catch (NullPointerException expected) {
} catch (IndexOutOfBoundsException expected) {
}
try {
is.readFully(nullByteArray, 0, -1);
fail();
} catch (NullPointerException expected) {
} catch (IndexOutOfBoundsException expected) {
}
try {
is.readFully(nullByteArray, 1, -1);
fail();
} catch (NullPointerException expected) {
} catch (IndexOutOfBoundsException expected) {
}
is.readFully(nullByteArray, -1, 0);
is.readFully(nullByteArray, 0, 0);
is.readFully(nullByteArray, 1, 0);
try {
is.readFully(nullByteArray, -1, 1);
fail();
} catch (NullPointerException expected) {
} catch (IndexOutOfBoundsException expected) {
}
try {
is.readFully(nullByteArray, 0, 1);
fail("should throw NullPointerException");
} catch (NullPointerException e) {
// expected
}
try {
is.readFully(nullByteArray, 1, 1);
fail("should throw NullPointerException");
} catch (NullPointerException e) {
// expected
}
try {
is.readFully(nullByteArray, 0, Integer.MAX_VALUE);
fail("should throw NullPointerException");
} catch (NullPointerException e) {
// expected
}
}
/**
* java.io.DataInputStream#readFully(byte[], int, int)
*/
public void test_readFully$BII_NullStream() throws IOException {
DataInputStream is = new DataInputStream(null);
byte[] byteArray = new byte[fileString.length()];
try {
is.readFully(byteArray, -1, -1);
fail();
} catch (NullPointerException expected) {
} catch (IndexOutOfBoundsException expected) {
}
try {
is.readFully(byteArray, 0, -1);
fail();
} catch (NullPointerException expected) {
} catch (IndexOutOfBoundsException expected) {
}
try {
is.readFully(byteArray, 1, -1);
fail();
} catch (NullPointerException expected) {
} catch (IndexOutOfBoundsException expected) {
}
is.readFully(byteArray, -1, 0);
is.readFully(byteArray, 0, 0);
is.readFully(byteArray, 1, 0);
try {
is.readFully(byteArray, -1, 1);
fail("should throw NullPointerException");
} catch (NullPointerException e) {
// expected
}
try {
is.readFully(byteArray, 0, 1);
fail("should throw NullPointerException");
} catch (NullPointerException e) {
// expected
}
try {
is.readFully(byteArray, 1, 1);
fail("should throw NullPointerException");
} catch (NullPointerException e) {
// expected
}
try {
is.readFully(byteArray, 0, Integer.MAX_VALUE);
fail("should throw NullPointerException");
} catch (NullPointerException e) {
// expected
}
}
/**
* java.io.DataInputStream#readFully(byte[], int, int)
*/
public void test_readFully$BII_NullStream_NullArray() throws IOException {
DataInputStream is = new DataInputStream(null);
byte[] nullByteArray = null;
try {
is.readFully(nullByteArray, -1, -1);
fail();
} catch (NullPointerException expected) {
} catch (IndexOutOfBoundsException expected) {
}
try {
is.readFully(nullByteArray, 0, -1);
fail();
} catch (NullPointerException expected) {
} catch (IndexOutOfBoundsException expected) {
}
try {
is.readFully(nullByteArray, 1, -1);
fail();
} catch (NullPointerException expected) {
} catch (IndexOutOfBoundsException expected) {
}
is.readFully(nullByteArray, -1, 0);
is.readFully(nullByteArray, 0, 0);
is.readFully(nullByteArray, 1, 0);
try {
is.readFully(nullByteArray, -1, 1);
fail("should throw NullPointerException");
} catch (NullPointerException e) {
// expected
}
try {
is.readFully(nullByteArray, 0, 1);
fail("should throw NullPointerException");
} catch (NullPointerException e) {
// expected
}
try {
is.readFully(nullByteArray, 1, 1);
fail("should throw NullPointerException");
} catch (NullPointerException e) {
// expected
}
try {
is.readFully(nullByteArray, 0, Integer.MAX_VALUE);
fail("should throw NullPointerException");
} catch (NullPointerException e) {
// expected
}
}
/**
* java.io.DataInputStream#readInt()
*/
public void test_readInt() throws IOException {
os.writeInt(768347202);
os.close();
openDataInputStream();
assertEquals("Incorrect int read", 768347202, dis.readInt());
}
/**
* java.io.DataInputStream#readLine()
*/
@SuppressWarnings("deprecation")
public void test_readLine() throws IOException {
os.writeBytes("Hello");
os.close();
openDataInputStream();
String line = dis.readLine();
assertTrue("Incorrect line read: " + line, line.equals("Hello"));
}
/**
* java.io.DataInputStream#readLong()
*/
public void test_readLong() throws IOException {
os.writeLong(9875645283333L);
os.close();
openDataInputStream();
assertEquals("Incorrect long read", 9875645283333L, dis.readLong());
}
/**
* java.io.DataInputStream#readShort()
*/
public void test_readShort() throws IOException {
os.writeShort(9875);
os.close();
openDataInputStream();
assertTrue("Incorrect short read", dis.readShort() == (short) 9875);
}
/**
* java.io.DataInputStream#readUnsignedByte()
*/
public void test_readUnsignedByte() throws IOException {
os.writeByte((byte) -127);
os.close();
openDataInputStream();
assertEquals("Incorrect byte read", 129, dis.readUnsignedByte());
}
/**
* java.io.DataInputStream#readUnsignedShort()
*/
public void test_readUnsignedShort() throws IOException {
os.writeShort(9875);
os.close();
openDataInputStream();
assertEquals("Incorrect short read", 9875, dis.readUnsignedShort());
}
/**
* java.io.DataInputStream#readUTF()
*/
public void test_readUTF() throws IOException {
os.writeUTF(unihw);
os.close();
openDataInputStream();
assertTrue("Failed to write string in UTF format",
dis.available() == unihw.length() + 2);
assertTrue("Incorrect string read", dis.readUTF().equals(unihw));
}
static class TestDataInputStream implements DataInput {
public boolean readBoolean() throws IOException {
return false;
}
public byte readByte() throws IOException {
return (byte) 0;
}
public char readChar() throws IOException {
return (char) 0;
}
public double readDouble() throws IOException {
return 0.0;
}
public float readFloat() throws IOException {
return (float) 0.0;
}
public void readFully(byte[] buffer) throws IOException {
}
public void readFully(byte[] buffer, int offset, int count)
throws IOException {
}
public int readInt() throws IOException {
return 0;
}
public String readLine() throws IOException {
return null;
}
public long readLong() throws IOException {
return (long) 0;
}
public short readShort() throws IOException {
return (short) 0;
}
public int readUnsignedByte() throws IOException {
return 0;
}
public int readUnsignedShort() throws IOException {
return 0;
}
public String readUTF() throws IOException {
return DataInputStream.readUTF(this);
}
public int skipBytes(int count) throws IOException {
return 0;
}
}
/**
* java.io.DataInputStream#readUTF(java.io.DataInput)
*/
public void test_readUTFLjava_io_DataInput() throws IOException {
os.writeUTF(unihw);
os.close();
openDataInputStream();
assertTrue("Failed to write string in UTF format",
dis.available() == unihw.length() + 2);
assertTrue("Incorrect string read", DataInputStream.readUTF(dis)
.equals(unihw));
// Regression test for HARMONY-5336
new TestDataInputStream().readUTF();
}
/**
* java.io.DataInputStream#skipBytes(int)
*/
public void test_skipBytesI() throws IOException {
byte fileBytes[] = fileString.getBytes();
os.write(fileBytes);
os.close();
openDataInputStream();
dis.skipBytes(100);
byte rbytes[] = new byte[fileString.length()];
dis.read(rbytes, 0, 50);
dis.close();
assertTrue("Incorrect data read", new String(rbytes, 0, 50)
.equals(fileString.substring(100, 150)));
int skipped = 0;
openDataInputStream();
try {
skipped = dis.skipBytes(50000);
} catch (EOFException e) {
}
assertTrue("Skipped should report " + fileString.length() + " not "
+ skipped, skipped == fileString.length());
}
private void openDataInputStream() throws IOException {
dis = new DataInputStream(new ByteArrayInputStream(bos.toByteArray()));
}
/**
* Sets up the fixture, for example, open a network connection. This method
* is called before a test is executed.
*/
protected void setUp() {
bos = new ByteArrayOutputStream();
os = new DataOutputStream(bos);
}
/**
* Tears down the fixture, for example, close a network connection. This
* method is called after a test is executed.
*/
protected void tearDown() {
try {
os.close();
} catch (Exception e) {
}
try {
dis.close();
} catch (Exception e) {
}
}
}