package me.prettyprint.hom;
import static org.junit.Assert.*;
import java.nio.ByteBuffer;
import java.util.LinkedList;
import java.util.List;
import org.junit.Test;
public class KeyConcatenationDelimiterStrategyTest {
KeyConcatenationDelimiterStrategyImpl keyCatStrat = new KeyConcatenationDelimiterStrategyImpl();
@Test
public void testConcatAndSplitMultipleSegments() {
List<byte[]> segList1 = new LinkedList<byte[]>();
segList1.add("foo".getBytes());
segList1.add("bar".getBytes());
segList1.add("forever".getBytes());
byte[] concat = keyCatStrat.concat(segList1);
assertEquals(
"foo".getBytes().length + keyCatStrat.getDelimiter().length + "bar".getBytes().length
+ keyCatStrat.getDelimiter().length + "forever".getBytes().length, concat.length);
List<byte[]> segList2 = keyCatStrat.split(concat);
assertEquals(segList1.size(), segList2.size());
for (int i = 0; i < segList1.size(); i++) {
assertEquals("'" + new String(segList1.get(i)) + "' expected, but got '"
+ new String(segList2.get(i)) + "'", ByteBuffer.wrap(segList1.get(i)),
ByteBuffer.wrap(segList2.get(i)));
}
}
@Test
public void testConcatAndSplitOneSegments() {
List<byte[]> segList1 = new LinkedList<byte[]>();
segList1.add("foo".getBytes());
byte[] concat = keyCatStrat.concat(segList1);
assertEquals("foo".getBytes().length, concat.length);
List<byte[]> segList2 = keyCatStrat.split(concat);
assertEquals(segList1.size(), segList2.size());
for (int i = 0; i < segList1.size(); i++) {
assertEquals("'" + new String(segList1.get(i)) + "' expected, but got '"
+ new String(segList2.get(i)) + "'", ByteBuffer.wrap(segList1.get(i)),
ByteBuffer.wrap(segList2.get(i)));
}
}
@Test
public void testConcatAndSplitOneSegmentContainingPartOfDelimeter() {
List<byte[]> segList1 = new LinkedList<byte[]>();
segList1.add("f|o|o".getBytes());
byte[] concat = keyCatStrat.concat(segList1);
assertEquals("f|o|o".getBytes().length, concat.length);
List<byte[]> segList2 = keyCatStrat.split(concat);
assertEquals(segList1.size(), segList2.size());
for (int i = 0; i < segList1.size(); i++) {
assertEquals("'" + new String(segList1.get(i)) + "' expected, but got '"
+ new String(segList2.get(i)) + "'", ByteBuffer.wrap(segList1.get(i)),
ByteBuffer.wrap(segList2.get(i)));
}
}
@Test
public void testConcatAndSplitWithEmptySegments() {
List<byte[]> segList1 = new LinkedList<byte[]>();
segList1.add("foo".getBytes());
segList1.add("".getBytes());
segList1.add("".getBytes());
segList1.add("forever".getBytes());
segList1.add("".getBytes());
byte[] concat = keyCatStrat.concat(segList1);
assertEquals(
"foo".getBytes().length + keyCatStrat.getDelimiter().length
+ "".getBytes().length + keyCatStrat.getDelimiter().length
+ "".getBytes().length + keyCatStrat.getDelimiter().length
+ "forever".getBytes().length + keyCatStrat.getDelimiter().length
+ "".getBytes().length
, concat.length)
;
List<byte[]> segList2 = keyCatStrat.split(concat);
assertEquals(segList1.size(), segList2.size());
for (int i = 0; i < segList1.size(); i++) {
assertEquals("'" + new String(segList1.get(i)) + "' expected, but got '"
+ new String(segList2.get(i)) + "'", ByteBuffer.wrap(segList1.get(i)),
ByteBuffer.wrap(segList2.get(i)));
}
}
}