Merge pull request #9 from kemitix/release/0.3.0

Release 0.3.0
This commit is contained in:
Paul Campbell 2017-11-26 20:03:44 +00:00 committed by GitHub
commit 525bb8cc66
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 56 additions and 13 deletions

View file

@ -1,6 +1,11 @@
CHANGELOG CHANGELOG
========= =========
0.3.0
-----
* `TypeAlias.getValue()` removed in favour of using `map()`
0.2.0 0.2.0
----- -----

View file

@ -15,7 +15,7 @@ TypeAlias for Java
<dependency> <dependency>
<groupId>net.kemitix</groupId> <groupId>net.kemitix</groupId>
<artifactId>mon</artifactId> <artifactId>mon</artifactId>
<version>${mon.version}</version> <version>0.3.0</version>
</dependency> </dependency>
``` ```

View file

@ -10,7 +10,7 @@
<version>3.2.4</version> <version>3.2.4</version>
</parent> </parent>
<artifactId>mon</artifactId> <artifactId>mon</artifactId>
<version>0.2.0</version> <version>0.3.0</version>
<properties> <properties>
<junit.version>4.12</junit.version> <junit.version>4.12</junit.version>

View file

@ -38,13 +38,20 @@ public abstract class TypeAlias<T> {
*/ */
private final T value; private final T value;
private final Class<? super T> type;
/** /**
* Constructor. * Constructor.
* *
* @param value the value * @param value the value
* @param type the type of the value
*/ */
protected TypeAlias(final T value) { protected TypeAlias(
final T value,
final Class<? super T> type
) {
this.value = value; this.value = value;
this.type = type;
} }
/** /**
@ -56,25 +63,30 @@ public abstract class TypeAlias<T> {
* @return a TypeAlias * @return a TypeAlias
*/ */
public final <R> R map(final Function<T, R> f) { public final <R> R map(final Function<T, R> f) {
return f.apply(value); return f.apply(getValue());
} }
@Override @Override
public final int hashCode() { public final int hashCode() {
return value.hashCode(); return getValue().hashCode();
} }
@Override @Override
@SuppressWarnings("unchecked")
public final boolean equals(final Object o) { public final boolean equals(final Object o) {
if (o instanceof TypeAlias) { if (o instanceof TypeAlias) {
return value.equals(((TypeAlias) o).value); if (((TypeAlias) o).type.equals(type)) {
return ((TypeAlias<T>) o).map(getValue()::equals);
} else {
return false;
}
} }
return value.equals(o); return map(o::equals);
} }
@Override @Override
public final String toString() { public final String toString() {
return value.toString(); return getValue().toString();
} }
/** /**
@ -82,7 +94,7 @@ public abstract class TypeAlias<T> {
* *
* @return the value * @return the value
*/ */
public T getValue() { private T getValue() {
return value; return value;
} }
} }

View file

@ -2,6 +2,7 @@ package net.kemitix.mon;
import org.junit.Test; import org.junit.Test;
import java.util.Collections;
import java.util.function.Function; import java.util.function.Function;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@ -13,10 +14,26 @@ public class TypeAliasTest {
//given //given
final String value = "value"; final String value = "value";
//when //when
final TypeAlias<String> typeAlias = new TypeAlias<String>(value) { final TypeAlias<String> typeAlias = givenTypeAlias(value);
//then
assertThat(typeAlias.<Boolean>map(value::equals)).isTrue();
}
@Test
public void shouldCreateATypeAliasWithNestedGenericTypes() {
//given
final Iterable<String> iterable = Collections.emptyList();
//when
final TypeAlias<Iterable<String>> typeAlias =
new TypeAlias<Iterable<String>>(iterable, Iterable.class) {
}; };
//then //then
assertThat(typeAlias.getValue()).isEqualTo(value); assertThat(typeAlias.<Boolean>map(iterable::equals)).isTrue();
}
private TypeAlias<String> givenTypeAlias(final String value) {
return new TypeAlias<String>(value, String.class) {
};
} }
@Test @Test
@ -26,7 +43,16 @@ public class TypeAliasTest {
//when //when
final AnAlias anAlias = AnAlias.of(value); final AnAlias anAlias = AnAlias.of(value);
//then //then
assertThat(anAlias.getValue()).isEqualTo(value); assertThat(anAlias.<Boolean>map(value::equals)).isTrue();
}
@Test
public void shouldNotBeEqualWhenValueTypesAreDifferent() {
//given
final TypeAlias<String> stringTypeAlias = givenTypeAlias("1");
final TypeAlias<Integer> integerTypeAlias = new TypeAlias<Integer>(1, Integer.class){};
//then
assertThat(stringTypeAlias).isNotEqualTo(integerTypeAlias);
} }
@Test @Test
@ -86,7 +112,7 @@ public class TypeAliasTest {
* @param value the value * @param value the value
*/ */
protected AnAlias(final String value) { protected AnAlias(final String value) {
super(value); super(value, String.class);
} }
protected static AnAlias of(final String value) { protected static AnAlias of(final String value) {