package io.katharsis.utils.parser;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.UUID;
import java.util.Collections;
import java.util.Objects;
import static org.assertj.core.api.Assertions.assertThat;
public class TypeParserTest {
@Rule
public ExpectedException expectedException = ExpectedException.none();
private final TypeParser sut = new TypeParser();
@Test
public void onStringShouldReturnString() throws Exception {
String result = sut.parse("String", String.class);
assertThat(result).isExactlyInstanceOf(String.class);
assertThat(result).isEqualTo("String");
}
@Test
public void onNullStringShouldReturnNullString() throws Exception {
String result = sut.parse((String)null, String.class);
assertThat(result).isNull();
}
@Test
public void onCharacterShouldReturnCharacter() throws Exception {
Character result = sut.parse("a", Character.class);
assertThat(result).isExactlyInstanceOf(Character.class);
assertThat(result).isEqualTo('a');
}
@Test
public void onCharacterPrimitiveShouldReturnCharacter() throws Exception {
Character result = sut.parse("a", char.class);
assertThat(result).isExactlyInstanceOf(Character.class);
assertThat(result).isEqualTo('a');
}
@Test
public void onLongCharacterShouldThrowException() throws Exception {
// THEN
expectedException.expect(IllegalArgumentException.class);
// WHEN
sut.parse("ab", Character.class);
}
@Test
public void onUUIDStringShouldReturnUUID() throws Exception {
UUID result = sut.parse("de305d54-75b4-431b-adb2-eb6b9e546014", UUID.class);
assertThat(result).isExactlyInstanceOf(UUID.class);
assertThat(result).isEqualTo(UUID.fromString("de305d54-75b4-431b-adb2-eb6b9e546014"));
}
@Test
public void onBooleanTrueShouldReturnBoolean() throws Exception {
Boolean result = sut.parse("true", Boolean.class);
assertThat(result).isExactlyInstanceOf(Boolean.class);
assertThat(result).isEqualTo(true);
}
@Test
public void onBooleanTShouldReturnBoolean() throws Exception {
Boolean result = sut.parse("t", Boolean.class);
assertThat(result).isExactlyInstanceOf(Boolean.class);
assertThat(result).isEqualTo(true);
}
@Test
public void onBooleanFalseShouldReturnBoolean() throws Exception {
Boolean result = sut.parse("false", Boolean.class);
assertThat(result).isExactlyInstanceOf(Boolean.class);
assertThat(result).isEqualTo(false);
}
@Test
public void onBooleanFShouldReturnBoolean() throws Exception {
Boolean result = sut.parse("f", Boolean.class);
assertThat(result).isExactlyInstanceOf(Boolean.class);
assertThat(result).isEqualTo(false);
}
@Test
public void onBadBooleanShouldThrowException() throws Exception {
// THEN
expectedException.expect(IllegalArgumentException.class);
// WHEN
sut.parse("ab", Boolean.class);
}
@Test
public void onByteShouldReturnByte() throws Exception {
Byte result = sut.parse("1", Byte.class);
assertThat(result).isExactlyInstanceOf(Byte.class);
assertThat(result).isEqualTo((byte) 1);
}
@Test
public void onBytePrimitiveShouldReturnByte() throws Exception {
Byte result = sut.parse("1", byte.class);
assertThat(result).isExactlyInstanceOf(Byte.class);
assertThat(result).isEqualTo((byte)1);
}
@Test
public void onShortShouldReturnShort() throws Exception {
Short result = sut.parse("1", Short.class);
assertThat(result).isExactlyInstanceOf(Short.class);
assertThat(result).isEqualTo((short)1);
}
@Test
public void onShortPrimitiveShouldReturnShort() throws Exception {
Short result = sut.parse("1", short.class);
assertThat(result).isExactlyInstanceOf(Short.class);
assertThat(result).isEqualTo((short)1);
}
@Test
public void onIntegerShouldReturnInteger() throws Exception {
Integer result = sut.parse("1", Integer.class);
assertThat(result).isExactlyInstanceOf(Integer.class);
assertThat(result).isEqualTo(1);
}
@Test
public void onIntegerPrimitiveShouldReturnInteger() throws Exception {
Integer result = sut.parse("1", int.class);
assertThat(result).isExactlyInstanceOf(Integer.class);
assertThat(result).isEqualTo(1);
}
@Test
public void onLongShouldReturnLong() throws Exception {
Long result = sut.parse("1", Long.class);
assertThat(result).isExactlyInstanceOf(Long.class);
assertThat(result).isEqualTo(1);
}
@Test
public void onLongPrimitiveShouldReturnLong() throws Exception {
Long result = sut.parse("1", long.class);
assertThat(result).isExactlyInstanceOf(Long.class);
assertThat(result).isEqualTo(1);
}
@Test
public void onFloatShouldReturnFloat() throws Exception {
Float result = sut.parse("1", Float.class);
assertThat(result).isExactlyInstanceOf(Float.class);
assertThat(result).isEqualTo(1);
}
@Test
public void onFloatPrimitiveShouldReturnFloat() throws Exception {
Float result = sut.parse("1", float.class);
assertThat(result).isExactlyInstanceOf(Float.class);
assertThat(result).isEqualTo(1);
}
@Test
public void onDoubleShouldReturnDouble() throws Exception {
Double result = sut.parse("1", Double.class);
assertThat(result).isExactlyInstanceOf(Double.class);
assertThat(result).isEqualTo(1);
}
@Test
public void onDoublePrimitiveShouldReturnDouble() throws Exception {
Double result = sut.parse("1", double.class);
assertThat(result).isExactlyInstanceOf(Double.class);
assertThat(result).isEqualTo(1);
}
@Test
public void onBigIntegerShouldReturnBigInteger() throws Exception {
BigInteger result = sut.parse("1", BigInteger.class);
assertThat(result).isExactlyInstanceOf(BigInteger.class);
assertThat(result).isEqualTo(new BigInteger("1"));
}
@Test
public void onBigDecimalShouldReturnBigDecimal() throws Exception {
BigDecimal result = sut.parse("1", BigDecimal.class);
assertThat(result).isExactlyInstanceOf(BigDecimal.class);
assertThat(result).isEqualTo(new BigDecimal("1"));
}
@Test
public void onEnumShouldReturnEnumValue() throws Exception {
SampleEnum result = sut.parse("SAMPLE_VALUE", SampleEnum.class);
assertThat(result).isExactlyInstanceOf(SampleEnum.class);
assertThat(result).isEqualTo(SampleEnum.SAMPLE_VALUE);
}
@Test
public void onClassWithStringConstructorShouldReturnClassInstance() throws Exception {
SampleClass result = sut.parse("input", SampleClass.class);
assertThat(result).isExactlyInstanceOf(SampleClass.class);
assertThat(result).isEqualTo(new SampleClass("input"));
}
@Test
public void onUnknownClassShouldThrowException() throws Exception {
// THEN
expectedException.expect(ParserException.class);
// WHEN
sut.parse("input", UnknownClass.class);
}
@Test
public void onListOfLongsShouldReturnListOfLongs() throws Exception {
Iterable<Long> result = sut.parse(Collections.singletonList("1"), Long.class);
assertThat(result).hasSize(1);
assertThat(result.iterator().next()).isEqualTo(1L);
}
private enum SampleEnum {
SAMPLE_VALUE
}
static class SampleClass implements Serializable {
private final String input;
public SampleClass(@SuppressWarnings("SameParameterValue") String input) {
this.input = input;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof SampleClass)) return false;
SampleClass that = (SampleClass) o;
return Objects.equals(input, that.input);
}
@Override
public int hashCode() {
return Objects.hash(input);
}
}
private static class UnknownClass implements Serializable {
}
}