Repository: incubator-tamaya
Updated Branches:
  refs/heads/master 135792e9f -> ca4de3dc4


TAMAYA-327: Consistent signature creating ConversionContexts

Comments in ConversionContext lead me to believe that supportedFormats
should have their order maintained after import.  The HashSet that the
Builder object uses as a backer will not accomplish that goal.  This
change converts the Builder to use a LinkedHashSet supportedFormats, as
well as the object proper.

Some additional tests have been added here in pursuit of TAMAYA-288's
additional code coverage.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/ca4de3dc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/ca4de3dc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/ca4de3dc

Branch: refs/heads/master
Commit: ca4de3dc49fefa020e89073b8032be7de20ab27d
Parents: 135792e
Author: William Lieurance <[email protected]>
Authored: Thu Feb 1 14:16:27 2018 -0600
Committer: William Lieurance <[email protected]>
Committed: Mon Feb 5 18:24:25 2018 -0600

----------------------------------------------------------------------
 .../apache/tamaya/spi/ConversionContext.java    |  8 +--
 .../tamaya/spi/ConversionContextTest.java       | 73 ++++++++++++++++----
 2 files changed, 62 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/ca4de3dc/code/api/src/main/java/org/apache/tamaya/spi/ConversionContext.java
----------------------------------------------------------------------
diff --git 
a/code/api/src/main/java/org/apache/tamaya/spi/ConversionContext.java 
b/code/api/src/main/java/org/apache/tamaya/spi/ConversionContext.java
index ac8de68..5fc3273 100644
--- a/code/api/src/main/java/org/apache/tamaya/spi/ConversionContext.java
+++ b/code/api/src/main/java/org/apache/tamaya/spi/ConversionContext.java
@@ -23,7 +23,7 @@ import org.apache.tamaya.TypeLiteral;
 
 import java.lang.reflect.AnnotatedElement;
 import java.util.ArrayList;
