// Copyright 2010-2014 Michel Kraemer
//
// 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 de.undercouch.bson4jackson.io;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import org.junit.Before;
import org.junit.Test;
/**
* Tests {@link UnsafeByteArrayInputStream}
* @author Michel Kraemer
*/
public class UnsafeByteArrayInputStreamTest {
private static final byte[] BUF = "abcdefghijklmnopqrstuvwxyz\0\0".getBytes();
static {
BUF[BUF.length - 1] = (byte)0xff;
}
private UnsafeByteArrayInputStream _in;
@Before
public void setUp() {
_in = new UnsafeByteArrayInputStream(BUF);
}
@Test
public void available() {
assertEquals(BUF.length, _in.available());
_in.read();
assertEquals(BUF.length - 1, _in.available());
_in.read(new byte[5], 0, 5);
assertEquals(BUF.length - 6, _in.available());
}
@Test
public void read() {
assertEquals('a', _in.read());
assertEquals('b', _in.read());
assertEquals('c', _in.read());
byte[] b = new byte[10];
assertEquals(5, _in.read(b, 0, 5));
assertArrayEquals(Arrays.copyOf("defgh".getBytes(), 10), b);
assertEquals(5, _in.read(b, 5, 5));
assertArrayEquals("defghijklm".getBytes(), b);
assertEquals(10, _in.read(b, 0, 10));
assertArrayEquals("nopqrstuvw".getBytes(), b);
byte[] b2 = new byte[10];
assertEquals(5, _in.read(b2, 0, 10));
byte[] expected = Arrays.copyOf("xyz\0".getBytes(), 10);
expected[4] = (byte)0xff;
assertArrayEquals(expected, b2);
assertEquals(-1, _in.read());
assertEquals(-1, _in.read(b2, 0, 10));
}
@Test
public void readFF() {
assertEquals(26, _in.skip(26));
assertEquals(0, _in.read());
assertEquals((byte)0xff, (byte)_in.read());
}
@Test
public void skip() {
assertEquals('a', _in.read());
assertEquals(1, _in.skip(1));
assertEquals('c', _in.read());
assertEquals(20, _in.skip(20));
assertEquals('x', _in.read());
assertEquals(4, _in.skip(20));
assertEquals(-1, _in.read());
}
@Test
public void offset() {
_in = new UnsafeByteArrayInputStream(BUF, 3, 3);
assertEquals('d', _in.read());
assertEquals('e', _in.read());
assertEquals('f', _in.read());
assertEquals(-1, _in.read());
}
@Test
public void mark() {
assertEquals('a', _in.read());
assertEquals('b', _in.read());
assertEquals('c', _in.read());
_in.mark(3);
assertEquals('d', _in.read());
assertEquals('e', _in.read());
assertEquals('f', _in.read());
_in.reset();
assertEquals('d', _in.read());
assertEquals('e', _in.read());
assertEquals('f', _in.read());
}
}