/** * Copyright 2011-2017 Asakusa Framework Team. * * Licensed 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 com.asakusafw.runtime.io.util; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; import java.io.DataInput; import java.util.Arrays; import org.junit.Test; /** * Test for {@link DataBuffer}. */ public class DataBufferTest { /** * test for primitives. * @throws Exception if failed */ @Test public void io_simple() throws Exception { DataBuffer buffer = new DataBuffer(); buffer.write(0); buffer.write(100); assertThat(buffer.getReadPosition(), is(0)); assertThat(buffer.getReadRemaining(), is(2)); assertThat(buffer.read(), is(0)); assertThat(buffer.read(), is(100)); assertThat(buffer.getReadPosition(), is(2)); assertThat(buffer.getReadRemaining(), is(0)); assertThat(buffer.read(), is(-1)); assertThat(buffer.getReadPosition(), is(2)); assertThat(buffer.getReadRemaining(), is(0)); } /** * test for booleans. * @throws Exception if failed */ @Test public void io_boolean() throws Exception { DataBuffer buffer = new DataBuffer(); buffer.writeBoolean(false); buffer.writeBoolean(true); assertThat(buffer.getReadPosition(), is(0)); assertThat(buffer.getReadRemaining(), is(2)); assertThat(buffer.readBoolean(), is(false)); assertThat(buffer.readBoolean(), is(true)); assertThat(buffer.getReadPosition(), is(2)); assertThat(buffer.getReadRemaining(), is(0)); } /** * test for bytes. * @throws Exception if failed */ @Test public void io_byte() throws Exception { DataBuffer buffer = new DataBuffer(); buffer.writeByte(0); buffer.writeByte(100); buffer.writeByte(-100); assertThat(buffer.getReadPosition(), is(0)); assertThat(buffer.getReadRemaining(), is(3)); assertThat(buffer.readByte(), is((byte) 0)); assertThat(buffer.readByte(), is((byte) 100)); assertThat(buffer.readByte(), is((byte) -100)); assertThat(buffer.getReadPosition(), is(3)); assertThat(buffer.getReadRemaining(), is(0)); } /** * test for unsigned bytes. * @throws Exception if failed */ @Test public void io_ubyte() throws Exception { DataBuffer buffer = new DataBuffer(); buffer.writeByte(0); buffer.writeByte(100); buffer.writeByte(-100); assertThat(buffer.getReadPosition(), is(0)); assertThat(buffer.getReadRemaining(), is(3)); assertThat(buffer.readUnsignedByte(), is(0)); assertThat(buffer.readUnsignedByte(), is(100)); assertThat(buffer.readUnsignedByte(), is(-100 & 0xff)); assertThat(buffer.getReadPosition(), is(3)); assertThat(buffer.getReadRemaining(), is(0)); } /** * test for shorts. * @throws Exception if failed */ @Test public void io_short() throws Exception { DataBuffer buffer = new DataBuffer(); buffer.writeShort(0); buffer.writeShort(100); buffer.writeShort(-100); buffer.writeShort(0x1234); assertThat(buffer.getReadPosition(), is(0)); assertThat(buffer.getReadRemaining(), is(8)); assertThat(buffer.readShort(), is((short) 0)); assertThat(buffer.readShort(), is((short) 100)); assertThat(buffer.readShort(), is((short) -100)); assertThat(buffer.readShort(), is((short) 0x1234)); assertThat(buffer.getReadPosition(), is(8)); assertThat(buffer.getReadRemaining(), is(0)); } /** * test for unsigned shorts. * @throws Exception if failed */ @Test public void io_uhort() throws Exception { DataBuffer buffer = new DataBuffer(); buffer.writeShort(0); buffer.writeShort(100); buffer.writeShort(-100); buffer.writeShort(0x1234); assertThat(buffer.getReadPosition(), is(0)); assertThat(buffer.getReadRemaining(), is(8)); assertThat(buffer.readUnsignedShort(), is(0)); assertThat(buffer.readUnsignedShort(), is(100)); assertThat(buffer.readUnsignedShort(), is(-100 & 0xffff)); assertThat(buffer.readUnsignedShort(), is(0x1234)); assertThat(buffer.getReadPosition(), is(8)); assertThat(buffer.getReadRemaining(), is(0)); } /** * test for chars. * @throws Exception if failed */ @Test public void io_char() throws Exception { DataBuffer buffer = new DataBuffer(); buffer.writeChar(0); buffer.writeChar(100); buffer.writeChar(-100); buffer.writeChar(0x1234); assertThat(buffer.getReadPosition(), is(0)); assertThat(buffer.getReadRemaining(), is(8)); assertThat(buffer.readChar(), is((char) 0)); assertThat(buffer.readChar(), is((char) 100)); assertThat(buffer.readChar(), is((char) -100)); assertThat(buffer.readChar(), is((char) 0x1234)); assertThat(buffer.getReadPosition(), is(8)); assertThat(buffer.getReadRemaining(), is(0)); } /** * test for integers. * @throws Exception if failed */ @Test public void io_int() throws Exception { DataBuffer buffer = new DataBuffer(); buffer.writeInt(0); buffer.writeInt(100); buffer.writeInt(-100); buffer.writeInt(0x12345678); assertThat(buffer.getReadPosition(), is(0)); assertThat(buffer.getReadRemaining(), is(16)); assertThat(buffer.readInt(), is(0)); assertThat(buffer.readInt(), is(100)); assertThat(buffer.readInt(), is(-100)); assertThat(buffer.readInt(), is(0x12345678)); assertThat(buffer.getReadPosition(), is(16)); assertThat(buffer.getReadRemaining(), is(0)); } /** * test for longs. * @throws Exception if failed */ @Test public void io_long() throws Exception { DataBuffer buffer = new DataBuffer(); buffer.writeLong(0); buffer.writeLong(100); buffer.writeLong(-100); buffer.writeLong(0x0123456789abcdefL); assertThat(buffer.getReadPosition(), is(0)); assertThat(buffer.getReadRemaining(), is(32)); assertThat(buffer.readLong(), is(0L)); assertThat(buffer.readLong(), is(100L)); assertThat(buffer.readLong(), is(-100L)); assertThat(buffer.readLong(), is(0x0123456789abcdefL)); assertThat(buffer.getReadPosition(), is(32)); assertThat(buffer.getReadRemaining(), is(0)); } /** * test for floats. * @throws Exception if failed */ @Test public void io_float() throws Exception { DataBuffer buffer = new DataBuffer(); buffer.writeFloat(0); buffer.writeFloat(100); buffer.writeFloat(-100); assertThat(buffer.getReadPosition(), is(0)); assertThat(buffer.getReadRemaining(), is(12)); assertThat(buffer.readFloat(), is(0f)); assertThat(buffer.readFloat(), is(100f)); assertThat(buffer.readFloat(), is(-100f)); assertThat(buffer.getReadPosition(), is(12)); assertThat(buffer.getReadRemaining(), is(0)); } /** * test for doubles. * @throws Exception if failed */ @Test public void io_double() throws Exception { DataBuffer buffer = new DataBuffer(); buffer.writeDouble(0); buffer.writeDouble(100); buffer.writeDouble(-100); assertThat(buffer.getReadPosition(), is(0)); assertThat(buffer.getReadRemaining(), is(24)); assertThat(buffer.readDouble(), is(0d)); assertThat(buffer.readDouble(), is(100d)); assertThat(buffer.readDouble(), is(-100d)); assertThat(buffer.getReadPosition(), is(24)); assertThat(buffer.getReadRemaining(), is(0)); } /** * test for byte arrays. * @throws Exception if failed */ @Test public void io_byte_array() throws Exception { byte[] b1 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; DataBuffer buffer = new DataBuffer(); buffer.write(b1, 1, 8); assertThat(buffer.getReadPosition(), is(0)); assertThat(buffer.getReadRemaining(), is(8)); byte[] b2 = new byte[b1.length]; buffer.readFully(b2, 1, 8); assertThat(buffer.getReadPosition(), is(8)); assertThat(buffer.getReadRemaining(), is(0)); assertThat(Arrays.copyOfRange(b2, 1, 9), equalTo(Arrays.copyOfRange(b1, 1, 9))); } /** * test for {@link DataInput}. * @throws Exception if failed */ @Test public void io_DataInput() throws Exception { byte[] b1 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; DataBuffer source = new DataBuffer(); source.reset(b1, 0, b1.length); DataBuffer buffer = new DataBuffer(); buffer.write(source, b1.length); assertThat(buffer.getReadPosition(), is(0)); assertThat(buffer.getReadRemaining(), is(10)); assertThat(Arrays.copyOfRange(buffer.getData(), 0, 10), equalTo(b1)); } /** * test for skip. * @throws Exception if failed */ @Test public void skip() throws Exception { DataBuffer buffer = new DataBuffer(); byte[] b1 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; buffer.reset(b1, 0, b1.length); assertThat(buffer.getReadPosition(), is(0)); assertThat(buffer.getReadRemaining(), is(10)); assertThat(buffer.skipBytes(0), is(0)); assertThat(buffer.getReadPosition(), is(0)); assertThat(buffer.skipBytes(1), is(1)); assertThat(buffer.getReadPosition(), is(1)); assertThat(buffer.skipBytes(2), is(2)); assertThat(buffer.getReadPosition(), is(3)); assertThat(buffer.skipBytes(10), is(7)); assertThat(buffer.getReadPosition(), is(10)); } /** * test for reset cursor. * @throws Exception if failed */ @Test public void reset() throws Exception { DataBuffer buffer = new DataBuffer(); byte[] b1 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; buffer.reset(b1, 0, b1.length); assertThat(buffer.getReadPosition(), is(0)); assertThat(buffer.getReadRemaining(), is(10)); buffer.reset(1, 8); assertThat(buffer.getReadPosition(), is(1)); assertThat(buffer.getReadRemaining(), is(8)); } /** * test for expand. * @throws Exception if failed */ @Test public void expand() throws Exception { DataBuffer buffer = new DataBuffer(); byte[] b1 = { 0, 1, 2, 3 }; buffer.reset(b1, 1, b1.length - 1); assertThat(buffer.getReadPosition(), is(1)); assertThat(buffer.getReadRemaining(), is(3)); buffer.ensureCapacity(10); assertThat(buffer.getData().length, greaterThanOrEqualTo(10)); assertThat(buffer.getReadPosition(), is(1)); assertThat(buffer.getReadRemaining(), is(3)); assertThat(buffer.read(), is(1)); assertThat(buffer.read(), is(2)); assertThat(buffer.read(), is(3)); } }