blob: ec9f96ed9602347f75061c3f23f9f99837545d8e [file] [log] [blame]
/*
* Copyright (C) 2023, SAP SE and others
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0 which is available at
* https://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package org.eclipse.jgit.util.io;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThrows;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Arrays;
import org.eclipse.jgit.internal.JGitText;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class ByteBufferInputStreamTest {
private static final byte data[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F };
private ByteBuffer buf;
private ByteBufferInputStream is;
@Before
public void setup() {
buf = ByteBuffer.wrap(data);
is = new ByteBufferInputStream(buf);
}
@After
public void tearDown() {
is.close();
}
@Test
public void testRead() throws IOException {
assertEquals(0x00, is.read());
assertEquals(0x01, is.read());
assertEquals(0x02, is.read());
assertEquals(0x03, is.read());
assertEquals(0x04, is.read());
assertEquals(0x05, is.read());
assertEquals(0x06, is.read());
assertEquals(0x07, is.read());
assertEquals(0x08, is.read());
assertEquals(0x09, is.read());
assertEquals(0x0A, is.read());
assertEquals(0x0B, is.read());
assertEquals(0x0C, is.read());
assertEquals(0x0D, is.read());
assertEquals(0x0E, is.read());
assertEquals(0x0F, is.read());
assertEquals(-1, is.read());
}
@Test
public void testReadMultiple() throws IOException {
byte[] x = new byte[5];
int n = is.read(x);
assertEquals(5, n);
assertArrayEquals(new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04 }, x);
}
@Test
public void testReadMultipleOffset() throws IOException {
byte[] x = new byte[7];
int n = is.read(x, 4, 3);
assertEquals(3, n);
assertArrayEquals(
new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02 },
x);
}
@Test
public void testReadAll() throws IOException {
byte[] x = is.readAllBytes();
assertEquals(16, x.length);
assertArrayEquals(data, x);
}
@Test
public void testMarkReset() throws IOException {
byte[] x = new byte[5];
int n = is.read(x);
assertEquals(11, is.available());
assertTrue(is.markSupported());
is.mark(is.available());
is.reset();
byte[] y = new byte[5];
int m = is.read(y);
assertEquals(n, m);
assertArrayEquals(new byte[] { 0x05, 0x06, 0x07, 0x08, 0x09 }, y);
}
@Test
public void testClosed() {
is.close();
Exception e = assertThrows(IOException.class, () -> is.read());
assertEquals(JGitText.get().inputStreamClosed, e.getMessage());
}
@Test
public void testReadNBytes() throws IOException {
byte[] x = is.readNBytes(4);
assertArrayEquals(new byte[] { 0x00, 0x01, 0x02, 0x03 }, x);
}
@Test
public void testReadNBytesOffset() throws IOException {
byte[] x = new byte[10];
Arrays.fill(x, (byte) 0x0F);
is.readNBytes(x, 3, 4);
assertArrayEquals(new byte[] { 0x0F, 0x0F, 0x0F, 0x00, 0x01, 0x02, 0x03,
0x0F, 0x0F, 0x0F }, x);
}
@Test
public void testRead0() throws IOException {
byte[] x = new byte[7];
int n = is.read(x, 4, 0);
assertEquals(0, n);
is.readAllBytes();
n = is.read(x, 4, 3);
assertEquals(-1, n);
}
@Test
public void testSkip() throws IOException {
assertEquals(15, is.skip(15));
assertEquals(0x0F, is.read());
assertEquals(-1, is.read());
}
@Test
public void testSkip0() throws IOException {
assertEquals(0, is.skip(0));
assertEquals(0x00, is.read());
}
}