[TAMAYA-244] Wrote more tests and fixed some issues.

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

Branch: refs/heads/master
Commit: cdd7f9c0b007bc4837d4f5ae015c110a8ca392e2
Parents: 7c0faa9
Author: Oliver B. Fischer <[email protected]>
Authored: Mon Mar 27 22:27:54 2017 +0200
Committer: Oliver B. Fischer <[email protected]>
Committed: Mon Mar 27 22:27:54 2017 +0200

----------------------------------------------------------------------
 .../functions/PropertySourceFunctions.java      | 109 +++++--
 .../functions/ValueMappedPropertySource.java    |   6 +-
 .../functions/InMemoryPropertySource.java       |   3 +-
 .../functions/PropertySourceFunctionsTest.java  | 307 +++++++++++++++++--
 .../ValueMappedPropertySourceTest.java          | 183 +++++++++++
 5 files changed, 558 insertions(+), 50 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cdd7f9c0/modules/functions/src/main/java/org/apache/tamaya/functions/PropertySourceFunctions.java
----------------------------------------------------------------------
diff --git 
a/modules/functions/src/main/java/org/apache/tamaya/functions/PropertySourceFunctions.java
 
b/modules/functions/src/main/java/org/apache/tamaya/functions/PropertySourceFunctions.java
index 4646df5..6f20d6f 100644
--- 
a/modules/functions/src/main/java/org/apache/tamaya/functions/PropertySourceFunctions.java
+++ 
b/modules/functions/src/main/java/org/apache/tamaya/functions/PropertySourceFunctions.java
@@ -22,15 +22,9 @@ import org.apache.tamaya.ConfigurationProvider;
 import org.apache.tamaya.spi.PropertySource;
 import org.apache.tamaya.spi.PropertyValue;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
+import java.util.*;
+
+import static java.lang.System.arraycopy;
 
 /**
  * Accessor that provides useful functions along with configuration.
@@ -83,28 +77,89 @@ public final class PropertySourceFunctions {
      *
      * @param key        the fully qualified entry key, not null
      * @param sectionKey the section key, not null
+     *
      * @return true, if the entry is exact in this section
      */
     public static boolean isKeyInSection(String key, String sectionKey) {
+        Objects.requireNonNull(key, "Key must be given.");
+        Objects.requireNonNull(sectionKey, "Section key must be given.");
+
+        sectionKey = normalizeSectionKey(sectionKey);
+
         int lastIndex = key.lastIndexOf('.');
         String curAreaKey = lastIndex > 0 ? key.substring(0, lastIndex) : "";
         return curAreaKey.equals(sectionKey);
     }
 
+    private static String normalizeKey(String key) {
+        return key.startsWith(".") ? key.substring(1)
+                                   : key;
+    }
+
+    static String normalizeSectionKey(String sectionKey) {
+        // Ignore unneeded and trailing dot at the end of the section key
+
+        String normalizedKey = sectionKey.endsWith(".")
+                   ? sectionKey.substring(0, sectionKey.length() - 1)
+                   : sectionKey;
+
+        normalizedKey = sectionKey.startsWith(".") ? sectionKey.length() == 1 
? ""
+                                                                              
: normalizedKey.substring(1)
+                                                   : normalizedKey;
+
+        return normalizedKey;
+    }
+
     /**
      * Calculates the current section key and compares it to the given section 
keys.
      *
-     * @param key         the fully qualified entry key, not null
-     * @param sectionKeys the section keys, not null
-     * @return true, if the entry is exact in this section
+     * @param key             the fully qualified entry key, not {@code null}
+     * @param sectionKey      the section keys, not {@code null}
+     * @param moreSectionKeys the more section keys, not {@code null}
+     *
+     * @return true, if the entry is in one of the given sections
      */
