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

rombert pushed a commit to branch issue/SLING-12356
in repository 
https://gitbox.apache.org/repos/asf/sling-slingfeature-maven-plugin.git

commit d48e0eb92862ca6eb530cbaf8c5d20e2640701c8
Author: Robert Munteanu <romb...@apache.org>
AuthorDate: Fri Jun 21 20:40:16 2024 +0200

    SLING-12356 - Allow configuring additional post process handlers
    
    Reduce code duplication in AggregateFeaturesMojoTest
---
 .../maven/mojos/AggregateFeaturesMojoTest.java     | 505 ++++++---------------
 1 file changed, 146 insertions(+), 359 deletions(-)

diff --git 
a/src/test/java/org/apache/sling/feature/maven/mojos/AggregateFeaturesMojoTest.java
 
b/src/test/java/org/apache/sling/feature/maven/mojos/AggregateFeaturesMojoTest.java
index 3f916f1..4448acb 100644
--- 
a/src/test/java/org/apache/sling/feature/maven/mojos/AggregateFeaturesMojoTest.java
+++ 
b/src/test/java/org/apache/sling/feature/maven/mojos/AggregateFeaturesMojoTest.java
@@ -24,6 +24,7 @@ import static org.junit.Assert.fail;
 
 import java.io.File;
 import java.io.FileReader;
