// Copyright © 2011-2014, Esko Luontola <www.orfjackal.net>
// This software is released under the Apache License 2.0.
// The license text is at http://www.apache.org/licenses/LICENSE-2.0
package fi.jumi.core.ipc.encoding;
import fi.jumi.core.ipc.TestUtil;
import org.apache.commons.lang3.RandomStringUtils;
import org.junit.Test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.fail;
public class StringEncodingTest {
@Test
public void test_serialization_of_String() {
assertThat("empty string", roundTripString(""), is(""));
String original = RandomStringUtils.random(10);
assertThat("random string", roundTripString(original), is(original));
}
@Test
public void test_serialization_of_String_with_non_printable_characters() {
for (char c = 0; c < ' '; c++) {
String original = "" + c;
assertThat("0x" + Integer.toHexString(c), roundTripString(original), is(original));
}
}
@Test
public void test_serialization_of_null_String() {
String nullString = null;
assertThat("null string", roundTripNullableString(nullString), is(nullString));
try {
TestUtil.serializeAndDeserialize(nullString, StringEncoding::writeString, StringEncoding::readNullableString);
fail("should have thrown NullPointerException on serialization");
} catch (NullPointerException e) {
// OK
}
try {
TestUtil.serializeAndDeserialize(nullString, StringEncoding::writeNullableString, StringEncoding::readString);
fail("should have thrown NullPointerException on deserialization");
} catch (NullPointerException e) {
// OK
}
}
private static String roundTripString(String original) {
return TestUtil.serializeAndDeserialize(original, StringEncoding::writeString, StringEncoding::readString);
}
private static String roundTripNullableString(String original) {
return TestUtil.serializeAndDeserialize(original, StringEncoding::writeNullableString, StringEncoding::readNullableString);
}
}