-import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
@@ -39,7 +39,7 @@ public class ConversionContext {
     private final String key;
     private final TypeLiteral<?> targetType;
     private final AnnotatedElement annotatedElement;
-    private final List<String> supportedFormats = new ArrayList<>();
+    private final Set<String> supportedFormats = new LinkedHashSet<>();
     private final ConfigurationContext configurationContext;
 
     /**
@@ -144,8 +144,8 @@ public class ConversionContext {
         private TypeLiteral<?> targetType;
         /** The injection target (only set with injection used). */
         private AnnotatedElement annotatedElement;
-        /** The ordered list of formats tried. */
-        private final Set<String> supportedFormats = new HashSet<>();
+        /** The ordered set of formats tried. */
+        private final Set<String> supportedFormats = new LinkedHashSet<>();
 
         /**
          * Creates a new Builder instance.

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/ca4de3dc/code/api/src/test/java/org/apache/tamaya/spi/ConversionContextTest.java
----------------------------------------------------------------------
diff --git 
a/code/api/src/test/java/org/apache/tamaya/spi/ConversionContextTest.java 
b/code/api/src/test/java/org/apache/tamaya/spi/ConversionContextTest.java
index 30f5aba..f3c8cec 100644
--- a/code/api/src/test/java/org/apache/tamaya/spi/ConversionContextTest.java
+++ b/code/api/src/test/java/org/apache/tamaya/spi/ConversionContextTest.java
@@ -18,6 +18,8 @@
  */
 package org.apache.tamaya.spi;
 
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
 import org.apache.tamaya.ConfigOperator;
 import org.apache.tamaya.ConfigQuery;
 import org.apache.tamaya.Configuration;
@@ -25,6 +27,7 @@ import org.apache.tamaya.TypeLiteral;
 import org.junit.Test;
 
 import java.net.InetAddress;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -34,22 +37,29 @@ import static org.junit.Assert.*;
  * Tests for {@link ConversionContext}, created by atsticks on 20.08.16.
  */
 public class ConversionContextTest {
+
     @Test
-    public void getKey() throws Exception {
+    public void getSetKey() throws Exception {
         ConversionContext ctx = new ConversionContext.Builder("getKey", 
TypeLiteral.of(String.class)).build();
         assertEquals("getKey", ctx.getKey());
+        ctx = new ConversionContext.Builder("getKey", 
TypeLiteral.of(String.class)).setKey("setKey").build();
+        assertEquals("setKey", ctx.getKey());
     }
 
     @Test
-    public void getTargetType() throws Exception {
+    public void getSetTargetType() throws Exception {
         ConversionContext ctx = new ConversionContext.Builder("getTargetType", 
TypeLiteral.of(String.class)).build();
         assertEquals(TypeLiteral.of(String.class), ctx.getTargetType());
+        ctx = new ConversionContext.Builder("setTargetType", 
TypeLiteral.of(String.class)).setTargetType(TypeLiteral.of(Integer.class)).build();
+        assertEquals(TypeLiteral.of(Integer.class), ctx.getTargetType());
     }
 
     @Test
-    public void getAnnotatedElement() throws Exception {
+    public void getSetAnnotatedElement() throws Exception {
         ConversionContext ctx = new 
ConversionContext.Builder("getAnnotatedElement", 
TypeLiteral.of(List.class)).build();
         assertNull(ctx.getAnnotatedElement());
+        ctx = new 
ConversionContext.Builder(TypeLiteral.of(List.class)).setAnnotatedElement(MyAnnotatedElement).build();
+        assertEquals(MyAnnotatedElement, ctx.getAnnotatedElement());
     }
 
     @Test
@@ -62,35 +72,68 @@ public class ConversionContextTest {
 
     @Test
     public void testSupportedFormats() throws Exception {
-        ConversionContext ctx = new 
ConversionContext.Builder("getAnnotatedElement", TypeLiteral.of(List.class))
-                .addSupportedFormats(MyConverter.class, "0.0.0.0/nnn").build();
-        assertTrue(ctx.getSupportedFormats().contains("0.0.0.0/nnn 
(MyConverter)"));
+        ArrayList<String> readable = new ArrayList<>(2);
+        readable.add("0.0.0.0/nnn (MyConverter)");
+        readable.add("x.x.x.x/yyy (MyConverter)");
+        ArrayList<String> writeable = new ArrayList<>(2);
+        writeable.add("0.0.0.0/nnn");
+        writeable.add("x.x.x.x/yyy");
+
+        ConversionContext ctx = new 
ConversionContext.Builder("getSupportedFormats", TypeLiteral.of(List.class))
+                .addSupportedFormats(MyConverter.class, writeable.get(0), 
writeable.get(1)).build();
+        assertTrue(ctx.getSupportedFormats().containsAll(readable));
+        assertTrue(ctx.getSupportedFormats().indexOf(readable.get(0))
+                < ctx.getSupportedFormats().indexOf(readable.get(1)));
+
+        ctx = new 
ConversionContext.Builder(TypeLiteral.of(List.class)).build();
+        assertTrue(ctx.getSupportedFormats().isEmpty());
+        ctx.addSupportedFormats(MyConverter.class, writeable.get(0), 
writeable.get(1));
+        assertTrue(ctx.getSupportedFormats().containsAll(readable));
+        assertTrue(ctx.getSupportedFormats().indexOf(readable.get(0))
+                < ctx.getSupportedFormats().indexOf(readable.get(1)));
     }
 
     @Test
     public void testToString() throws Exception {
-        ConversionContext ctx = new 
ConversionContext.Builder("getAnnotatedElement", TypeLiteral.of(List.class))
-                .addSupportedFormats(MyConverter.class, "0.0.0.0/nnn").build();
-        assertEquals("ConversionContext{configuration=null, 
key='getAnnotatedElement', targetType=TypeLiteral{type=interface 
java.util.List}, annotatedElement=null, supportedFormats=[0.0.0.0/nnn 
(MyConverter)]}", ctx.toString());
+        ConversionContext ctx = new ConversionContext.Builder("toString", 
TypeLiteral.of(List.class))
+                .addSupportedFormats(MyConverter.class, "0.0.0.0/nnn", 
"x.x.x.x/yyy").build();
+        assertEquals("ConversionContext{configuration=null, key='toString', 
targetType=TypeLiteral{type=interface java.util.List}, annotatedElement=null, 
supportedFormats=[0.0.0.0/nnn (MyConverter), x.x.x.x/yyy (MyConverter)]}", 
ctx.toString());
     }
 
     @Test
-    public void getConfigurationContext() throws Exception {
+    public void testGetConfigurationContext() throws Exception {
         ConfigurationContext context = new MyConfigurationContext();
-        ConversionContext ctx = new 
ConversionContext.Builder("getAnnotatedElement", TypeLiteral.of(List.class))
+        ConversionContext ctx = new 
ConversionContext.Builder("getConfigurationContext", TypeLiteral.of(List.class))
                 .setConfigurationContext(context).build();
         assertEquals(context, ctx.getConfigurationContext());
     }
 
+    private static final AnnotatedElement MyAnnotatedElement = new 
AnnotatedElement() {
+        @Override
+        public <T extends Annotation> T getAnnotation(Class<T> 
annotationClass) {
+            throw new UnsupportedOperationException("Not supported yet.");
+        }
+
+        @Override
+        public Annotation[] getAnnotations() {
+            throw new UnsupportedOperationException("Not supported yet.");
+        }
+
+        @Override
+        public Annotation[] getDeclaredAnnotations() {
+            throw new UnsupportedOperationException("Not supported yet.");
+        }
+    };
+
+    private static final class MyConverter implements 
PropertyConverter<InetAddress> {
 
-    private static final class MyConverter implements 
PropertyConverter<InetAddress>{
         @Override
         public InetAddress convert(String value, ConversionContext context) {
             return null;
         }
     }
 
-    private static final class MyConfigurationContext implements 
ConfigurationContext{
+    private static final class MyConfigurationContext implements 
ConfigurationContext {
 
         @Override
         public void addPropertySources(PropertySource... propertySources) {
@@ -138,7 +181,7 @@ public class ConversionContextTest {
         }
     }
 
-    private static final class MyConfiguration implements Configuration{
+    private static final class MyConfiguration implements Configuration {
 
         @Override
         public String get(String key) {
@@ -191,4 +234,4 @@ public class ConversionContextTest {
         }
     }
 
-}
\ No newline at end of file
+}

Reply via email to