From f49df2d895602595ee818822f0223eb2c315e1d6 Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Sat, 9 Dec 2017 17:23:14 +0000 Subject: [PATCH 1/8] Remove need in equals() for explicit type --- src/main/java/net/kemitix/mon/TypeAlias.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/kemitix/mon/TypeAlias.java b/src/main/java/net/kemitix/mon/TypeAlias.java index f5dc0c5..92ef4cb 100644 --- a/src/main/java/net/kemitix/mon/TypeAlias.java +++ b/src/main/java/net/kemitix/mon/TypeAlias.java @@ -75,11 +75,11 @@ public abstract class TypeAlias { @SuppressWarnings("unchecked") public final boolean equals(final Object o) { if (o instanceof TypeAlias) { - if (((TypeAlias) o).type.equals(type)) { - return ((TypeAlias) o).map(getValue()::equals); - } else { - return false; - } + final TypeAlias other = (TypeAlias) o; + final Object otherValue = other.getValue(); + final Class otherValueClass = otherValue.getClass(); + return otherValueClass.equals(getValue().getClass()) + && otherValue.equals(getValue()); } return map(o::equals); } From 2f16ab67147ff73d4b533d7daf7f631e50fe4a09 Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Sat, 9 Dec 2017 17:25:01 +0000 Subject: [PATCH 2/8] Remove explicit type as a constructor parameter This rolls back the change made for 0.3.0, reverting the API for TypeAlias --- src/main/java/net/kemitix/mon/TypeAlias.java | 9 +----- .../java/net/kemitix/mon/TypeAliasTest.java | 29 ++++++++++--------- 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/src/main/java/net/kemitix/mon/TypeAlias.java b/src/main/java/net/kemitix/mon/TypeAlias.java index 92ef4cb..4e93272 100644 --- a/src/main/java/net/kemitix/mon/TypeAlias.java +++ b/src/main/java/net/kemitix/mon/TypeAlias.java @@ -38,20 +38,13 @@ public abstract class TypeAlias { */ private final T value; - private final Class type; - /** * Constructor. * * @param value the value - * @param type the type of the value */ - protected TypeAlias( - final T value, - final Class type - ) { + protected TypeAlias(final T value) { this.value = value; - this.type = type; } /** diff --git a/src/test/java/net/kemitix/mon/TypeAliasTest.java b/src/test/java/net/kemitix/mon/TypeAliasTest.java index 41c4222..c462d8b 100644 --- a/src/test/java/net/kemitix/mon/TypeAliasTest.java +++ b/src/test/java/net/kemitix/mon/TypeAliasTest.java @@ -10,7 +10,7 @@ import static org.assertj.core.api.Assertions.assertThat; public class TypeAliasTest { @Test - public void shouldCreateATypeAliasAndGetTheValue() throws Exception { + public void shouldCreateATypeAliasAndGetTheValue() { //given final String value = "value"; //when @@ -19,25 +19,25 @@ public class TypeAliasTest { assertThat(typeAlias.map(value::equals)).isTrue(); } + private TypeAlias givenTypeAlias(final String value) { + return new TypeAlias(value) { + }; + } + @Test public void shouldCreateATypeAliasWithNestedGenericTypes() { //given final Iterable iterable = Collections.emptyList(); //when final TypeAlias> typeAlias = - new TypeAlias>(iterable, Iterable.class) { + new TypeAlias>(iterable) { }; //then assertThat(typeAlias.map(iterable::equals)).isTrue(); } - private TypeAlias givenTypeAlias(final String value) { - return new TypeAlias(value, String.class) { - }; - } - @Test - public void shouldCreateAnAliasedTypeAndGetTheValue() throws Exception { + public void shouldCreateAnAliasedTypeAndGetTheValue() { //given final String value = "value"; //when @@ -50,13 +50,14 @@ public class TypeAliasTest { public void shouldNotBeEqualWhenValueTypesAreDifferent() { //given final TypeAlias stringTypeAlias = givenTypeAlias("1"); - final TypeAlias integerTypeAlias = new TypeAlias(1, Integer.class){}; + final TypeAlias integerTypeAlias = new TypeAlias(1) { + }; //then assertThat(stringTypeAlias).isNotEqualTo(integerTypeAlias); } @Test - public void shouldBeEqualWhenValuesAreTheSame() throws Exception { + public void shouldBeEqualWhenValuesAreTheSame() { //given final String value = "value"; final AnAlias anAlias1 = AnAlias.of(value); @@ -66,7 +67,7 @@ public class TypeAliasTest { } @Test - public void shouldBeEqualToUnAliasedValue() throws Exception { + public void shouldBeEqualToUnAliasedValue() { //given final String value = "value"; final AnAlias anAlias = AnAlias.of(value); @@ -75,7 +76,7 @@ public class TypeAliasTest { } @Test - public void shouldHaveHashCodeOfValue() throws Exception { + public void shouldHaveHashCodeOfValue() { //given final String value = "value"; final AnAlias anAlias = AnAlias.of(value); @@ -84,7 +85,7 @@ public class TypeAliasTest { } @Test - public void shouldHaveSameToStringAsAliasedType() throws Exception { + public void shouldHaveSameToStringAsAliasedType() { //given final String value = "value"; //when @@ -112,7 +113,7 @@ public class TypeAliasTest { * @param value the value */ protected AnAlias(final String value) { - super(value, String.class); + super(value); } protected static AnAlias of(final String value) { From 3c2b7dd5a171abb1d4147afb565f64d4b1076926 Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Sat, 9 Dec 2017 17:26:29 +0000 Subject: [PATCH 3/8] Make TypeAlias.getValue() public again Another revert from 0.3.0. TypeAlias is not meant to be monadic in any form. It is a simple alias for another (non-generic) type. --- src/main/java/net/kemitix/mon/TypeAlias.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/kemitix/mon/TypeAlias.java b/src/main/java/net/kemitix/mon/TypeAlias.java index 4e93272..050abbe 100644 --- a/src/main/java/net/kemitix/mon/TypeAlias.java +++ b/src/main/java/net/kemitix/mon/TypeAlias.java @@ -87,7 +87,7 @@ public abstract class TypeAlias { * * @return the value */ - private T getValue() { + public T getValue() { return value; } } From 27019b23c195c546cda1e93391b5660e4e88c33d Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Sat, 9 Dec 2017 17:35:18 +0000 Subject: [PATCH 4/8] Update and clarify TypeAlias tests --- .../java/net/kemitix/mon/TypeAliasTest.java | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/test/java/net/kemitix/mon/TypeAliasTest.java b/src/test/java/net/kemitix/mon/TypeAliasTest.java index c462d8b..a077205 100644 --- a/src/test/java/net/kemitix/mon/TypeAliasTest.java +++ b/src/test/java/net/kemitix/mon/TypeAliasTest.java @@ -1,9 +1,11 @@ package net.kemitix.mon; +import org.assertj.core.util.Strings; import org.junit.Test; +import java.util.Arrays; import java.util.Collections; -import java.util.function.Function; +import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @@ -16,7 +18,7 @@ public class TypeAliasTest { //when final TypeAlias typeAlias = givenTypeAlias(value); //then - assertThat(typeAlias.map(value::equals)).isTrue(); + assertThat(typeAlias.getValue()).isSameAs(value); } private TypeAlias givenTypeAlias(final String value) { @@ -33,17 +35,17 @@ public class TypeAliasTest { new TypeAlias>(iterable) { }; //then - assertThat(typeAlias.map(iterable::equals)).isTrue(); + assertThat(typeAlias.getValue()).isSameAs(iterable); } @Test - public void shouldCreateAnAliasedTypeAndGetTheValue() { + public void shouldCreateATypeAliasSubclassAndGetTheValue() { //given final String value = "value"; //when final AnAlias anAlias = AnAlias.of(value); //then - assertThat(anAlias.map(value::equals)).isTrue(); + assertThat(anAlias.getValue()).isSameAs(value); } @Test @@ -67,7 +69,7 @@ public class TypeAliasTest { } @Test - public void shouldBeEqualToUnAliasedValue() { + public void shouldBeEqualToRawValue() { //given final String value = "value"; final AnAlias anAlias = AnAlias.of(value); @@ -87,22 +89,22 @@ public class TypeAliasTest { @Test public void shouldHaveSameToStringAsAliasedType() { //given - final String value = "value"; + final List value = Arrays.asList(1, 2, 3); //when - final AnAlias anAlias = AnAlias.of(value); + final TypeAlias> anAlias = new TypeAlias>(value) { + }; //then - assertThat(anAlias.toString()).isEqualTo(value); + assertThat(anAlias.toString()).isEqualTo(value.toString()); } @Test public void shouldMapTypeAlias() { //given final AnAlias anAlias = AnAlias.of("text"); - final Function function = v -> v; //when - final String value = anAlias.map(function); + final String value = anAlias.map(Strings::quote); //then - assertThat(value).isEqualTo("text"); + assertThat(value).isEqualTo("'text'"); } private static class AnAlias extends TypeAlias { From ba4380fe9892c7c4963cff3dccbbfcdbc0bf2860 Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Sat, 9 Dec 2017 17:38:04 +0000 Subject: [PATCH 5/8] Clarify that toString(), equals() and hashCode() all delegate to value --- src/main/java/net/kemitix/mon/TypeAlias.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/net/kemitix/mon/TypeAlias.java b/src/main/java/net/kemitix/mon/TypeAlias.java index 050abbe..451d972 100644 --- a/src/main/java/net/kemitix/mon/TypeAlias.java +++ b/src/main/java/net/kemitix/mon/TypeAlias.java @@ -26,6 +26,9 @@ import java.util.function.Function; /** * Type Alias for other types. * + *

{@link #toString()}, {@link #equals(Object)} and {@link #hashCode()} are all transparent, returning the value + * for the type being aliased.

+ * * @param the type of the alias * * @author Paul Campbell (pcampbell@kemitix.net) From a215c9c137947de23b98f0cdfeaeadcdfdf56f0a Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Sat, 9 Dec 2017 17:38:35 +0000 Subject: [PATCH 6/8] Remove redundant unchecked warning --- src/main/java/net/kemitix/mon/TypeAlias.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/net/kemitix/mon/TypeAlias.java b/src/main/java/net/kemitix/mon/TypeAlias.java index 451d972..7676736 100644 --- a/src/main/java/net/kemitix/mon/TypeAlias.java +++ b/src/main/java/net/kemitix/mon/TypeAlias.java @@ -68,7 +68,6 @@ public abstract class TypeAlias { } @Override - @SuppressWarnings("unchecked") public final boolean equals(final Object o) { if (o instanceof TypeAlias) { final TypeAlias other = (TypeAlias) o; From db3596063e81c4f05f7781a214fa259428ef57d6 Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Sat, 9 Dec 2017 18:53:32 +0000 Subject: [PATCH 7/8] Update CHANGELOG --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 9c9935a..5b7d0cd 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,7 +4,7 @@ CHANGELOG 0.4.0 ----- -* +* Restore public access for `TypeAlias.getValue()` 0.3.0 ----- From ec482211e0951f55198469a34284a5f3904fbd0a Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Sat, 9 Dec 2017 19:23:23 +0000 Subject: [PATCH 8/8] Add missing test shouldNotBeEqualWhenValuesAreNotTheSame --- src/test/java/net/kemitix/mon/TypeAliasTest.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/test/java/net/kemitix/mon/TypeAliasTest.java b/src/test/java/net/kemitix/mon/TypeAliasTest.java index a077205..08a5448 100644 --- a/src/test/java/net/kemitix/mon/TypeAliasTest.java +++ b/src/test/java/net/kemitix/mon/TypeAliasTest.java @@ -68,6 +68,15 @@ public class TypeAliasTest { assertThat(anAlias1).isEqualTo(anAlias2); } + @Test + public void shouldNotBeEqualWhenValuesAreNotTheSame() { + //given + final AnAlias valueA = AnAlias.of("value a"); + final AnAlias valueB = AnAlias.of("value b"); + //then + assertThat(valueA).isNotEqualTo(valueB); + } + @Test public void shouldBeEqualToRawValue() { //given