Added tests and fixed some bugs
This commit is contained in:
@ -7,14 +7,17 @@ import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Random;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.instanceOf;
|
||||
import static org.hamcrest.core.Is.is;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
public class ReaderTest {
|
||||
private static final Random RANDOM = new Random();
|
||||
private Reader reader = new Reader();
|
||||
|
||||
@Test
|
||||
@ -38,7 +41,7 @@ public class ReaderTest {
|
||||
@SuppressWarnings("unchecked")
|
||||
public void ensureMPArrayIsEncodedAndDecodedCorrectly() throws Exception {
|
||||
MPArray<MPType<?>> array = new MPArray<>(
|
||||
// new MPBinary(new byte[]{1, 3, 3, 7}),
|
||||
new MPBinary(new byte[]{1, 3, 3, 7}),
|
||||
new MPBoolean(false),
|
||||
new MPDouble(Math.PI),
|
||||
new MPFloat(1.5f),
|
||||
@ -54,6 +57,101 @@ public class ReaderTest {
|
||||
assertThat((MPArray<MPType<?>>) read, is(array));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void ensureStringsAreEncodedAndDecodedCorrectly() throws Exception {
|
||||
ensureStringIsEncodedAndDecodedCorrectly(0);
|
||||
ensureStringIsEncodedAndDecodedCorrectly(31);
|
||||
ensureStringIsEncodedAndDecodedCorrectly(32);
|
||||
ensureStringIsEncodedAndDecodedCorrectly(255);
|
||||
ensureStringIsEncodedAndDecodedCorrectly(256);
|
||||
ensureStringIsEncodedAndDecodedCorrectly(65535);
|
||||
ensureStringIsEncodedAndDecodedCorrectly(65536);
|
||||
}
|
||||
|
||||
private void ensureStringIsEncodedAndDecodedCorrectly(int length) throws Exception {
|
||||
MPString value = new MPString(stringWithLength(length));
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
value.pack(out);
|
||||
MPType read = reader.read(new ByteArrayInputStream(out.toByteArray()));
|
||||
assertThat(read, instanceOf(MPString.class));
|
||||
assertThat((MPString) read, is(value));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void ensureBinariesAreEncodedAndDecodedCorrectly() throws Exception {
|
||||
ensureBinaryIsEncodedAndDecodedCorrectly(0);
|
||||
ensureBinaryIsEncodedAndDecodedCorrectly(255);
|
||||
ensureBinaryIsEncodedAndDecodedCorrectly(256);
|
||||
ensureBinaryIsEncodedAndDecodedCorrectly(65535);
|
||||
ensureBinaryIsEncodedAndDecodedCorrectly(65536);
|
||||
}
|
||||
|
||||
private void ensureBinaryIsEncodedAndDecodedCorrectly(int length) throws Exception {
|
||||
MPBinary value = new MPBinary(new byte[length]);
|
||||
RANDOM.nextBytes(value.getValue());
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
value.pack(out);
|
||||
MPType read = reader.read(new ByteArrayInputStream(out.toByteArray()));
|
||||
assertThat(read, instanceOf(MPBinary.class));
|
||||
assertThat((MPBinary) read, is(value));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void ensureArraysAreEncodedAndDecodedCorrectly() throws Exception {
|
||||
ensureArrayIsEncodedAndDecodedCorrectly(0);
|
||||
ensureArrayIsEncodedAndDecodedCorrectly(15);
|
||||
ensureArrayIsEncodedAndDecodedCorrectly(16);
|
||||
ensureArrayIsEncodedAndDecodedCorrectly(65535);
|
||||
ensureArrayIsEncodedAndDecodedCorrectly(65536);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private void ensureArrayIsEncodedAndDecodedCorrectly(int length) throws Exception {
|
||||
MPNil nil = new MPNil();
|
||||
ArrayList<MPNil> list = new ArrayList<>(length);
|
||||
for (int i = 0; i < length; i++) {
|
||||
list.add(nil);
|
||||
}
|
||||
MPArray<MPNil> value = new MPArray<>(list);
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
value.pack(out);
|
||||
MPType read = reader.read(new ByteArrayInputStream(out.toByteArray()));
|
||||
assertThat(read, instanceOf(MPArray.class));
|
||||
assertThat((MPArray<MPNil>) read, is(value));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void ensureMapsAreEncodedAndDecodedCorrectly() throws Exception {
|
||||
ensureMapIsEncodedAndDecodedCorrectly(0);
|
||||
ensureMapIsEncodedAndDecodedCorrectly(15);
|
||||
ensureMapIsEncodedAndDecodedCorrectly(16);
|
||||
ensureMapIsEncodedAndDecodedCorrectly(65535);
|
||||
ensureMapIsEncodedAndDecodedCorrectly(65536);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private void ensureMapIsEncodedAndDecodedCorrectly(int length) throws Exception {
|
||||
MPNil nil = new MPNil();
|
||||
HashMap<MPNil, MPNil> map = new HashMap<>(length);
|
||||
for (int i = 0; i < length; i++) {
|
||||
map.put(nil, nil);
|
||||
}
|
||||
MPMap<MPNil, MPNil> value = new MPMap<>(map);
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
value.pack(out);
|
||||
MPType read = reader.read(new ByteArrayInputStream(out.toByteArray()));
|
||||
assertThat(read, instanceOf(MPMap.class));
|
||||
assertThat((MPMap<MPNil, MPNil>) read, is(value));
|
||||
}
|
||||
|
||||
private String stringWithLength(int length) {
|
||||
StringBuilder result = new StringBuilder(length);
|
||||
for (int i = 0; i < length; i++) {
|
||||
result.append('a');
|
||||
}
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
private InputStream stream(String resource) {
|
||||
return getClass().getClassLoader().getResourceAsStream(resource);
|
||||
}
|
||||
|
Reference in New Issue
Block a user