package org.webpieces.data.api;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
public class TestByteBufferDataWrapper {
private DataWrapperGenerator dataGen = DataWrapperGeneratorFactory.createDataWrapperGenerator();
@Test
public void testBasicByteBuffer() {
byte[] data = "0123456789".getBytes();
ByteBuffer buffer = ByteBuffer.wrap(data);
DataWrapper wrapper = dataGen.wrapByteBuffer(buffer);
String str1 = wrapper.createStringFrom(0, wrapper.getReadableSize(), Charset.defaultCharset());
Assert.assertEquals("0123456789", str1);
}
@Test
public void testPartialBuffer() {
byte[] data = "0123456789".getBytes();
ByteBuffer buffer = ByteBuffer.allocate(30);
buffer.put(data);
buffer.flip();
DataWrapper wrapper = dataGen.wrapByteBuffer(buffer);
String str1 = wrapper.createStringFrom(0, wrapper.getReadableSize(), Charset.defaultCharset());
Assert.assertEquals("0123456789", str1);
}
@Test
public void testMultipleSlicing() {
byte[] data = "0123456789987654321".getBytes();
ByteBuffer buffer = ByteBuffer.wrap(data);
DataWrapper wrapper = dataGen.wrapByteBuffer(buffer);
List<? extends DataWrapper> split = dataGen.split(wrapper, 10);
DataWrapper first = split.get(0);
List<? extends DataWrapper> split2 = dataGen.split(first, 5);
DataWrapper veryFirst = split2.get(0);
DataWrapper secondOfFirst = split2.get(1);
String firstStr = veryFirst.createStringFrom(0, veryFirst.getReadableSize(), Charset.defaultCharset());
Assert.assertEquals("01234", firstStr);
String secondStr = secondOfFirst.createStringFrom(0, secondOfFirst.getReadableSize(), Charset.defaultCharset());
Assert.assertEquals("56789", secondStr);
List<? extends DataWrapper> split3 = dataGen.split(secondOfFirst, 2);
DataWrapper theOne = split3.get(0);
String theOneStr = theOne.createStringFrom(0, theOne.getReadableSize(), Charset.defaultCharset());
Assert.assertEquals("56", theOneStr);
List<ByteBuffer> buffers = new ArrayList<>();
theOne.addUnderlyingBuffersToList(buffers);
Assert.assertEquals(1, buffers.size());
ByteBuffer buf = buffers.get(0);
Assert.assertEquals(2, buf.remaining());
byte[] bytes = new byte[2];
buf.get(bytes);
String result = new String(bytes);
Assert.assertEquals("56", result);
}
}