This is an automated email from the ASF dual-hosted git repository.

cziegeler pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-extension-apiregions.git


The following commit(s) were added to refs/heads/master by this push:
     new c463e8f  SLING-9867 : Use sets for internal names and add merge tests
c463e8f is described below

commit c463e8f24253476da1ebabe8534ed2712fd31408
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Thu Nov 26 17:17:59 2020 +0100

    SLING-9867 : Use sets for internal names and add merge tests
---
 .../apiregions/api/config/ConfigurationApi.java    |  28 ++--
 .../ConfigurationApiMergeHandlerTest.java          | 146 ++++++++++++++++++++-
 2 files changed, 159 insertions(+), 15 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApi.java
 
b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApi.java
index bab1f7c..e29a629 100644
--- 
a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApi.java
+++ 
b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApi.java
@@ -17,10 +17,10 @@
 package org.apache.sling.feature.extension.apiregions.api.config;
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.LinkedHashMap;
-import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
 
 import javax.json.Json;
 import javax.json.JsonArrayBuilder;
@@ -116,14 +116,14 @@ public class ConfigurationApi extends AttributeableEntity 
{
     /** The map of framework properties */
     private final Map<String, FrameworkPropertyDescription> 
frameworkProperties = new LinkedHashMap<>();
 
-    /** The list of internal configuration names */
-    private final List<String> internalConfigurations = new ArrayList<>();
+    /** The set of internal configuration names */
+    private final Set<String> internalConfigurations = new TreeSet<>();
 
-    /** The list of internal factory configuration names */
-    private final List<String> internalFactories = new ArrayList<>();
+    /** The set of internal factory configuration names */
+    private final Set<String> internalFactories = new TreeSet<>();
 
-    /** The list of internal framework property names */
-    private final List<String> internalFrameworkProperties = new ArrayList<>();
+    /** The set of internal framework property names */
+    private final Set<String> internalFrameworkProperties = new TreeSet<>();
     
     /** The configuration region of this feature */
     private Region region;
@@ -237,25 +237,25 @@ public class ConfigurationApi extends AttributeableEntity 
{
 
        /**
      * Get the internal configuration pids
-        * @return Mutable list of internal configuration pids
+        * @return Mutable set of internal configuration pids
         */
-       public List<String> getInternalConfigurations() {
+       public Set<String> getInternalConfigurations() {
                return internalConfigurations;
        }
 
        /**
      * Get the internal factory pids
-        * @return Mutable list of internal factory configuration pids
+        * @return Mutable set of internal factory configuration pids
         */
-       public List<String> getInternalFactoryConfigurations() {
+       public Set<String> getInternalFactoryConfigurations() {
                return internalFactories;
        }
 
        /**
      * Get the internal framework property names
-        * @return Mutable list of internal framework property names
+        * @return Mutable set of internal framework property names
         */
-       public List<String> getInternalFrameworkProperties() {
+       public Set<String> getInternalFrameworkProperties() {
                return internalFrameworkProperties;
     }
 
diff --git 
a/src/test/java/org/apache/sling/feature/extension/apiregions/ConfigurationApiMergeHandlerTest.java
 
b/src/test/java/org/apache/sling/feature/extension/apiregions/ConfigurationApiMergeHandlerTest.java
index 7c95589..daf59a5 100644
--- 
a/src/test/java/org/apache/sling/feature/extension/apiregions/ConfigurationApiMergeHandlerTest.java
+++ 
b/src/test/java/org/apache/sling/feature/extension/apiregions/ConfigurationApiMergeHandlerTest.java
@@ -19,6 +19,7 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 
 import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.Feature;
@@ -26,6 +27,10 @@ import org.apache.sling.feature.Prototype;
 import org.apache.sling.feature.builder.BuilderContext;
 import org.apache.sling.feature.builder.FeatureBuilder;
 import 
org.apache.sling.feature.extension.apiregions.api.config.ConfigurationApi;
+import 
org.apache.sling.feature.extension.apiregions.api.config.ConfigurationDescription;
+import 
org.apache.sling.feature.extension.apiregions.api.config.FactoryConfigurationDescription;
+import 
org.apache.sling.feature.extension.apiregions.api.config.FrameworkPropertyDescription;
+import 
org.apache.sling.feature.extension.apiregions.api.config.PropertyDescription;
 import org.apache.sling.feature.extension.apiregions.api.config.Region;
 import org.junit.Test;
 
@@ -114,7 +119,6 @@ public class ConfigurationApiMergeHandlerTest {
     }
  
     @Test public void testRegionMerge() {
-        // always return prototype
         final BuilderContext context = new BuilderContext(id -> null);
         context.addMergeExtensions(new ConfigurationApiMergeHandler());
 
@@ -194,4 +198,144 @@ public class ConfigurationApiMergeHandlerTest {
         api = ConfigurationApi.getConfigurationApi(result);
         assertEquals(Region.GLOBAL, api.getRegion());
     }
+
+    @Test public void testConfigurationApiMergeDifferentConfig() {
+        final BuilderContext context = new BuilderContext(id -> null);
+        context.addMergeExtensions(new ConfigurationApiMergeHandler());
+
+        final Feature featureA = new Feature(ArtifactId.parse("g:a:1"));
+        final ConfigurationApi apiA = new ConfigurationApi();
+        apiA.getConfigurationDescriptions().put("a", new 
ConfigurationDescription());
+        apiA.getFactoryConfigurationDescriptions().put("fa", new 
FactoryConfigurationDescription());
+        apiA.getFrameworkPropertyDescriptions().put("pa", new 
FrameworkPropertyDescription());
+        ConfigurationApi.setConfigurationApi(featureA, apiA);
+        
+        final Feature featureB = new Feature(ArtifactId.parse("g:b:1"));
+        final ConfigurationApi apiB = new ConfigurationApi();
+        apiB.getConfigurationDescriptions().put("b", new 
ConfigurationDescription());
+        apiB.getFactoryConfigurationDescriptions().put("fb", new 
FactoryConfigurationDescription());
+        apiB.getFrameworkPropertyDescriptions().put("pb", new 
FrameworkPropertyDescription());
+        ConfigurationApi.setConfigurationApi(featureB, apiB);
+
+        final ArtifactId id = ArtifactId.parse("g:m:1");
+        Feature result = FeatureBuilder.assemble(id, context, featureA, 
featureB);
+        ConfigurationApi api = ConfigurationApi.getConfigurationApi(result);
+        assertNotNull(api);
+
+        assertEquals(2, api.getConfigurationDescriptions().size());
+        assertNotNull(api.getConfigurationDescriptions().get("a"));
+        assertNotNull(api.getConfigurationDescriptions().get("b"));
+
+        assertEquals(2, api.getFactoryConfigurationDescriptions().size());
+        assertNotNull(api.getFactoryConfigurationDescriptions().get("fa"));
+        assertNotNull(api.getFactoryConfigurationDescriptions().get("fb"));
+
+        assertEquals(2, api.getFrameworkPropertyDescriptions().size());
+        assertNotNull(api.getFrameworkPropertyDescriptions().get("pa"));
+        assertNotNull(api.getFrameworkPropertyDescriptions().get("pb"));
+    }
+
+    @Test(expected = IllegalStateException.class)
+    public void testConfigurationApiMergeSameConfigurations() {
+        final BuilderContext context = new BuilderContext(id -> null);
+        context.addMergeExtensions(new ConfigurationApiMergeHandler());
+
+        final Feature featureA = new Feature(ArtifactId.parse("g:a:1"));
+        final ConfigurationApi apiA = new ConfigurationApi();
+        apiA.getConfigurationDescriptions().put("a", new 
ConfigurationDescription());
+        ConfigurationApi.setConfigurationApi(featureA, apiA);
+        
+        final Feature featureB = new Feature(ArtifactId.parse("g:b:1"));
+        final ConfigurationApi apiB = new ConfigurationApi();
+        apiB.getConfigurationDescriptions().put("a", new 
ConfigurationDescription());
+        ConfigurationApi.setConfigurationApi(featureB, apiB);
+
+        final ArtifactId id = ArtifactId.parse("g:m:1");
+        FeatureBuilder.assemble(id, context, featureA, featureB);
+    }
+
+    @Test(expected = IllegalStateException.class)
+    public void testConfigurationApiMergeSameFactoryConfigurations() {
+        final BuilderContext context = new BuilderContext(id -> null);
+        context.addMergeExtensions(new ConfigurationApiMergeHandler());
+
+        final Feature featureA = new Feature(ArtifactId.parse("g:a:1"));
+        final ConfigurationApi apiA = new ConfigurationApi();
+        apiA.getFactoryConfigurationDescriptions().put("fa", new 
FactoryConfigurationDescription());
+        ConfigurationApi.setConfigurationApi(featureA, apiA);
+        
+        final Feature featureB = new Feature(ArtifactId.parse("g:b:1"));
+        final ConfigurationApi apiB = new ConfigurationApi();
+        apiB.getFactoryConfigurationDescriptions().put("fa", new 
FactoryConfigurationDescription());
+        ConfigurationApi.setConfigurationApi(featureB, apiB);
+
+        final ArtifactId id = ArtifactId.parse("g:m:1");
+        FeatureBuilder.assemble(id, context, featureA, featureB);
+    }
+
+    @Test(expected = IllegalStateException.class)
+    public void testConfigurationApiMergeSameFrameworkProperties() {
+        final BuilderContext context = new BuilderContext(id -> null);
+        context.addMergeExtensions(new ConfigurationApiMergeHandler());
+
+        final Feature featureA = new Feature(ArtifactId.parse("g:a:1"));
+        final ConfigurationApi apiA = new ConfigurationApi();
+        apiA.getFrameworkPropertyDescriptions().put("pa", new 
FrameworkPropertyDescription());
+        ConfigurationApi.setConfigurationApi(featureA, apiA);
+        
+        final Feature featureB = new Feature(ArtifactId.parse("g:b:1"));
+        final ConfigurationApi apiB = new ConfigurationApi();
+        apiB.getFrameworkPropertyDescriptions().put("pa", new 
FrameworkPropertyDescription());
+        ConfigurationApi.setConfigurationApi(featureB, apiB);
+
+        final ArtifactId id = ArtifactId.parse("g:m:1");
+        FeatureBuilder.assemble(id, context, featureA, featureB);
+    }
+
+    @Test public void testConfigurationApiMergeInternalNames() {
+        final BuilderContext context = new BuilderContext(id -> null);
+        context.addMergeExtensions(new ConfigurationApiMergeHandler());
+
+        final Feature featureA = new Feature(ArtifactId.parse("g:a:1"));
+        final ConfigurationApi apiA = new ConfigurationApi();
+        apiA.getInternalConfigurations().add("a");
+        apiA.getInternalFactoryConfigurations().add("fa");
+        apiA.getInternalFrameworkProperties().add("pa");
+
+        apiA.getInternalConfigurations().add("c");
+        apiA.getInternalFactoryConfigurations().add("fc");
+        apiA.getInternalFrameworkProperties().add("pc");
+        ConfigurationApi.setConfigurationApi(featureA, apiA);
+        
+        final Feature featureB = new Feature(ArtifactId.parse("g:b:1"));
+        final ConfigurationApi apiB = new ConfigurationApi();
+        apiB.getInternalConfigurations().add("b");
+        apiB.getInternalFactoryConfigurations().add("fb");
+        apiB.getInternalFrameworkProperties().add("pb");
+
+        apiB.getInternalConfigurations().add("c");
+        apiB.getInternalFactoryConfigurations().add("fc");
+        apiB.getInternalFrameworkProperties().add("pc");
+        ConfigurationApi.setConfigurationApi(featureB, apiB);
+
+        final ArtifactId id = ArtifactId.parse("g:m:1");
+        Feature result = FeatureBuilder.assemble(id, context, featureA, 
featureB);
+        ConfigurationApi api = ConfigurationApi.getConfigurationApi(result);
+        assertNotNull(api);
+
+        assertEquals(3, api.getInternalConfigurations().size());
+        assertTrue(api.getInternalConfigurations().contains("a"));
+        assertTrue(api.getInternalConfigurations().contains("b"));
+        assertTrue(api.getInternalConfigurations().contains("c"));
+
+        assertEquals(3, api.getInternalFactoryConfigurations().size());
+        assertTrue(api.getInternalFactoryConfigurations().contains("fa"));
+        assertTrue(api.getInternalFactoryConfigurations().contains("fb"));
+        assertTrue(api.getInternalFactoryConfigurations().contains("fc"));
+
+        assertEquals(3, api.getInternalFrameworkProperties().size());
+        assertTrue(api.getInternalFrameworkProperties().contains("pa"));
+        assertTrue(api.getInternalFrameworkProperties().contains("pb"));
+        assertTrue(api.getInternalFrameworkProperties().contains("pc"));
+    }
 }
\ No newline at end of file

Reply via email to