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 2018/04/27 09:57:23 UTC

[sling-org-apache-sling-feature-applicationbuilder] 07/21: Update the comparison method for generated Application JSON

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-applicationbuilder.git

commit 073087e2de441e92cc213d0251136801ea2023de
Author: David Bosschaert <da...@gmail.com>
AuthorDate: Mon Mar 12 17:56:18 2018 +0000

    Update the comparison method for generated Application JSON
---
 pom.xml                                            | 24 +++++-----
 .../feature/applicationbuilder/impl/Main.java      | 14 +++---
 .../impl/ApplicationBuilderTest.java               | 55 +++++++++++++++++-----
 3 files changed, 62 insertions(+), 31 deletions(-)

diff --git a/pom.xml b/pom.xml
index 917e103..9f470e2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -104,6 +104,12 @@
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.feature.analyser</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+            <scope>provided</scope>
+        </dependency>        
+        <dependency>
+            <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.feature.resolver</artifactId>
             <version>0.0.1-SNAPSHOT</version>
             <scope>provided</scope>
@@ -133,6 +139,12 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.framework</artifactId>
+            <version>5.6.10</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.commons.osgi</artifactId>
             <version>2.4.0</version>
@@ -151,17 +163,5 @@
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.framework</artifactId>
-            <version>5.6.10</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.feature.analyser</artifactId>
-            <version>0.0.1-SNAPSHOT</version>
-            <scope>test</scope>
-        </dependency>        
     </dependencies>
 </project>
diff --git a/src/main/java/org/apache/sling/feature/applicationbuilder/impl/Main.java b/src/main/java/org/apache/sling/feature/applicationbuilder/impl/Main.java
index db733cb..3235e81 100644
--- a/src/main/java/org/apache/sling/feature/applicationbuilder/impl/Main.java
+++ b/src/main/java/org/apache/sling/feature/applicationbuilder/impl/Main.java
@@ -16,12 +16,6 @@
  */
 package org.apache.sling.feature.applicationbuilder.impl;
 
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.stream.Stream;
-
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.CommandLineParser;
 import org.apache.commons.cli.DefaultParser;
