blob: 67f73ed8ebe1a587cc3a93d83e041701ccbf9e02 [file] [log] [blame]
/*
* 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.commons.io.input;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/**
* Test for the SwappedDataInputStream. This also
* effectively tests the underlying EndianUtils Stream methods.
*
*/
public class SwappedDataInputStreamTest {
private SwappedDataInputStream sdis;
private byte[] bytes;
@BeforeEach
public void setUp() {
bytes = new byte[] {
0x01,
0x02,
0x03,
0x04,
0x05,
0x06,
0x07,
0x08
};
final ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
this.sdis = new SwappedDataInputStream( bais );
}
@AfterEach
public void tearDown() {
this.sdis = null;
}
@Test
public void testReadBoolean() throws IOException {
bytes = new byte[] {0x00, 0x01, 0x02,};
try (
final ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
final SwappedDataInputStream sdis = new SwappedDataInputStream(bais)
) {
assertFalse(sdis.readBoolean());
assertTrue(sdis.readBoolean());
assertTrue(sdis.readBoolean());
}
}
@Test
public void testReadByte() throws IOException {
assertEquals( 0x01, this.sdis.readByte() );
}
@Test
public void testReadChar() throws IOException {
assertEquals( (char) 0x0201, this.sdis.readChar() );
}
@Test
public void testReadDouble() throws IOException {
assertEquals( Double.longBitsToDouble(0x0807060504030201L), this.sdis.readDouble(), 0 );
}
@Test
public void testReadFloat() throws IOException {
assertEquals( Float.intBitsToFloat(0x04030201), this.sdis.readFloat(), 0 );
}
@Test
public void testReadFully() throws IOException {
final byte[] bytesIn = new byte[8];
this.sdis.readFully(bytesIn);
for( int i=0; i<8; i++) {
assertEquals( bytes[i], bytesIn[i] );
}
}
@Test
public void testReadInt() throws IOException {
assertEquals( 0x04030201, this.sdis.readInt() );
}
@Test
public void testReadLine() {
assertThrows(UnsupportedOperationException.class, () -> this.sdis.readLine(),
"readLine should be unsupported. ");
}
@Test
public void testReadLong() throws IOException {
assertEquals( 0x0807060504030201L, this.sdis.readLong() );
}
@Test
public void testReadShort() throws IOException {
assertEquals( (short) 0x0201, this.sdis.readShort() );
}
@Test
public void testReadUnsignedByte() throws IOException {
assertEquals( 0x01, this.sdis.readUnsignedByte() );
}
@Test
public void testReadUnsignedShort() throws IOException {
assertEquals( (short) 0x0201, this.sdis.readUnsignedShort() );
}
@Test
public void testReadUTF() {
assertThrows(UnsupportedOperationException.class, () -> this.sdis.readUTF(),
"readUTF should be unsupported. ");
}
@Test
public void testSkipBytes() throws IOException {
this.sdis.skipBytes(4);
assertEquals( 0x08070605, this.sdis.readInt() );
}
}