This is an automated email from the ASF dual-hosted git repository. aledsage pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git
commit 8f11da59c266f885a1223e509230d89fb7ab96e3 Author: Paul Campbell <paul.campb...@cloudsoft.io> AuthorDate: Tue Oct 9 16:38:52 2018 +0100 [common] Add unit tests for Reflections#findMappedName{AndLog,Maybe}() Full coverage unit tests for these two methods. --- .../brooklyn/util/javalang/ReflectionsTest.java | 125 ++++++++++++++++++++- 1 file changed, 122 insertions(+), 3 deletions(-) diff --git a/utils/common/src/test/java/org/apache/brooklyn/util/javalang/ReflectionsTest.java b/utils/common/src/test/java/org/apache/brooklyn/util/javalang/ReflectionsTest.java index 3c628a9..554ad96 100644 --- a/utils/common/src/test/java/org/apache/brooklyn/util/javalang/ReflectionsTest.java +++ b/utils/common/src/test/java/org/apache/brooklyn/util/javalang/ReflectionsTest.java @@ -24,12 +24,12 @@ import static org.testng.Assert.assertTrue; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.List; +import java.util.*; import org.apache.brooklyn.util.javalang.coerce.CommonAdaptorTypeCoercions; import org.apache.brooklyn.util.javalang.coerce.TypeCoercer; import org.apache.brooklyn.util.javalang.coerce.TypeCoercerExtensible; +import org.assertj.core.api.WithAssertions; import org.testng.Assert; import org.testng.annotations.Test; @@ -38,7 +38,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.common.collect.Sets; -public class ReflectionsTest { +public class ReflectionsTest implements WithAssertions { @Test public void testFindPublicMethodsOrderedBySuper() throws Exception { @@ -229,6 +229,125 @@ public class ReflectionsTest { Assert.assertEquals(Reflections.getAllInterfaces(C.class), ImmutableList.of(M.class, K.class, I.class, J.class, L.class)); } + /** + * Tests for {@link Reflections#findMappedNameAndLog(Map, String)} and + * {@link Reflections#findMappedNameMaybe(Map, String)} methods. + */ + public class FindMappedName { + + @Test + public void givenRenamesIsNullThenReturnOriginalName() { + //given + final Map<String, String> renames = null; + final String originalName = createAName(); + //when + final String result = Reflections.findMappedNameAndLog(renames, originalName); + //then + assertThat(result).isEqualTo(originalName); + } + + @Test + public void givenRenamesIsEmptyThenReturnOriginalName() { + //given + final Map<String, String> renames = new HashMap<>(); + final String originalName = createAName(); + //when + final String result = Reflections.findMappedNameAndLog(renames, originalName); + //then + assertThat(result).isEqualTo(originalName); + } + + @Test + public void givenRenamesHasNoMatchThenReturnOriginalName() { + //given + final Map<String, String> renames = new HashMap<>(); + renames.put(createAName(), createAName()); + final String originalName = createAName(); + //when + final String result = Reflections.findMappedNameAndLog(renames, originalName); + //then + assertThat(result).isEqualTo(originalName); + } + + @Test + public void givenRenamesHasMatchThenReturnUpdatedName() { + //given + final Map<String, String> renames = new HashMap<>(); + final String originalName = createAName(); + final String updatedName = createAName(); + renames.put(originalName, updatedName); + //when + final String result = Reflections.findMappedNameAndLog(renames, originalName); + //then + assertThat(result).isEqualTo(updatedName); + } + + @Test + public void givenInnerClassHasNoMatchThenReturnOriginalName() { + //given + final Map<String, String> renames = new HashMap<>(); + final String originalName = createAName() + "$" + createAName(); + //when + final String result = Reflections.findMappedNameAndLog(renames, originalName); + //then + assertThat(result).isEqualTo(originalName); + } + + @Test + public void givenInnerClassHasMatchThenReturnUpdatedName() { + //given + final Map<String, String> renames = new HashMap<>(); + final String originalName = createAName() + "$" + createAName(); + final String updatedName = createAName(); + renames.put(originalName, updatedName); + //when + final String result = Reflections.findMappedNameAndLog(renames, originalName); + //then + assertThat(result).isEqualTo(updatedName); + } + + @Test + public void givenInnerClassWhenOnlyOuterClassHasMatchThenReturnUpdatedName() { + //given + final Map<String, String> renames = new HashMap<>(); + final String originalOuterClass = createAName(); + final String originalInnerClass = createAName(); + final String originalName = originalOuterClass + "$" + originalInnerClass; + final String updatedOuterClass = createAName(); + final String updatedName = updatedOuterClass + "$" + originalInnerClass; + renames.put(originalOuterClass, updatedOuterClass); + //when + final String result = Reflections.findMappedNameAndLog(renames, originalName); + //then + assertThat(result).isEqualTo(updatedName); + } + + @Test + public void givenInnerClassWhenOuterAndInnerClassHasMatchThenReturnInnerClassUpdatedName() { + //given + final Map<String, String> renames = new HashMap<>(); + // the outer class has been renamed + final String originalOuterClass = createAName(); + final String updatedOuterClass = createAName(); + renames.put(originalOuterClass, updatedOuterClass); + // the inner class has an explicit rename to a different outer class + final String originalInnerClass = createAName(); + final String originalName = originalOuterClass + "$" + originalInnerClass; + final String updatedName = createAName() + "$" + createAName(); + renames.put(originalName, updatedName); + //when + final String result = Reflections.findMappedNameAndLog(renames, originalName); + //then + // the explicit rename overrides the outer class rename + assertThat(result).isEqualTo(updatedName); + } + + private String createAName() { + return UUID.randomUUID().toString(); + } + + } + public static abstract class PublicSuperClass { public abstract void methodOnSuperClass(); }