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;
import org.webpieces.data.impl.AbstractDataWrapper;
public class TestDataWrappers {
private DataWrapperGenerator dataGen = DataWrapperGeneratorFactory.createDataWrapperGenerator();
@Test
public void testSplitZero() {
DataWrapper wrapper1 = dataGen.wrapByteArray("0123456789".getBytes());
DataWrapper wrapper2 = dataGen.wrapByteArray("9876543210".getBytes());
DataWrapper chainDataWrappers = dataGen.chainDataWrappers(wrapper1, wrapper2);
List<? extends DataWrapper> split = dataGen.split(chainDataWrappers, 0);
DataWrapper split1 = split.get(0);
DataWrapper split2 = split.get(1);
String str1 = split1.createStringFrom(0, split1.getReadableSize(), Charset.defaultCharset());
String str2 = split2.createStringFrom(0, split2.getReadableSize(), Charset.defaultCharset());
Assert.assertEquals("", str1);
Assert.assertEquals("01234567899876543210", str2);
}
@Test
public void testSplitAtLength() {
DataWrapper wrapper1 = dataGen.wrapByteArray("0123456789".getBytes());
DataWrapper wrapper2 = dataGen.wrapByteArray("9876543210".getBytes());
DataWrapper chainDataWrappers = dataGen.chainDataWrappers(wrapper1, wrapper2);
List<? extends DataWrapper> split = dataGen.split(chainDataWrappers, chainDataWrappers.getReadableSize());
DataWrapper split1 = split.get(0);
DataWrapper split2 = split.get(1);
String str1 = split1.createStringFrom(0, split1.getReadableSize(), Charset.defaultCharset());
String str2 = split2.createStringFrom(0, split2.getReadableSize(), Charset.defaultCharset());
Assert.assertEquals("01234567899876543210", str1);
Assert.assertEquals("", str2);
}
@Test
public void testEvenSplit() {
DataWrapper wrapper1 = dataGen.wrapByteArray("0123456789".getBytes());
DataWrapper wrapper2 = dataGen.wrapByteArray("9876543210".getBytes());
DataWrapper chainDataWrappers = dataGen.chainDataWrappers(wrapper1, wrapper2);
List<? extends DataWrapper> split = dataGen.split(chainDataWrappers, 10);
DataWrapper split1 = split.get(0);
DataWrapper split2 = split.get(1);
String str1 = split1.createStringFrom(0, split1.getReadableSize(), Charset.defaultCharset());
String str2 = split2.createStringFrom(0, split2.getReadableSize(), Charset.defaultCharset());
Assert.assertEquals("0123456789", str1);
Assert.assertEquals("9876543210", str2);
}
@Test
public void testBasic() {
DataWrapper wrapper1 = dataGen.wrapByteArray("0123456789".getBytes());
DataWrapper wrapper2 = dataGen.wrapByteArray("9876543210".getBytes());
DataWrapper chainDataWrappers = dataGen.chainDataWrappers(wrapper1, wrapper2);
List<? extends DataWrapper> split = dataGen.split(chainDataWrappers, 12);
DataWrapper split1 = split.get(0);
DataWrapper split2 = split.get(1);
Assert.assertEquals("012345678998", split1.createStringFrom(0, split1.getReadableSize(), Charset.defaultCharset()));
Assert.assertEquals("76543210", split2.createStringFrom(0, split2.getReadableSize(), Charset.defaultCharset()));
DataWrapper wrapper3 = dataGen.wrapByteArray("abcdefghij".getBytes());
DataWrapper parent = dataGen.chainDataWrappers(split2, wrapper3);
List<? extends DataWrapper> splitList2 = dataGen.split(parent, 12);
DataWrapper firstPart = splitList2.get(0);
AbstractDataWrapper rightSide = (AbstractDataWrapper) splitList2.get(1);
Assert.assertEquals(3, rightSide.getNumLayers());
String str1 = split1.createStringFrom(0, split1.getReadableSize(), Charset.defaultCharset());
String str2 = firstPart.createStringFrom(0, firstPart.getReadableSize(), Charset.defaultCharset());
String str3 = rightSide.createStringFrom(0, rightSide.getReadableSize(), Charset.defaultCharset());
Assert.assertEquals("01234567899876543210abcdefghij", str1+str2+str3);
List<ByteBuffer> buffers = new ArrayList<>();
split1.addUnderlyingBuffersToList(buffers);
Assert.assertEquals(2, buffers.size());
ByteBuffer buffer1 = buffers.get(0);
ByteBuffer buffer2 = buffers.get(1);
byte[] data = new byte[split1.getReadableSize()];
int length = buffer1.remaining();
buffer1.get(data, 0, length);
buffer2.get(data, length, buffer2.remaining());
String result = new String(data);
Assert.assertEquals("012345678998", result);
}
}