+import java.io.IOException;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.nio.file.Path;
@@ -39,6 +40,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
+import java.util.function.BiConsumer;
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.DefaultArtifact;
@@ -88,43 +90,12 @@ public class AggregateFeaturesMojoTest {
 
     @Test
     public void testAggregateFeaturesFromDirectory() throws Exception {
-        File featuresDir = new File(
-                getClass().getResource("/aggregate-features/dir2").getFile());
-        // read features
-        Map<String, Feature> featureMap = new HashMap<>();
-        for (File f : featuresDir.listFiles((d,f) -> f.endsWith(".json"))) {
-            Feature feat = FeatureJSONReader.read(new FileReader(f), null);
-            featureMap.put(f.getAbsolutePath(), feat);
-        }
-
-        Aggregate fc = new Aggregate();
-        fc.setFilesInclude("*.json");
-
-        Build mockBuild = Mockito.mock(Build.class);
-        Mockito.when(mockBuild.getDirectory()).thenReturn(tempDir.toString());
-
-        Artifact parentArtifact = createMockArtifact();
-        MavenProject mockProj = Mockito.mock(MavenProject.class);
-        Mockito.when(mockProj.getBuild()).thenReturn(mockBuild);
-        Mockito.when(mockProj.getGroupId()).thenReturn("org.foo");
-        Mockito.when(mockProj.getArtifactId()).thenReturn("org.foo.bar");
-        Mockito.when(mockProj.getVersion()).thenReturn("1.2.3-SNAPSHOT");
-        Mockito.when(mockProj.getArtifact()).thenReturn(parentArtifact);
-        Mockito.when(mockProj.getContextValue(Feature.class.getName() + 
"/rawmain.json-cache"))
-            .thenReturn(featureMap);
-        Mockito.when(mockProj.getContextValue(Feature.class.getName() + 
"/assembledmain.json-cache"))
-            .thenReturn(featureMap);
-        
Mockito.when(mockProj.getContextValue(Preprocessor.class.getName())).thenReturn(Boolean.TRUE);
 
-        AggregateFeaturesMojo af = new AggregateFeaturesMojo();
-        fc.classifier = "aggregated";
-        af.aggregates = Collections.singletonList(fc);
-        af.project = mockProj;
-        af.projectHelper = new DefaultMavenProjectHelper();
-        af.features = featuresDir;
-        af.execute();
+        TestContext ctx = prepareTestContext("/aggregate-features/dir2", new 
String[] { "*.json" } );
+         
+        ctx.getMojo().execute();
 
-        Feature genFeat = featureMap.get(":aggregate:aggregated:T");
+        Feature genFeat = ctx.getFeatureMap().get(":aggregate:aggregated:T");
         assertNotNull(genFeat);
         ArtifactId id = genFeat.getId();
 
@@ -158,50 +129,20 @@ public class AggregateFeaturesMojoTest {
         }
         assertConfigsEquivalent(expectedConfigs, actualConfigs);
     }
-
+    
     @Test
     public void testAggregateFeaturesFromDirectoryWithIncludesExcludes() 
throws Exception {
-        File featuresDir = new File(
-                getClass().getResource("/aggregate-features/dir").getFile());
-        // read features
-        Map<String, Feature> featureMap = new HashMap<>();
-        for (File f : featuresDir.listFiles((d,f) -> f.endsWith(".json"))) {
-            Feature feat = FeatureJSONReader.read(new FileReader(f), null);
-            featureMap.put(f.getAbsolutePath(), feat);
-        }
-
-        Aggregate fc = new Aggregate();
-        fc.setFilesInclude("*.json");
-        fc.setFilesInclude("*.foobar");
-        fc.setFilesExclude("*_v*");
-        fc.setFilesExclude("test_w.json");
-
-        Build mockBuild = Mockito.mock(Build.class);
-        Mockito.when(mockBuild.getDirectory()).thenReturn(tempDir.toString());
-
-        Artifact parentArtifact = createMockArtifact();
-        MavenProject mockProj = Mockito.mock(MavenProject.class);
-        Mockito.when(mockProj.getBuild()).thenReturn(mockBuild);
-        Mockito.when(mockProj.getGroupId()).thenReturn("org.foo");
-        Mockito.when(mockProj.getArtifactId()).thenReturn("org.foo.bar");
-        Mockito.when(mockProj.getVersion()).thenReturn("1.2.3-SNAPSHOT");
-        Mockito.when(mockProj.getArtifact()).thenReturn(parentArtifact);
-        Mockito.when(mockProj.getContextValue(Feature.class.getName() + 
"/rawmain.json-cache"))
-            .thenReturn(featureMap);
-        Mockito.when(mockProj.getContextValue(Feature.class.getName() + 
"/assembledmain.json-cache"))
-            .thenReturn(featureMap);
-        
Mockito.when(mockProj.getContextValue(Preprocessor.class.getName())).thenReturn(Boolean.TRUE);
-
-        AggregateFeaturesMojo af = new AggregateFeaturesMojo();
-        fc.classifier = "aggregated";
-        af.aggregates = Collections.singletonList(fc);
-        af.project = mockProj;
-        af.projectHelper = new DefaultMavenProjectHelper();
-        af.features = featuresDir;
-
-        af.execute();
-
-        Feature genFeat = featureMap.get(":aggregate:aggregated:T");
+        
+        TestContext ctx = prepareTestContext("/aggregate-features/dir", new 
String[] { "*.json", "*.foobar" }, 
+                (agg, mojo) -> {
+                    agg.setFilesExclude("*_v*");
+                    agg.setFilesExclude("test_w.json");
+                }
+            );
+        
+        ctx.getMojo().execute();
+
+        Feature genFeat = ctx.getFeatureMap().get(":aggregate:aggregated:T");
         assertNotNull(genFeat);
         ArtifactId id = genFeat.getId();
 
@@ -237,43 +178,11 @@ public class AggregateFeaturesMojoTest {
 
     @Test
     public void testNonMatchingDirectoryIncludes() throws Exception {
-        File featuresDir = new File(
-                getClass().getResource("/aggregate-features/dir").getFile());
-        // read features
-        Map<String, Feature> featureMap = new HashMap<>();
-        for (File f : featuresDir.listFiles((d,f) -> f.endsWith(".json"))) {
-            Feature feat = FeatureJSONReader.read(new FileReader(f), null);
-            featureMap.put(f.getAbsolutePath(), feat);
-        }
-
-        Aggregate fc = new Aggregate();
-        fc.setFilesInclude("doesnotexist.json");
-
-        Build mockBuild = Mockito.mock(Build.class);
-        Mockito.when(mockBuild.getDirectory()).thenReturn(tempDir.toString());
-
-        Artifact parentArtifact = createMockArtifact();
-        MavenProject mockProj = Mockito.mock(MavenProject.class);
-        Mockito.when(mockProj.getBuild()).thenReturn(mockBuild);
-        Mockito.when(mockProj.getGroupId()).thenReturn("org.foo");
-        Mockito.when(mockProj.getArtifactId()).thenReturn("org.foo.bar");
-        Mockito.when(mockProj.getVersion()).thenReturn("1.2.3-SNAPSHOT");
-        Mockito.when(mockProj.getArtifact()).thenReturn(parentArtifact);
-        Mockito.when(mockProj.getContextValue(Feature.class.getName() + 
"/rawmain.json-cache"))
-            .thenReturn(featureMap);
-        Mockito.when(mockProj.getContextValue(Feature.class.getName() + 
"/assembledmain.json-cache"))
-            .thenReturn(featureMap);
-        
Mockito.when(mockProj.getContextValue(Preprocessor.class.getName())).thenReturn(Boolean.TRUE);
-
-        AggregateFeaturesMojo af = new AggregateFeaturesMojo();
-        fc.classifier = "aggregated";
-        af.aggregates = Collections.singletonList(fc);
-        af.project = mockProj;
-        af.projectHelper = new DefaultMavenProjectHelper();
-        af.features = featuresDir;
-
+        
+        TestContext ctx = prepareTestContext("/aggregate-features/dir", new 
String[] { "doesnotexist.json" });
+        
         try {
-            af.execute();
+            ctx.getMojo().execute();
             fail("Should have thrown an exception because doesnotexist.json is 
not a file");
         } catch (MojoExecutionException mee) {
             assertTrue(mee.getMessage().contains("Include doesnotexist.json 
not found"));
@@ -282,43 +191,11 @@ public class AggregateFeaturesMojoTest {
 
     @Test
     public void testNonMatchingDirectoryExcludes() throws Exception {
-        File featuresDir = new File(
-                getClass().getResource("/aggregate-features/dir").getFile());
-        // read features
-        Map<String, Feature> featureMap = new HashMap<>();
-        for (File f : featuresDir.listFiles((d,f) -> f.endsWith(".json"))) {
-            Feature feat = FeatureJSONReader.read(new FileReader(f), null);
-            featureMap.put(f.getAbsolutePath(), feat);
-        }
-
-        Aggregate fc = new Aggregate();
-        fc.setFilesInclude("doesnotexist.json");
-
-        Build mockBuild = Mockito.mock(Build.class);
-        Mockito.when(mockBuild.getDirectory()).thenReturn(tempDir.toString());
-
-        Artifact parentArtifact = createMockArtifact();
-        MavenProject mockProj = Mockito.mock(MavenProject.class);
-        Mockito.when(mockProj.getBuild()).thenReturn(mockBuild);
-        Mockito.when(mockProj.getGroupId()).thenReturn("org.foo");
-        Mockito.when(mockProj.getArtifactId()).thenReturn("org.foo.bar");
-        Mockito.when(mockProj.getVersion()).thenReturn("1.2.3-SNAPSHOT");
-        Mockito.when(mockProj.getArtifact()).thenReturn(parentArtifact);
-        Mockito.when(mockProj.getContextValue(Feature.class.getName() + 
"/rawmain.json-cache"))
-            .thenReturn(featureMap);
-        Mockito.when(mockProj.getContextValue(Feature.class.getName() + 
"/assembledmain.json-cache"))
-            .thenReturn(featureMap);
-        
Mockito.when(mockProj.getContextValue(Preprocessor.class.getName())).thenReturn(Boolean.TRUE);
-
-        AggregateFeaturesMojo af = new AggregateFeaturesMojo();
-        fc.classifier = "aggregated";
-        af.aggregates = Collections.singletonList(fc);
-        af.project = mockProj;
-        af.projectHelper = new DefaultMavenProjectHelper();
-        af.features = featuresDir;
-
+        
+        TestContext ctx = prepareTestContext("/aggregate-features/dir", new 
String[] { "doesnotexist.json" });
+        
         try {
-            af.execute();
+            ctx.getMojo().execute();
             fail("Should have thrown an exception because doesnotexist.json is 
not a file");
         } catch (MojoExecutionException mee) {
             assertTrue(mee.getMessage().contains("FeatureInclude 
doesnotexist.json not found"));
@@ -327,58 +204,23 @@ public class AggregateFeaturesMojoTest {
 
     @Test
     public void testIncludeOrdering() throws Exception {
-        File featuresDir = new File(
-                getClass().getResource("/aggregate-features/dir4").getFile());
-        // read features
-        Map<String, Feature> featureMap = new HashMap<>();
-        for (File f : featuresDir.listFiles((d,f) -> f.endsWith(".json"))) {
-            Feature feat = FeatureJSONReader.read(new FileReader(f), null);
-            featureMap.put(f.getAbsolutePath(), feat);
-        }
-
-        Aggregate fc1 = new Aggregate();
-        fc1.setFilesInclude("test_x.json");
-
-        fc1.setFilesInclude("test_u.json");
-        fc1.setFilesInclude("test_y.json");
-        fc1.setFilesInclude("test_v.json");
-        fc1.setFilesInclude("test_z.json");
-
-        fc1.setFilesInclude("test_t.json");
-
-        Build mockBuild = Mockito.mock(Build.class);
-        Mockito.when(mockBuild.getDirectory()).thenReturn(tempDir.toString());
-
-        Artifact parentArtifact = createMockArtifact();
-        MavenProject mockProj = Mockito.mock(MavenProject.class);
-        Mockito.when(mockProj.getBuild()).thenReturn(mockBuild);
-        Mockito.when(mockProj.getGroupId()).thenReturn("g");
-        Mockito.when(mockProj.getArtifactId()).thenReturn("a");
-        Mockito.when(mockProj.getVersion()).thenReturn("999");
-        Mockito.when(mockProj.getArtifact()).thenReturn(parentArtifact);
-        Mockito.when(mockProj.getContextValue(Feature.class.getName() + 
"/rawmain.json-cache"))
-            .thenReturn(featureMap);
-        Mockito.when(mockProj.getContextValue(Feature.class.getName() + 
"/assembledmain.json-cache"))
-            .thenReturn(featureMap);
-        
Mockito.when(mockProj.getContextValue(Preprocessor.class.getName())).thenReturn(Boolean.TRUE);
-
-
-        AggregateFeaturesMojo af = new AggregateFeaturesMojo();
-        fc1.classifier = "agg";
-        fc1.configurationOverrides = Arrays.asList("*=" + 
BuilderContext.CONFIG_MERGE_LATEST);
-        af.aggregates = Arrays.asList(fc1);
-        af.project = mockProj;
-        af.projectHelper = new DefaultMavenProjectHelper();
-        af.features = featuresDir;
-
-        af.execute();
-
-        Feature genFeat = featureMap.get(":aggregate:agg:T");
+        
+        TestContext ctx = prepareTestContext("/aggregate-features/dir4",
+                new String[] { "test_x.json", "test_u.json", "test_y.json", 
"test_v.json", "test_z.json", "test_t.json" }, 
+                (agg, mojo) -> {
+                    agg.configurationOverrides = Arrays.asList("*=" + 
BuilderContext.CONFIG_MERGE_LATEST);
+                    agg.classifier = "agg";
+                });
+        
+        ctx.getMojo().execute();
+
+        Feature genFeat = ctx.getFeatureMap().get(":aggregate:agg:T");
+        assertNotNull(genFeat);
         ArtifactId id = genFeat.getId();
 
-        assertEquals("g", id.getGroupId());
-        assertEquals("a", id.getArtifactId());
-        assertEquals("999", id.getVersion());
+        assertEquals("org.foo", id.getGroupId());
+        assertEquals("org.foo.bar", id.getArtifactId());
+        assertEquals("1.2.3-SNAPSHOT", id.getVersion());
         assertEquals(FeatureConstants.PACKAGING_FEATURE, id.getType());
         assertEquals("agg", id.getClassifier());
 
@@ -484,49 +326,19 @@ public class AggregateFeaturesMojoTest {
 
     @Test
     public void testPluginHandling() throws Exception {
-        File featuresDir = new File(
-                getClass().getResource("/aggregate-features/dir3").getFile());
-        // read features
-        Map<String, Feature> featureMap = new HashMap<>();
-        for (File f : featuresDir.listFiles((d,f) -> f.endsWith(".json"))) {
-            Feature feat = FeatureJSONReader.read(new FileReader(f), null);
-            featureMap.put(f.getAbsolutePath(), feat);
-        }
-
-        Aggregate fc = new Aggregate();
-        fc.setFilesInclude("*.json");
-
-        Build mockBuild = Mockito.mock(Build.class);
-        Mockito.when(mockBuild.getDirectory()).thenReturn(tempDir.toString());
-
-        Artifact parentArtifact = createMockArtifact();
-        MavenProject mockProj = Mockito.mock(MavenProject.class);
-        Mockito.when(mockProj.getBuild()).thenReturn(mockBuild);
-        Mockito.when(mockProj.getGroupId()).thenReturn("org.foo");
-        Mockito.when(mockProj.getArtifactId()).thenReturn("org.foo.bar");
-        Mockito.when(mockProj.getVersion()).thenReturn("1.2.3-SNAPSHOT");
-        Mockito.when(mockProj.getArtifact()).thenReturn(parentArtifact);
-        Mockito.when(mockProj.getContextValue(Feature.class.getName() + 
"/rawmain.json-cache"))
-            .thenReturn(featureMap);
-        Mockito.when(mockProj.getContextValue(Feature.class.getName() + 
"/assembledmain.json-cache"))
-            .thenReturn(featureMap);
-        
Mockito.when(mockProj.getContextValue(Preprocessor.class.getName())).thenReturn(Boolean.TRUE);
-
-        AggregateFeaturesMojo af = new AggregateFeaturesMojo();
-        fc.classifier = "aggregated";
-        af.aggregates = Collections.singletonList(fc);
-        af.project = mockProj;
-        af.projectHelper = new DefaultMavenProjectHelper();
-        af.features = featuresDir;
-        af.handlerConfiguration = new HashMap<>();
-
-        Properties p3props = new Properties();
-        p3props.put("test3cfg", "myval");
-        p3props.put("test3cfg3", "somethingelse");
-        af.handlerConfiguration.put("TestPlugin3", p3props);
-
+        
+       TestContext ctx = prepareTestContext("/aggregate-features/dir3",
+               new String[] { "*.json" }, 
+               (agg, mojo) -> {
+                   Properties p3props = new Properties();
+                   p3props.put("test3cfg", "myval");
+                   p3props.put("test3cfg3", "somethingelse");
+                   
+                   mojo.handlerConfiguration = Map.of("TestPlugin3", p3props);
+                });
+        
         assertEquals("Precondition", 0, pluginCallbacks.size());
-        af.execute();
+        ctx.getMojo().execute();
 
         ArtifactId id = new ArtifactId("org.foo", "org.foo.bar", 
"1.2.3-SNAPSHOT", "aggregated", FeatureConstants.PACKAGING_FEATURE);
         assertEquals(id, pluginCallbacks.get("TestPlugin1 - extension1"));
@@ -723,46 +535,18 @@ public class AggregateFeaturesMojoTest {
 
     @Test
     public void testOverrides() throws Exception {
-        File featuresDir = new File(
-                getClass().getResource("/aggregate-features/dir5").getFile());
-
-        Map<String, Feature> featureMap = new HashMap<>();
-        for (File f : featuresDir.listFiles((d,f) -> f.endsWith(".json"))) {
-            Feature feat = FeatureJSONReader.read(new FileReader(f), null);
-            featureMap.put(f.getAbsolutePath(), feat);
-        }
-
-        Aggregate ag = new Aggregate();
-        ag.setFilesInclude("*.json");
-        ag.classifier = "myagg";
-        ag.artifactsOverrides = 
Arrays.asList("org.apache.sling:mybundle:HIGHEST",
-                "org.apache.sling:somebundle:1.1.0", 
"org.apache.sling:somebundle:2.0.0");
-
-        Build mockBuild = Mockito.mock(Build.class);
-        Mockito.when(mockBuild.getDirectory()).thenReturn(tempDir.toString());
-
-        Artifact parentArt = createMockArtifact();
-        MavenProject mockProj = Mockito.mock(MavenProject.class);
-        Mockito.when(mockProj.getBuild()).thenReturn(mockBuild);
-        Mockito.when(mockProj.getGroupId()).thenReturn("org.apache.sling");
-        
Mockito.when(mockProj.getArtifactId()).thenReturn("org.apache.sling.test");
-        Mockito.when(mockProj.getVersion()).thenReturn("1.0.1");
-        Mockito.when(mockProj.getArtifact()).thenReturn(parentArt);
-        Mockito.when(mockProj.getContextValue(Feature.class.getName() + 
"/rawmain.json-cache"))
-            .thenReturn(featureMap);
-        Mockito.when(mockProj.getContextValue(Feature.class.getName() + 
"/assembledmain.json-cache"))
-            .thenReturn(featureMap);
-        
Mockito.when(mockProj.getContextValue(Preprocessor.class.getName())).thenReturn(Boolean.TRUE);
-
-        AggregateFeaturesMojo af = new AggregateFeaturesMojo();
-        af.aggregates = Collections.singletonList(ag);
-        af.project = mockProj;
-        af.projectHelper = new DefaultMavenProjectHelper();
-        af.features = featuresDir;
-        af.handlerConfiguration = new HashMap<>();
-
-        af.execute();
-        Feature genFeat = featureMap.get(":aggregate:myagg:T");
+        
+        TestContext ctx = prepareTestContext("/aggregate-features/dir5",
+                new String[] { "*.json" }, 
+                (agg, mojo) -> {
+                    agg.classifier = "myagg";
+                    agg.artifactsOverrides = 
Arrays.asList("org.apache.sling:mybundle:HIGHEST",
+                            "org.apache.sling:somebundle:1.1.0", 
"org.apache.sling:somebundle:2.0.0");
+                 });
+
+        ctx.getMojo().execute();
+
+        Feature genFeat = ctx.getFeatureMap().get(":aggregate:myagg:T");
         Bundles bundles = genFeat.getBundles();
         assertEquals(3, bundles.size());
         assertTrue(bundles.contains(new org.apache.sling.feature.Artifact(
@@ -775,44 +559,14 @@ public class AggregateFeaturesMojoTest {
 
     @Test
     public void testOverrideWithManualArtifactIDNoOverride() throws Exception {
-        File featuresDir = new File(
-                getClass().getResource("/aggregate-features/dir6").getFile());
-
-        Map<String, Feature> featureMap = new HashMap<>();
-        for (File f : featuresDir.listFiles((d,f) -> f.endsWith(".json"))) {
-            Feature feat = FeatureJSONReader.read(new FileReader(f), null);
-            featureMap.put(f.getAbsolutePath(), feat);
-        }
-
-        Aggregate ag = new Aggregate();
-        ag.setFilesInclude("*.json");
-        ag.classifier = "myagg";
-
-        Build mockBuild = Mockito.mock(Build.class);
-        Mockito.when(mockBuild.getDirectory()).thenReturn(tempDir.toString());
-
-        Artifact parentArt = createMockArtifact();
-        MavenProject mockProj = Mockito.mock(MavenProject.class);
-        Mockito.when(mockProj.getBuild()).thenReturn(mockBuild);
-        Mockito.when(mockProj.getGroupId()).thenReturn("org.apache.sling");
-        
Mockito.when(mockProj.getArtifactId()).thenReturn("org.apache.sling.test");
-        Mockito.when(mockProj.getVersion()).thenReturn("1.0.1");
-        Mockito.when(mockProj.getArtifact()).thenReturn(parentArt);
-        Mockito.when(mockProj.getContextValue(Feature.class.getName() + 
"/rawmain.json-cache"))
-            .thenReturn(featureMap);
-        Mockito.when(mockProj.getContextValue(Feature.class.getName() + 
"/assembledmain.json-cache"))
-            .thenReturn(featureMap);
-        
Mockito.when(mockProj.getContextValue(Preprocessor.class.getName())).thenReturn(Boolean.TRUE);
-
-        AggregateFeaturesMojo af = new AggregateFeaturesMojo();
-        af.aggregates = Collections.singletonList(ag);
-        af.project = mockProj;
-        af.projectHelper = new DefaultMavenProjectHelper();
-        af.features = featuresDir;
-        af.handlerConfiguration = new HashMap<>();
-
+        TestContext ctx = prepareTestContext("/aggregate-features/dir6",
+                new String[] { "*.json" }, 
+                (agg, mojo) -> {
+                    agg.classifier = "myagg";
+                 });
+        
         try {
-            af.execute();
+            ctx.getMojo().execute();
             fail("Should have thrown an exception as "
                     + "org.apache.sling:somebundle has as alias 
org.apache.sling:myotherbundle");
         } catch (Exception e) {
@@ -825,47 +579,16 @@ public class AggregateFeaturesMojoTest {
 
     @Test
     public void testOverrideWithManualArtifactID() throws Exception {
-        File featuresDir = new File(
-                getClass().getResource("/aggregate-features/dir6").getFile());
-
-        Map<String, Feature> featureMap = new HashMap<>();
-        for (File f : featuresDir.listFiles((d,f) -> f.endsWith(".json"))) {
-            Feature feat = FeatureJSONReader.read(new FileReader(f), null);
-            featureMap.put(f.getAbsolutePath(), feat);
-        }
-
-        Aggregate ag = new Aggregate();
-        ag.setFilesInclude("test_c.json");
-        ag.setFilesInclude("test_d.json");
-        ag.classifier = "myagg";
-        ag.artifactsOverrides = 
Arrays.asList("org.apache.sling:myotherbundle:LATEST");
-
-        Build mockBuild = Mockito.mock(Build.class);
-        Mockito.when(mockBuild.getDirectory()).thenReturn(tempDir.toString());
-
-        Artifact parentArt = createMockArtifact();
-        MavenProject mockProj = Mockito.mock(MavenProject.class);
-        Mockito.when(mockProj.getBuild()).thenReturn(mockBuild);
-        Mockito.when(mockProj.getGroupId()).thenReturn("org.apache.sling");
-        
Mockito.when(mockProj.getArtifactId()).thenReturn("org.apache.sling.test");
-        Mockito.when(mockProj.getVersion()).thenReturn("1.0.1");
-        Mockito.when(mockProj.getArtifact()).thenReturn(parentArt);
-        Mockito.when(mockProj.getContextValue(Feature.class.getName() + 
"/rawmain.json-cache"))
-            .thenReturn(featureMap);
-        Mockito.when(mockProj.getContextValue(Feature.class.getName() + 
"/assembledmain.json-cache"))
-            .thenReturn(featureMap);
-        
Mockito.when(mockProj.getContextValue(Preprocessor.class.getName())).thenReturn(Boolean.TRUE);
-
-        AggregateFeaturesMojo af = new AggregateFeaturesMojo();
-        af.aggregates = Collections.singletonList(ag);
-        af.project = mockProj;
-        af.projectHelper = new DefaultMavenProjectHelper();
-        af.features = featuresDir;
-        af.handlerConfiguration = new HashMap<>();
-
-        af.execute();
-
-        Feature genFeat = featureMap.get(":aggregate:myagg:T");
+        TestContext ctx = prepareTestContext("/aggregate-features/dir6",
+                new String[] { "test_c.json", "test_d.json" }, 
+                (agg, mojo) -> {
+                    agg.classifier = "myagg";
+                    agg.artifactsOverrides = 
Arrays.asList("org.apache.sling:myotherbundle:LATEST");
+                 });
+        
+        ctx.getMojo().execute();
+
+        Feature genFeat = ctx.getFeatureMap().get(":aggregate:myagg:T");
         Bundles bundles = genFeat.getBundles();
         assertEquals(1, bundles.size());
         assertTrue(bundles.contains(new org.apache.sling.feature.Artifact(
@@ -1087,4 +810,68 @@ public class AggregateFeaturesMojoTest {
         Mockito.when(parentArtifact.getType()).thenReturn("foo");
         return parentArtifact;
     }
+    
+    private TestContext prepareTestContext(String featuresDirS, String[] 
filesInclude) throws IOException {
+        return prepareTestContext(featuresDirS, filesInclude, (a,m) -> {});
+    }
+    
+    private TestContext prepareTestContext(String featuresDirS, String[] 
filesInclude, BiConsumer<Aggregate, AggregateFeaturesMojo> customiser) throws 
IOException {
+        File featuresDir = new File(
+                getClass().getResource(featuresDirS).getFile());
+        // read features
+        Map<String, Feature> featureMap = new HashMap<>();
+        for (File f : featuresDir.listFiles((d,f) -> f.endsWith(".json"))) {
+            Feature feat = FeatureJSONReader.read(new FileReader(f), null);
+            featureMap.put(f.getAbsolutePath(), feat);
+        }
+
+        Aggregate fc = new Aggregate();
+        fc.classifier = "aggregated";
+        for (String include : filesInclude)
+            fc.setFilesInclude(include);
+
+        Build mockBuild = Mockito.mock(Build.class);
+        Mockito.when(mockBuild.getDirectory()).thenReturn(tempDir.toString());
+
+        Artifact parentArtifact = createMockArtifact();
+        MavenProject mockProj = Mockito.mock(MavenProject.class);
+        Mockito.when(mockProj.getBuild()).thenReturn(mockBuild);
+        Mockito.when(mockProj.getGroupId()).thenReturn("org.foo");
+        Mockito.when(mockProj.getArtifactId()).thenReturn("org.foo.bar");
+        Mockito.when(mockProj.getVersion()).thenReturn("1.2.3-SNAPSHOT");
+        Mockito.when(mockProj.getArtifact()).thenReturn(parentArtifact);
+        Mockito.when(mockProj.getContextValue(Feature.class.getName() + 
"/rawmain.json-cache"))
+            .thenReturn(featureMap);
+        Mockito.when(mockProj.getContextValue(Feature.class.getName() + 
"/assembledmain.json-cache"))
+            .thenReturn(featureMap);
+        
Mockito.when(mockProj.getContextValue(Preprocessor.class.getName())).thenReturn(Boolean.TRUE);
+
+        AggregateFeaturesMojo af = new AggregateFeaturesMojo();
+        af.aggregates = Collections.singletonList(fc);
+        af.project = mockProj;
+        af.projectHelper = new DefaultMavenProjectHelper();
+        af.features = featuresDir;
+
+        customiser.accept(fc, af);
+        
+        return new TestContext(af, featureMap);
+    }
+    
+    static class TestContext {
+        private final AggregateFeaturesMojo mojo;
+        private final Map<String, Feature> featureMap;
+
+        public TestContext(AggregateFeaturesMojo mojo, Map<String, Feature> 
featureMap) {
+            this.mojo = mojo;
+            this.featureMap = featureMap;
+        }
+        
+        public AggregateFeaturesMojo getMojo() {
+            return mojo;
+        }
+        
+        public Map<String, Feature> getFeatureMap() {
+            return featureMap;
+        }
+    }
 }

Reply via email to