You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by da...@apache.org on 2019/02/01 16:56:54 UTC
[sling-org-apache-sling-feature-extension-content] 20/46:
SLING-8077 - adding testcoverage and processing of source & target even
when being null
This is an automated email from the ASF dual-hosted git repository.
davidb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-extension-content.git
commit f8ee6b974c123648212581502e1eba772bde590e
Author: Dominik Suess <su...@adobe.com>
AuthorDate: Thu Nov 8 12:46:53 2018 +0100
SLING-8077 - adding testcoverage and processing of source & target even when being null
---
pom.xml | 13 +++
.../content/ContentOrderMergeProcessor.java | 14 ++-
.../content/ContentOrderMergeProcessorTest.java | 124 +++++++++++++++++++++
3 files changed, 146 insertions(+), 5 deletions(-)
diff --git a/pom.xml b/pom.xml
index f5c121d..e467dcf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -192,5 +192,18 @@
<version>1.3.1</version>
<scope>compile</scope>
</dependency>
+ <!-- Testing -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <version>2.23.0</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
diff --git a/src/main/java/org/apache/sling/feature/extension/content/ContentOrderMergeProcessor.java b/src/main/java/org/apache/sling/feature/extension/content/ContentOrderMergeProcessor.java
index 05b1133..9289e4c 100644
--- a/src/main/java/org/apache/sling/feature/extension/content/ContentOrderMergeProcessor.java
+++ b/src/main/java/org/apache/sling/feature/extension/content/ContentOrderMergeProcessor.java
@@ -24,13 +24,15 @@ import org.apache.sling.feature.FeatureConstants;
import org.apache.sling.feature.KeyValueMap;
import org.apache.sling.feature.builder.HandlerContext;
import org.apache.sling.feature.builder.MergeHandler;
-import org.apache.sling.feature.builder.PostProcessHandler;
public class ContentOrderMergeProcessor implements MergeHandler {
- private static final String DEFAULT_CONTENT_START_ORDER = "default.content.startorder";
+ public static final String DEFAULT_CONTENT_START_ORDER = "default.content.startorder";
- private void processFeature(HandlerContext context, Feature feature, Extension extension) {
+ private void processFeature(Feature feature, Extension extension) {
+ if (feature == null) {
+ return;
+ }
String defaultOrder = feature.getVariables().get(DEFAULT_CONTENT_START_ORDER);
if (defaultOrder != null) {
for (Artifact a : extension.getArtifacts()) {
@@ -51,12 +53,14 @@ public class ContentOrderMergeProcessor implements MergeHandler {
@Override
public void merge(HandlerContext context, Feature target, Feature source, Extension targetEx, Extension sourceEx) {
+
+ processFeature(target, targetEx);
+ processFeature(source, sourceEx);
+
if (targetEx == null) {
target.getExtensions().add(sourceEx);
return;
}
- processFeature(context, target, targetEx);
- processFeature(context, source, sourceEx);
for (final Artifact a : sourceEx.getArtifacts()) {
boolean replace = true;
final Artifact existing = targetEx.getArtifacts().getSame(a.getId());
diff --git a/src/test/java/org/apache/sling/feature/extension/content/ContentOrderMergeProcessorTest.java b/src/test/java/org/apache/sling/feature/extension/content/ContentOrderMergeProcessorTest.java
new file mode 100644
index 0000000..15c5b8f
--- /dev/null
+++ b/src/test/java/org/apache/sling/feature/extension/content/ContentOrderMergeProcessorTest.java
@@ -0,0 +1,124 @@
+/*
+ * 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.sling.feature.extension.content;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.sling.feature.Artifact;
+import org.apache.sling.feature.ArtifactId;
+import org.apache.sling.feature.Artifacts;
+import org.apache.sling.feature.Extension;
+import org.apache.sling.feature.ExtensionType;
+import org.apache.sling.feature.Feature;
+import org.apache.sling.feature.builder.HandlerContext;
+import org.junit.Test;
+import org.mockito.Mock;
+
+public class ContentOrderMergeProcessorTest {
+
+ @Mock
+ HandlerContext handlerContext;
+
+ @Test
+ public void testMergeDifferentStartOrders() {
+ final Artifacts targetArtifacts = new Artifacts();
+
+ final ArtifactId tid1 = ArtifactId.fromMvnId("sling:targetpack1:1");
+ Artifact targetpack1 = new Artifact(tid1);
+ assertNull(targetpack1.getMetadata().get("start-order"));
+ targetArtifacts.add(targetpack1);
+
+ final ArtifactId tid2 = ArtifactId.fromMvnId("sling:targetpack2:1");
+ Artifact targetpack2 = new Artifact(tid2);
+ assertNull(targetpack2.getMetadata().get("start-order"));
+ targetArtifacts.add(targetpack2);
+
+ final Artifacts sourceArtifacts = new Artifacts();
+
+ final ArtifactId sid1 = ArtifactId.fromMvnId("sling:sourcepack1:1");
+ final Artifact sourcepack1 = new Artifact(sid1);
+ assertNull(sourcepack1.getMetadata().get("start-order"));
+ sourceArtifacts.add(sourcepack1);
+
+ final ArtifactId sid2 = ArtifactId.fromMvnId("sling:sourcepack2:1");
+ Artifact sourcepack2 = new Artifact(sid2);
+ assertNull(sourcepack2.getMetadata().get("start-order"));
+ sourceArtifacts.add(sourcepack2);
+
+ final Extension targetEx = new Extension(ExtensionType.ARTIFACTS, "content-package", false);
+ targetEx.getArtifacts().addAll(targetArtifacts);
+ final Feature target = new Feature(ArtifactId.fromMvnId("sling:targettest:1"));
+ target.getExtensions().add(targetEx);
+ target.getVariables().put(ContentOrderMergeProcessor.DEFAULT_CONTENT_START_ORDER, "1");
+
+ final Extension sourceEx = new Extension(ExtensionType.ARTIFACTS, "content-package", false);
+ sourceEx.getArtifacts().addAll(sourceArtifacts);
+ final Feature source = new Feature(ArtifactId.fromMvnId("sling:sourcetest:1"));
+ source.getExtensions().add(sourceEx);
+ source.getVariables().put(ContentOrderMergeProcessor.DEFAULT_CONTENT_START_ORDER, "2");
+
+ final Set<Artifact> testArtifacts = new HashSet<>(Arrays.asList(targetpack1, targetpack2, sourcepack1, sourcepack2));
+
+ ContentOrderMergeProcessor comp = new ContentOrderMergeProcessor();
+ comp.merge(handlerContext, target, source, targetEx, sourceEx);
+
+
+ Artifacts mergedArtifacts = targetEx.getArtifacts();
+ assertTrue(mergedArtifacts.containsAll(testArtifacts));
+
+ assertEquals("1", mergedArtifacts.getSame(tid1).getMetadata().get("start-order"));
+ assertEquals("1", mergedArtifacts.getSame(tid2).getMetadata().get("start-order"));
+ assertEquals("2", mergedArtifacts.getSame(sid1).getMetadata().get("start-order"));
+ assertEquals("2", mergedArtifacts.getSame(sid2).getMetadata().get("start-order"));
+
+ }
+
+
+ @Test
+ public void testEmptyTargetExtension() {
+ final Artifacts sourceArtifacts = new Artifacts();
+
+ final ArtifactId sid1 = ArtifactId.fromMvnId("sling:sourcepack1:1");
+ final Artifact sourcepack1 = new Artifact(sid1);
+ assertNull(sourcepack1.getMetadata().get("start-order"));
+ sourceArtifacts.add(sourcepack1);
+
+ final Feature target = new Feature(ArtifactId.fromMvnId("sling:targettest:1"));
+
+ final Extension sourceEx = new Extension(ExtensionType.ARTIFACTS, "content-package", false);
+ sourceEx.getArtifacts().addAll(sourceArtifacts);
+
+ final Feature source = new Feature(ArtifactId.fromMvnId("sling:sourcetest:1"));
+ source.getExtensions().add(sourceEx);
+ source.getVariables().put(ContentOrderMergeProcessor.DEFAULT_CONTENT_START_ORDER, "2");
+
+ ContentOrderMergeProcessor comp = new ContentOrderMergeProcessor();
+ comp.merge(handlerContext, target, source, null, sourceEx);
+
+
+ Artifacts mergedArtifacts = target.getExtensions().getByName("content-package").getArtifacts();
+ assertTrue(mergedArtifacts.contains(sourcepack1));
+ assertEquals("2", mergedArtifacts.getSame(sid1).getMetadata().get("start-order"));
+ }
+
+}