You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tamaya.apache.org by pl...@apache.org on 2015/01/28 09:27:51 UTC

incubator-tamaya git commit: TAMAYA-60 Added tests for the configuration builder.

Repository: incubator-tamaya
Updated Branches:
  refs/heads/master 1bb8742ba -> 310195342


TAMAYA-60 Added tests for the configuration builder.


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

Branch: refs/heads/master
Commit: 310195342ac29c6333b183c63f5743fc87b63afd
Parents: 1bb8742
Author: Oliver B. Fischer <pl...@apache.org>
Authored: Wed Jan 28 09:27:30 2015 +0100
Committer: Oliver B. Fischer <pl...@apache.org>
Committed: Wed Jan 28 09:27:30 2015 +0100

----------------------------------------------------------------------
 .../spi/PropertyValueCombinationPolicy.java     |   6 +-
 .../tamaya/builder/ConfigurationBuilder.java    |  12 +-
 .../builder/ConfigurationBuilderTest.java       | 136 ++++++++++++++++++-
 .../builder/util/mockito/NotMockedAnswer.java   |  54 ++++++++
 4 files changed, 202 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/31019534/java8/api/src/main/java/org/apache/tamaya/spi/PropertyValueCombinationPolicy.java
----------------------------------------------------------------------
diff --git a/java8/api/src/main/java/org/apache/tamaya/spi/PropertyValueCombinationPolicy.java b/java8/api/src/main/java/org/apache/tamaya/spi/PropertyValueCombinationPolicy.java
index ffc2bd7..3c5fb42 100644
--- a/java8/api/src/main/java/org/apache/tamaya/spi/PropertyValueCombinationPolicy.java
+++ b/java8/api/src/main/java/org/apache/tamaya/spi/PropertyValueCombinationPolicy.java
@@ -34,8 +34,10 @@ public interface PropertyValueCombinationPolicy {
      * Default overriding collector, where each existing entry ({@code current} is overridden by a subsequent non-null
      * entry evaluated by {@code propertySource.get(key)}.
      */
-    public final PropertyValueCombinationPolicy DEFAULT_OVERRIDING_COLLECTOR = (current, key, propertySource) ->
-            Optional.ofNullable(propertySource.get(key)).filter(s -> !s.isEmpty()).orElse(current);
+    public final PropertyValueCombinationPolicy DEFAULT_OVERRIDING_COLLECTOR =
+        (current, key, propertySource) -> Optional.ofNullable(propertySource.get(key))
+                                                  .filter(s -> !s.isEmpty())
+                                                  .orElse(current);
 
     /**
      * Method that is called for each value evaluated by a PropertySource for the given key. This method is called

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/31019534/modules/builder/src/main/java/org/apache/tamaya/builder/ConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/modules/builder/src/main/java/org/apache/tamaya/builder/ConfigurationBuilder.java b/modules/builder/src/main/java/org/apache/tamaya/builder/ConfigurationBuilder.java
index cabfe7a..4775990 100644
--- a/modules/builder/src/main/java/org/apache/tamaya/builder/ConfigurationBuilder.java
+++ b/modules/builder/src/main/java/org/apache/tamaya/builder/ConfigurationBuilder.java
@@ -53,10 +53,18 @@ public class ConfigurationBuilder {
     }
 
     public ConfigurationBuilder addPropertySources(PropertySource... sources){
+        checkBuilderState();
+
         contextBuilder.addPropertySources(Objects.requireNonNull(sources));
         return this;
     }
 
+    private void checkBuilderState() {
+        if (built) {
+            throw new IllegalStateException("Configuration has already been build.");
+        }
+    }
+
     public ConfigurationBuilder addPropertySourceProviders(PropertySourceProvider... propertySourceProviders){
         contextBuilder.addPropertySourceProviders(propertySourceProviders);
         return this;
@@ -86,9 +94,7 @@ public class ConfigurationBuilder {
      * @return a new Configuration instance.
      */
     public Configuration build() {
-        if (built) {
-            throw new IllegalStateException("building a Configuration can only be done once");
-        }
+        checkBuilderState();
 
         built = true;
 

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/31019534/modules/builder/src/test/java/org/apache/tamaya/builder/ConfigurationBuilderTest.java
----------------------------------------------------------------------
diff --git a/modules/builder/src/test/java/org/apache/tamaya/builder/ConfigurationBuilderTest.java b/modules/builder/src/test/java/org/apache/tamaya/builder/ConfigurationBuilderTest.java
index de8d1fe..57cc5da 100644
--- a/modules/builder/src/test/java/org/apache/tamaya/builder/ConfigurationBuilderTest.java
+++ b/modules/builder/src/test/java/org/apache/tamaya/builder/ConfigurationBuilderTest.java
@@ -18,11 +18,18 @@
  */
 package org.apache.tamaya.builder;
 
+import org.apache.tamaya.ConfigException;
 import org.apache.tamaya.Configuration;
+import org.apache.tamaya.spi.PropertySource;
+import org.junit.Ignore;
 import org.junit.Test;
 
+import static org.apache.tamaya.builder.util.mockito.NotMockedAnswer.NOT_MOCKED_ANSWER;
+import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.notNullValue;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
 
 public class ConfigurationBuilderTest {
 
@@ -47,7 +54,134 @@ public class ConfigurationBuilderTest {
     public void addPropertySourcesDoesNotAcceptNullValue() {
         ConfigurationBuilder builder = new ConfigurationBuilder();
 
-        builder.addPropertySources(null);
+        builder.addPropertySources((PropertySource[])null);
     }
 
+    @Test(expected = IllegalStateException.class)
+    public void propertySourceCanNotBeAddedAfterBuildingTheConfiguration() {
+        PropertySource first = mock(PropertySource.class, NOT_MOCKED_ANSWER);
+
+        doReturn("first").when(first).getName();
+
+        ConfigurationBuilder builder = new ConfigurationBuilder().addPropertySources(first);
+
+        builder.build();
+
+        PropertySource second = mock(PropertySource.class, NOT_MOCKED_ANSWER);
+
+        doReturn("second").when(first).getName();
+
+        builder.addPropertySources(second);
+    }
+
+    @Test
+    public void singleAddedPropertySourceIsUsed() {
+        PropertySource source = mock(PropertySource.class, NOT_MOCKED_ANSWER);
+
+        doReturn("one").when(source).getName();
+        doReturn("a").when(source).get("keyOfA");
+
+        ConfigurationBuilder builder = new ConfigurationBuilder().addPropertySources(source);
+
+        Configuration config = builder.build();
+
+        String valueOfA = config.get("keyOfA");
+
+        assertThat(valueOfA, notNullValue());
+        assertThat(valueOfA, equalTo("a"));
+    }
+
+    @Test
+    public void twoAddedPropertySourcesAreUsed() {
+        PropertySource sourceOne = mock(PropertySource.class, NOT_MOCKED_ANSWER);
+
+        doReturn("one").when(sourceOne).getName();
+        doReturn("b").when(sourceOne).get("keyOfA");
+        doReturn(10).when(sourceOne).getOrdinal();
+
+        PropertySource sourceTwo = mock(PropertySource.class, NOT_MOCKED_ANSWER);
+        doReturn("two").when(sourceTwo).getName();
+        doReturn("a").when(sourceTwo).get("keyOfA");
+        doReturn(10).when(sourceTwo).getOrdinal();
+
+        ConfigurationBuilder builder = new ConfigurationBuilder().addPropertySources(sourceOne)
+                                                                 .addPropertySources(sourceTwo);
+
+        Configuration config = builder.build();
+
+        String valueOfA = config.get("keyOfA");
+
+        assertThat(valueOfA, notNullValue());
+        assertThat(valueOfA, equalTo("a"));
+    }
+
+    @Ignore
+    @Test(expected = ConfigException.class)
+    public void twoPropertySourcesSamePrioritySameKey() {
+        PropertySource sourceOne = mock(PropertySource.class, NOT_MOCKED_ANSWER);
+
+        doReturn("one").when(sourceOne).getName();
+        doReturn("b").when(sourceOne).get("keyOfA");
+        doReturn(20).when(sourceOne).getOrdinal();
+
+        PropertySource sourceTwo = mock(PropertySource.class, NOT_MOCKED_ANSWER);
+        doReturn("two").when(sourceTwo).getName();
+        doReturn("a").when(sourceTwo).get("keyOfA");
+        doReturn(20).when(sourceTwo).getOrdinal();
+
+        ConfigurationBuilder builder = new ConfigurationBuilder().addPropertySources(sourceOne)
+                                                                 .addPropertySources(sourceTwo);
+
+        Configuration config = builder.build();
+
+        config.get("keyOfA");
+    }
+
+    @Test
+    public void twoPropertySourcesDiffPrioritySameKeyLowerAddedFirst() {
+        PropertySource sourceOne = mock(PropertySource.class, NOT_MOCKED_ANSWER);
+
+        doReturn("one").when(sourceOne).getName();
+        doReturn("b").when(sourceOne).get("keyOfA");
+        doReturn(10).when(sourceOne).getOrdinal();
+
+        PropertySource sourceTwo = mock(PropertySource.class, NOT_MOCKED_ANSWER);
+        doReturn("two").when(sourceTwo).getName();
+        doReturn("a").when(sourceTwo).get("keyOfA");
+        doReturn(20).when(sourceTwo).getOrdinal();
+
+        ConfigurationBuilder builder = new ConfigurationBuilder().addPropertySources(sourceOne)
+                                                                 .addPropertySources(sourceTwo);
+
+        Configuration config = builder.build();
+
+        String valueOfA = config.get("keyOfA");
+
+        assertThat(valueOfA, notNullValue());
+        assertThat(valueOfA, equalTo("a"));
+    }
+
+    @Test
+    public void twoPropertySourcesDiffPrioritySameKeyHigherAddedFirst() {
+        PropertySource sourceOne = mock(PropertySource.class, NOT_MOCKED_ANSWER);
+
+        doReturn("one").when(sourceOne).getName();
+        doReturn("b").when(sourceOne).get("keyOfA");
+        doReturn(30).when(sourceOne).getOrdinal();
+
+        PropertySource sourceTwo = mock(PropertySource.class, NOT_MOCKED_ANSWER);
+        doReturn("two").when(sourceTwo).getName();
+        doReturn("a").when(sourceTwo).get("keyOfA");
+        doReturn(20).when(sourceTwo).getOrdinal();
+
+        ConfigurationBuilder builder = new ConfigurationBuilder().addPropertySources(sourceOne)
+                                                                 .addPropertySources(sourceTwo);
+
+        Configuration config = builder.build();
+
+        String valueOfA = config.get("keyOfA");
+
+        assertThat(valueOfA, notNullValue());
+        assertThat(valueOfA, equalTo("b"));
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/31019534/modules/builder/src/test/java/org/apache/tamaya/builder/util/mockito/NotMockedAnswer.java
----------------------------------------------------------------------
diff --git a/modules/builder/src/test/java/org/apache/tamaya/builder/util/mockito/NotMockedAnswer.java b/modules/builder/src/test/java/org/apache/tamaya/builder/util/mockito/NotMockedAnswer.java
new file mode 100644
index 0000000..d0ec79b
--- /dev/null
+++ b/modules/builder/src/test/java/org/apache/tamaya/builder/util/mockito/NotMockedAnswer.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tamaya.builder.util.mockito;
+
+import org.mockito.exceptions.base.MockitoException;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+
+import java.io.Serializable;
+
+public class NotMockedAnswer implements Answer<Object>, Serializable {
+    public final static NotMockedAnswer NOT_MOCKED_ANSWER = new NotMockedAnswer();
+
+    private NotMockedAnswer() {
+    }
+
+    @Override
+    public Object answer(InvocationOnMock invocation) throws Throwable {
+        StringBuilder msgBuilder = new StringBuilder();
+
+        msgBuilder.append("Invocation of method not mocked: ")
+                  .append(invocation.getMethod().toGenericString());
+
+        if (invocation.getArguments().length > 0) {
+            msgBuilder.append(" Supplied arguments: ");
+
+            for (int i = 0; i < invocation.getArguments().length; i++) {
+                msgBuilder.append(invocation.getArguments()[i]);
+
+                if (i - 1 < invocation.getArguments().length) {
+                    msgBuilder.append(", ");
+                }
+            }
+        }
+
+        throw new MockitoException(msgBuilder.toString());
+    }
+}