@@ -39,6 +33,12 @@ import org.apache.sling.feature.support.json.ApplicationJSONWriter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.stream.Stream;
+
 public class Main {
 
     private static Logger LOGGER;
@@ -190,7 +190,7 @@ public class Main {
     }
 
     private static void writeApplication(final Application app, final String out) {
-        LOGGER.info("Writing application...");
+        LOGGER.info("Writing application: " + out);
         final File file = new File(out);
         try ( final FileWriter writer = new FileWriter(file)) {
             ApplicationJSONWriter.write(writer, app);
diff --git a/src/test/java/org/apache/sling/feature/applicationbuilder/impl/ApplicationBuilderTest.java b/src/test/java/org/apache/sling/feature/applicationbuilder/impl/ApplicationBuilderTest.java
index 414d426..0c88957 100644
--- a/src/test/java/org/apache/sling/feature/applicationbuilder/impl/ApplicationBuilderTest.java
+++ b/src/test/java/org/apache/sling/feature/applicationbuilder/impl/ApplicationBuilderTest.java
@@ -36,6 +36,7 @@ import org.osgi.framework.Constants;
 
 import java.io.File;
 import java.io.FileReader;
+import java.io.StringReader;
 import java.io.StringWriter;
 import java.io.Writer;
 import java.net.URL;
@@ -45,6 +46,12 @@ import java.util.Collections;
 import java.util.Comparator;
 import java.util.Map;
 
+import javax.json.Json;
+import javax.json.JsonStructure;
+import javax.json.JsonWriter;
+import javax.json.JsonWriterFactory;
+import javax.json.stream.JsonGenerator;
+
 import static org.junit.Assert.assertEquals;
 
 public class ApplicationBuilderTest {
@@ -80,16 +87,21 @@ public class ApplicationBuilderTest {
 
         try (FeatureResolver fr = new FrameworkResolver(am, getFrameworkProps())) {
             Application app = ApplicationBuilder.assemble(null, bc, fr, features);
-            String genApp = writeApplication(app);
+            String actualJSON = writeApplication(app);
 
-            String expected = "{\"features\":["
+            String expectedJSON = "{\"features\":["
                     + "\"org.apache.sling.test.features:featureB:1.0.0\","
                     + "\"org.apache.sling.test.features:featureA:1.0.0\"],"
                 + "\"bundles\":["
-                    + "{\"id\":\"commons-io:commons-io:2.6\",\"start-order\":\"10\"},"
-                    + "{\"id\":\"org.apache.felix:org.apache.felix.http.servlet-api:1.1.2\",\"start-order\":\"15\"},"
-                    + "{\"id\":\"commons-fileupload:commons-fileupload:1.3.3\",\"start-order\":\"16\"}]}";
-            assertEquals(expected, genApp);
+                    + "{\"id\":\"commons-io:commons-io:2.6\",\"start-level\":\"10\",\"start-order\":\"10\"},"
+                    + "{\"id\":\"org.apache.felix:org.apache.felix.http.servlet-api:1.1.2\",\"start-level\":\"15\",\"start-order\":\"15\"},"
+                    + "{\"id\":\"commons-fileupload:commons-fileupload:1.3.3\",\"start-level\":\"16\",\"start-order\":\"16\"}]}";
+
+            StringWriter expectedWriter = new StringWriter();
+            StringWriter actualWriter = new StringWriter();
+
+            canonicalize(expectedJSON, expectedWriter, actualJSON, actualWriter);
+            assertEquals(expectedWriter.toString(), actualWriter.toString());
         }
     }
 
@@ -112,15 +124,28 @@ public class ApplicationBuilderTest {
             String expected = "{\"features\":["
                     + "\"org.apache.sling.test.features:featureC:1.0.0\","
                     + "\"org.apache.sling.test.features:featureD:1.0.0\"],"
-                    + "\"bundles\":[{\"id\":\"org.slf4j:slf4j-api:1.7.25\",\"start-order\":\"6\"}]}";
-            assertEquals(expected, genApp);
+                    + "\"bundles\":[{\"id\":\"org.slf4j:slf4j-api:1.7.25\",\"start-level\":\"6\",\"start-order\":\"6\"}]}";
+
+            StringWriter expectedWriter = new StringWriter();
+            StringWriter actualWriter = new StringWriter();
+            canonicalize(expected, expectedWriter, genApp, actualWriter);
+
+            assertEquals(expectedWriter.toString(), actualWriter.toString());
         }
     }
 
-    private static String writeApplication(Application app) throws Exception {
-        Writer writer = new StringWriter();
-        ApplicationJSONWriter.write(writer, app);
-        return writer.toString();
+    // Turn JSON into pretty-formatted canoncical JSON that should be comparable using String compare
+    private void canonicalize(String expected, StringWriter expectedWriter, String actual, StringWriter actualWriter) {
+        JsonStructure es = Json.createReader(new StringReader(expected)).read();
+        JsonStructure ea = Json.createReader(new StringReader(actual)).read();
+
+        JsonWriterFactory writerFactory = Json.createWriterFactory(
+                Collections.singletonMap(JsonGenerator.PRETTY_PRINTING, true));
+        JsonWriter w = writerFactory.createWriter(expectedWriter);
+        w.write(es);
+
+        JsonWriter w2 = writerFactory.createWriter(actualWriter);
+        w2.write(ea);
     }
 
     private Feature readFeature(final String res,
@@ -135,6 +160,12 @@ public class ApplicationBuilderTest {
         }
     }
 
+    private static String writeApplication(Application app) throws Exception {
+        Writer writer = new StringWriter();
+        ApplicationJSONWriter.write(writer, app);
+        return writer.toString();
+    }
+
     private static class TestFeatureProvider implements FeatureProvider {
         @Override
         public Feature provide(ArtifactId id) {

-- 
To stop receiving notification emails like this one, please contact
davidb@apache.org.