-    public static boolean isKeyInSections(String key, String... sectionKeys) {
+    public static boolean isKeyInSections(String key, String sectionKey, 
String... moreSectionKeys) {
+        Objects.requireNonNull(key, "Key must be given.");
+        Objects.requireNonNull(sectionKey, "At least one section key must be 
given.");
+        Objects.requireNonNull(moreSectionKeys, "Additional section keys must 
not be null.");
+
+        String[] sectionKeys = new String[moreSectionKeys.length + 1];
+        sectionKeys[0] = sectionKey;
+
+        if (moreSectionKeys.length > 0) {
+            arraycopy(moreSectionKeys, 0, sectionKeys, 1, 
moreSectionKeys.length);
+        }
+
+        return isKeyInSections(key, sectionKeys);
+    }
+
+    /**
+     * Calculates the current section key and compares it to the given section 
keys.
+     *
+     * @param key             the fully qualified entry key, not {@code null}
+     * @param sectionKeys     the section keys, not {@code null}
+     *
+     *  @return true, if the entry is in one of the given sections
+     */
+    public static boolean isKeyInSections(String key, String[] sectionKeys) {
+        Objects.requireNonNull(key, "Key must be given.");
+        Objects.requireNonNull(sectionKeys, "Section keys must be given.");
+
+        boolean result = false;
+
         for (String areaKey : sectionKeys) {
+            if (areaKey == null) {
+                continue;
+            }
+
             if (isKeyInSection(key, areaKey)) {
-                return true;
+                result = true;
+                break;
             }
         }
-        return false;
+
+        return result;
     }
 
     /**
@@ -117,10 +172,12 @@ public final class PropertySourceFunctions {
      */
     public static Set<String> sections(Map<String, String> properties) {
         final Set<String> areas = new HashSet<>();
-        for (String s : properties.keySet()) {
-            int index = s.lastIndexOf('.');
+        for (String key : properties.keySet()) {
+            String normalizedKey = normalizeKey(key);
+
+            int index = normalizedKey.lastIndexOf('.');
             if (index > 0) {
-                areas.add(s.substring(0, index));
+                areas.add(normalizedKey.substring(0, index));
             } else {
                 areas.add("<root>");
             }
@@ -139,15 +196,19 @@ public final class PropertySourceFunctions {
      */
     public static Set<String> transitiveSections(Map<String, String> 
properties) {
         final Set<String> transitiveAreas = new HashSet<>();
-        for (String s : sections(properties)) {
-            int index = s.lastIndexOf('.');
-            if (index < 0) {
+        for (String section : sections(properties)) {
+            section = normalizeSectionKey(section);
+
+            int index = section.lastIndexOf('.');
+            if (index < 0 && section.isEmpty()) {
                 transitiveAreas.add("<root>");
+            } if (index < 0) {
+                transitiveAreas.add(section);
             } else {
                 while (index > 0) {
-                    s = s.substring(0, index);
-                    transitiveAreas.add(s);
-                    index = s.lastIndexOf('.');
+                    section = section.substring(0, index);
+                    transitiveAreas.add(section);
+                    index = section.lastIndexOf('.');
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cdd7f9c0/modules/functions/src/main/java/org/apache/tamaya/functions/ValueMappedPropertySource.java
----------------------------------------------------------------------
diff --git 
a/modules/functions/src/main/java/org/apache/tamaya/functions/ValueMappedPropertySource.java
 
b/modules/functions/src/main/java/org/apache/tamaya/functions/ValueMappedPropertySource.java
index 6264a43..dfb128f 100644
--- 
a/modules/functions/src/main/java/org/apache/tamaya/functions/ValueMappedPropertySource.java
+++ 
b/modules/functions/src/main/java/org/apache/tamaya/functions/ValueMappedPropertySource.java
@@ -62,8 +62,10 @@ class ValueMappedPropertySource implements PropertySource{
     @Override
     public Map<String, PropertyValue> getProperties() {
         Map<String,PropertyValue> result = new HashMap<>();
-        for(PropertyValue val:source.getProperties().values()) {
-            result.put(val.getKey(), 
val.toBuilder().setValue(valueFilter.mapProperty(val.getKey(), 
val.getValue())).build());
+        for(PropertyValue val : source.getProperties().values()) {
+            String mappedValue = valueFilter.mapProperty(val.getKey(), 
val.getValue());
+            PropertyValue value = 
val.toBuilder().setValue(mappedValue).build();
+            result.put(val.getKey(), value);
         }
         return result;
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cdd7f9c0/modules/functions/src/test/java/org/apache/tamaya/functions/InMemoryPropertySource.java
----------------------------------------------------------------------
diff --git 
a/modules/functions/src/test/java/org/apache/tamaya/functions/InMemoryPropertySource.java
 
b/modules/functions/src/test/java/org/apache/tamaya/functions/InMemoryPropertySource.java
index 5f9b236..77ad378 100644
--- 
a/modules/functions/src/test/java/org/apache/tamaya/functions/InMemoryPropertySource.java
+++ 
b/modules/functions/src/test/java/org/apache/tamaya/functions/InMemoryPropertySource.java
@@ -68,7 +68,8 @@ public class InMemoryPropertySource implements PropertySource 
{
         Map<String, PropertyValue> result = new HashMap<>();
 
         for (Map.Entry<String, String> entry : properties.entrySet()) {
-            result.put(entry.getKey(), PropertyValue.of(entry.getKey(), 
entry.getValue(), getName()));
+            PropertyValue value = PropertyValue.of(entry.getKey(), 
entry.getValue(), getName());
+            result.put(entry.getKey(), value);
         }
 
         return result;

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cdd7f9c0/modules/functions/src/test/java/org/apache/tamaya/functions/PropertySourceFunctionsTest.java
----------------------------------------------------------------------
diff --git 
a/modules/functions/src/test/java/org/apache/tamaya/functions/PropertySourceFunctionsTest.java
 
b/modules/functions/src/test/java/org/apache/tamaya/functions/PropertySourceFunctionsTest.java
index 2e90fbc..aa51135 100644
--- 
a/modules/functions/src/test/java/org/apache/tamaya/functions/PropertySourceFunctionsTest.java
+++ 
b/modules/functions/src/test/java/org/apache/tamaya/functions/PropertySourceFunctionsTest.java
@@ -20,87 +20,348 @@ package org.apache.tamaya.functions;
 
 import org.apache.tamaya.functions.PropertySourceFunctions;
 import org.apache.tamaya.spi.PropertySource;
+import org.assertj.core.api.ThrowableAssert;
+import org.assertj.core.description.TextDescription;
+import org.junit.Ignore;
 import org.junit.Test;
 
-import static org.junit.Assert.*;
+import java.util.HashMap;
+import java.util.Set;
+
+import static org.apache.tamaya.functions.PropertySourceFunctions.*;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
-/**
- * Created by Anatole on 01.10.2015.
- */
 public class PropertySourceFunctionsTest {
 
+    @Ignore
     @Test
     public void testAddMetaData() throws Exception {
-// TODO implement test
+        throw new RuntimeException("Not implement or look at me!");
+    }
+
+    /*
+     * Tests for isKeyInSection(String, String)
+     */
+
+    @Test
+    public void isKeyInSectionThrowsNPEIfKeyIsNull() {
+        assertThatThrownBy(new ThrowableAssert.ThrowingCallable() {
+            @Override
+            public void call() throws Throwable {
+                isKeyInSection("a.b.c", null);
+            }
+        }).isInstanceOf(NullPointerException.class)
+          .hasMessage("Section key must be given.");
+    }
+
+    @Test
+    public void isKeyInSectionThrowsNPEIfSectionKeyIsNull() {
+        assertThatThrownBy(new ThrowableAssert.ThrowingCallable() {
+            @Override
+            public void call() throws Throwable {
+                isKeyInSection(null, "a.b.c");
+            }
+        }).isInstanceOf(NullPointerException.class)
+          .hasMessage("Key must be given.");
+    }
+
+    @Test
+    public void isKeyInSectionForKeyInRootSection() {
+        String key = "key";
+        String sectionKey = "";
+
+        boolean result = isKeyInSection(key, sectionKey);
+
+        assertThat(result).describedAs("Key '%s' is in root section '%s'")
+                          .isTrue();
+    }
+
+    @Test
+    public void isKeyInSectionForKeyInExplicitRootSection() {
+        String key = "key";
+        String sectionKey = ".";
+
+        boolean result = isKeyInSection(key, sectionKey);
+
+        assertThat(result).describedAs("Key '%s' is in root section '%s'")
+                          .isTrue();
+    }
+
+    @Test
+    public void isKeyInSectionForKeyInSection() throws Exception {
+        String key = "abc.def.g.h.key";
+        String section = "abc.def.g.h";
+
+        boolean result = isKeyInSection(key, section);
+
+        assertThat(result).describedAs("Key %s is in section %s", key, section)
+                          .isTrue();
+    }
+
+    @Test
+    public void isKeyInSectionForKeyNotInSection() throws Exception {
+        String key = "abc.def.g.h.i.key";
+        String section = "abc.def.g.h";
+
+        boolean result = isKeyInSection(key, section);
+
+        assertThat(result).describedAs("Key %s is not in section %s", key, 
section)
+                          .isFalse();
+    }
+
+    @Test
+    public void isKeyInSectionIgnoresTrailingDotAtTheEndOfTheSection() throws 
Exception {
+        String key = "abc.def.g.h.key";
+        String section = "abc.def.g.h.";
+
+        boolean result = isKeyInSection(key, section);
+
+        assertThat(result).describedAs("Key %s is in section %s", key, section)
+                          .isTrue();
+    }
+
+
+    /*
+     * Tests for isKeyInSections(String, String, String...)
+     */
+
+    @Test
+    public void isKeyInSectionsStringStringStringVarargThrowsNPEIfKeyIsNull() {
+        assertThatThrownBy(new ThrowableAssert.ThrowingCallable() {
+            @Override
+            public void call() throws Throwable {
+                isKeyInSections(null, "a.b.", "a.b", "b.c");
+            }
+        }).isInstanceOf(NullPointerException.class)
+          .hasMessage("Key must be given.");
+    }
+
+    @Test
+    public void 
isKeyInSectionsStringStringStringVarargsThrowsNPEIfFirstSectionIsNotGiven() {
+        assertThatThrownBy(new ThrowableAssert.ThrowingCallable() {
+            @Override
+            public void call() throws Throwable {
+                isKeyInSections("key", (String)null, "a.b");
+            }
+        }).isInstanceOf(NullPointerException.class)
+          .hasMessage("At least one section key must be given.");
+    }
+
+    @Test
+    public void 
isKeyInSectionsStringStringStringVarargshrowsNPEIfMoreSectionKeysIsNull() {
+        // null should not cause any problems
+        boolean result = isKeyInSections("key", "l.b", (String) null);
+
+        assertThat(result).isFalse();
     }
 
     @Test
-    public void testIsKeyInSection() throws Exception {
-// TODO implement test
+    public void 
isKeyInSectionsStringStringStringVaragrsSectioOfKeyIsAtEndOfVarargs() {
+        String section = "abc.def.";
+        String key = section + "key";
+
+        // null should not cause any problems
+        boolean result = isKeyInSections(key, "l.b", null, "abc", section);
+
+        assertThat(result).describedAs("Key '%s' is in section '%s'.", key, 
section).isTrue();
+    }
+
+    /*
+     * Tests for isKeyInSections(String, String[])
+     */
+
+    @Test
+    public void 
isKeyInSectionsStringStringStringArrayCopesWithEmptyArrayForMoreSectionKeys() {
+        String key = "a.b.key";
+        String first = "a.b";
+
+        boolean result = isKeyInSections(key, first, new String[]{});
+
+        assertThat(result).describedAs("Key '%s' is in section '%s'.", key, 
first)
+                          .isTrue();
+    }
+
+
+    /*
+     * Tests for sections(Map<String, String>)
+     */
+
+    // null as parameter
+
+    // empty as parameter
+
+    // all keys in root section
+
+    // some keys in packages
+
+    @Test
+    public void sectionsMapReturnsAllSectionsForGivenKeysInMap() {
+        HashMap<String, String> kv = new HashMap<>();
+
+        kv.put("abc.key", "v");
+        kv.put("abc.def.key", "v");
+        kv.put("a.key", "v");
+        kv.put("b.key", "v");
+        kv.put("key", "v");
+
+        Set<String> result = sections(kv);
+
+        assertThat(result).isNotNull()
+                          .isNotEmpty()
+                          .contains("abc", "abc.def", "a", "b", "<root>");
+    }
+
+    @Test
+    public void sectionsMapTreatsLeadingDotAsOptional() {
+        HashMap<String, String> kv = new HashMap<>();
+
+        kv.put(".abc.key", "v");
+        kv.put(".abc.def.key", "v");
+        kv.put(".a.key", "v");
+        kv.put(".b.key", "v");
+        kv.put(".key", "v");
+
+        Set<String> result = sections(kv);
+
+        assertThat(result).isNotNull()
+                          .isNotEmpty()
+                          .contains("abc", "abc.def", "a", "b", "<root>");
+    }
+
+    /*
+     * Tests for sections(Map<String, String> , Predicate<String>)
+     */
+
+    @Test
+    public void sectionsMapPredicateFiltersAccordingToFilter() {
+        HashMap<String, String> kv = new HashMap<>();
+
+        kv.put(".abc.key", "v");
+        kv.put(".abc.def.key", "v");
+        kv.put(".a.key", "v");
+        kv.put(".b.key", "v");
+        kv.put(".key", "v");
+
+        Set<String> result = sections(kv, new Predicate<String>() {
+            @Override
+            public boolean test(String s) {
+                return !s.startsWith("a");
+            }
+        });
+
+        assertThat(result).isNotNull()
+                          .isNotEmpty()
+                          .contains("b", "<root>");
     }
 
+    /*
+     * Tests for transitiveSections(Map<String, String>)
+     */
+
+    @Test
+    public void bla() {
+        HashMap<String, String> kv = new HashMap<>();
+
+        kv.put(".abc.key", "v");
+        kv.put(".abc.def.key", "v");
+        kv.put(".abc.def.ghi.key", "v");
+        kv.put(".a.key", "v");
+        kv.put(".b.key", "v");
+        kv.put(".key", "v");
+
+        Set<String> result = transitiveSections(kv);
+
+        for (String s : result) {
+            System.out.println(s);
+        }
+
+
+        assertThat(result).isNotNull()
+                          .isNotEmpty()
+                          .contains("abc", "abc.def", "a", "b", "<root>");
+
+
+    }
+
+
+    //----
+    @Ignore
     @Test
     public void testIsKeyInSections() throws Exception {
-// TODO implement test
+        throw new RuntimeException("Not implement or look at me!");
     }
 
+    @Ignore
     @Test
     public void testSections() throws Exception {
-// TODO implement test
+        throw new RuntimeException("Not implement or look at me!");
     }
 
+    @Ignore
     @Test
     public void testTransitiveSections() throws Exception {
-// TODO implement test
+        throw new RuntimeException("Not implement or look at me!");
     }
 
+    @Ignore
     @Test
     public void testSections1() throws Exception {
-// TODO implement test
+        throw new RuntimeException("Not implement or look at me!");
     }
 
+    @Ignore
     @Test
     public void testTransitiveSections1() throws Exception {
-// TODO implement test
+        throw new RuntimeException("Not implement or look at me!");
     }
 
+    @Ignore
     @Test
     public void testSectionsRecursive() throws Exception {
-// TODO implement test
+        throw new RuntimeException("Not implement or look at me!");
     }
 
+    @Ignore
     @Test
     public void testSectionRecursive() throws Exception {
-// TODO implement test
+        throw new RuntimeException("Not implement or look at me!");
     }
 
+    @Ignore
     @Test
     public void testStripSectionKeys() throws Exception {
-// TODO implement test
+        throw new RuntimeException("Not implement or look at me!");
     }
 
+    @Ignore
     @Test
     public void testAddItems() throws Exception {
-// TODO implement test
+        throw new RuntimeException("Not implement or look at me!");
     }
 
+    @Ignore
     @Test
     public void testAddItems1() throws Exception {
-// TODO implement test
+        throw new RuntimeException("Not implement or look at me!");
     }
 
+    @Ignore
     @Test
     public void testReplaceItems() throws Exception {
-// TODO implement test
+        throw new RuntimeException("Not implement or look at me!");
     }
 
+    @Ignore
     @Test
     public void testEmptyPropertySource() throws Exception {
         PropertySource ps = PropertySourceFunctions.emptyPropertySource();
-        assertNotNull(ps);
-        assertNotNull(ps.getProperties());
-        assertTrue(ps.getProperties().isEmpty());
-        assertEquals(ps.getName(), "<empty>" );
-        assertTrue(ps.isScannable());
+//        assertNotNull(ps);
+//        assertNotNull(ps.getProperties());
+//        assertTrue(ps.getProperties().isEmpty());
+//        assertEquals(ps.getName(), "<empty>" );
+//        assertTrue(ps.isScannable());
+
+        throw new RuntimeException("Not implement or look at me!");
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/cdd7f9c0/modules/functions/src/test/java/org/apache/tamaya/functions/ValueMappedPropertySourceTest.java
----------------------------------------------------------------------
diff --git 
a/modules/functions/src/test/java/org/apache/tamaya/functions/ValueMappedPropertySourceTest.java
 
b/modules/functions/src/test/java/org/apache/tamaya/functions/ValueMappedPropertySourceTest.java
new file mode 100644
index 0000000..1ce5025
--- /dev/null
+++ 
b/modules/functions/src/test/java/org/apache/tamaya/functions/ValueMappedPropertySourceTest.java
@@ -0,0 +1,183 @@
+/*
+ * 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.functions;
+
+import org.apache.tamaya.spi.PropertyValue;
+import org.assertj.core.api.Condition;
+import org.junit.Test;
+
+import java.util.Map;
+
+import static org.apache.tamaya.spi.PropertyValue.of;
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class ValueMappedPropertySourceTest {
+
+    private PropertyMapper mapper = new PropertyMapper() {
+        @Override
+        public String mapProperty(String key, String value) {
+            String startOfOtherKey = key.toLowerCase().substring(0, 1);
+            if ("m".compareTo(startOfOtherKey) <= 0) {
+                return value + "m";
+            }
+
+            return value;
+        }
+    };
+
+    /*
+     * Tests for getOrdinal()
+     */
+
+    @Test
+    public void getOrdinalReturnsGivenOrdinal() throws Exception {
+        InMemoryPropertySource source = new InMemoryPropertySource();
+        source.add("a", "1").add("b", "2").add("c", "3").setName("S");
+        source.setOrdinal(99);
+
+        ValueMappedPropertySource mappingSource = new 
ValueMappedPropertySource("vmps", mapper, source);
+
+        assertThat(mappingSource.getOrdinal()).isEqualTo(99);
+    }
+
+    /*
+     * Tests for isScannable()
+     */
+
+    @Test
+    public void isScannableReturnsTrueIfSetToTrue() throws Exception {
+        InMemoryPropertySource source = new InMemoryPropertySource();
+        source.add("a", "1").add("b", "2").add("c", "3").setName("S");
+        source.setScannable(true);
+
+        ValueMappedPropertySource mappingSource = new 
ValueMappedPropertySource("vmps", mapper, source);
+
+        assertThat(mappingSource.isScannable()).isTrue();
+    }
+
+
+    /*
+     * Tests for getName()
+     */
+
+    @Test
+    public void getNameReturnsGivenName() throws Exception {
+        InMemoryPropertySource source = new InMemoryPropertySource();
+        source.add("a", "1").add("b", "2").add("c", "3").setName("S");
+
+        ValueMappedPropertySource mappingSource = new 
ValueMappedPropertySource("vmps", mapper, source);
+
+        assertThat(mappingSource.getName()).isEqualTo("vmps");
+    }
+
+    /*
+     * Tests for get(String)
+     */
+
+    @Test
+    public void getReturnNullIfKeyIsNotInBasePropertySource() throws Exception 
{
+        InMemoryPropertySource source = new InMemoryPropertySource();
+        source.add("a", "1").add("b", "2").add("m", "3").setName("S");
+
+        ValueMappedPropertySource mappingSource = new 
ValueMappedPropertySource("vmps", mapper, source);
+
+        PropertyValue result = mappingSource.get("z");
+
+        assertThat(result).isNull();
+    }
+
+    @Test
+    public void getReturnsUnmappedValue() throws Exception {
+        InMemoryPropertySource source = new InMemoryPropertySource();
+        source.add("a", "1").add("b", "2").add("m", "3").setName("S");
+
+        ValueMappedPropertySource mappingSource = new 
ValueMappedPropertySource("vmps", mapper, source);
+
+        PropertyValue result = mappingSource.get("a");
+
+        assertThat(result).isNotNull()
+                          .has(new Condition<PropertyValue>() {
+                              @Override
+                              public boolean matches(PropertyValue 
propertyValue) {
+                                  return "1".equals(propertyValue.getValue());
+                              }
+                          });
+    }
+
+    @Test
+    public void getReturnsMappedValue() throws Exception {
+        InMemoryPropertySource source = new InMemoryPropertySource();
+        source.add("a", "1").add("b", "2").add("m", "3").setName("S");
+
+        ValueMappedPropertySource mappingSource = new 
ValueMappedPropertySource("vmps", mapper, source);
+
+        PropertyValue result = mappingSource.get("m");
+
+        assertThat(result).isNotNull()
+                          .has(new Condition<PropertyValue>() {
+                              @Override
+                              public boolean matches(PropertyValue 
propertyValue) {
+                                  return "3m".equals(propertyValue.getValue());
+                              }
+                          });
+    }
+
+    /*
+     * Tests for getProperties()
+     */
+
+    @Test
+    public void getPropertiesMapperMapsNoValue() {
+        InMemoryPropertySource source = new InMemoryPropertySource();
+        source.add("a", "1").add("b", "2").add("c", "3").setName("S");
+
+        ValueMappedPropertySource mappingSource = new 
ValueMappedPropertySource("vmps", mapper, source);
+
+        Map<String, PropertyValue> result = mappingSource.getProperties();
+
+        assertThat(result).isNotNull()
+                          .isNotEmpty()
+                          .containsEntry("a", of("a", "1", "S"))
+                          .containsEntry("b", of("b", "2", "S"))
+                          .containsEntry("c", of("c", "3", "S"))
+                          .hasSize(3);
+
+    }
+
+    @Test
+    public void getPropertiesMapperMapsSomeValues() throws Exception {
+        InMemoryPropertySource source = new InMemoryPropertySource();
+        source.add("a", "1").add("b", "2").add("m", "3").setName("S");
+
+        ValueMappedPropertySource mappingSource = new 
ValueMappedPropertySource("vmps", mapper, source);
+
+        Map<String, PropertyValue> result = mappingSource.getProperties();
+
+        assertThat(result).isNotNull()
+                          .isNotEmpty()
+                          .containsEntry("a", of("a", "1", "S"))
+                          .containsEntry("b", of("b", "2", "S"))
+                          .containsEntry("m", of("m", "3m", "S"))
+                          .hasSize(3);
+    }
+
+
+
+
+}
\ No newline at end of file

Reply via email to