From commits-return-65889-archive-asf-public=cust-asf.ponee.io@sling.apache.org Thu Mar 15 08:44:18 2018 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx-eu-01.ponee.io (Postfix) with SMTP id CDC6518072F for ; Thu, 15 Mar 2018 08:44:17 +0100 (CET) Received: (qmail 60196 invoked by uid 500); 15 Mar 2018 07:44:16 -0000 Mailing-List: contact commits-help@sling.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@sling.apache.org Delivered-To: mailing list commits@sling.apache.org Received: (qmail 59471 invoked by uid 99); 15 Mar 2018 07:44:15 -0000 Received: from ec2-52-202-80-70.compute-1.amazonaws.com (HELO gitbox.apache.org) (52.202.80.70) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 15 Mar 2018 07:44:15 +0000 Received: by gitbox.apache.org (ASF Mail Server at gitbox.apache.org, from userid 33) id 24F0D808B5; Thu, 15 Mar 2018 07:44:15 +0000 (UTC) Date: Thu, 15 Mar 2018 07:44:18 +0000 To: "commits@sling.apache.org" Subject: [sling-whiteboard] 04/04: Update the comparison method for generated Application JSON MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit From: davidb@apache.org In-Reply-To: <152109985483.32598.10797409654203003384@gitbox.apache.org> References: <152109985483.32598.10797409654203003384@gitbox.apache.org> X-Git-Host: gitbox.apache.org X-Git-Repo: sling-whiteboard X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Rev: 977d6bcbb2c7f11f2939c79458332ef96e2d4985 X-Git-NotificationType: diff X-Git-Multimail-Version: 1.5.dev Auto-Submitted: auto-generated Message-Id: <20180315074415.24F0D808B5@gitbox.apache.org> 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-whiteboard.git commit 977d6bcbb2c7f11f2939c79458332ef96e2d4985 Author: David Bosschaert AuthorDate: Mon Mar 12 17:56:18 2018 +0000 Update the comparison method for generated Application JSON --- featuremodel/feature-applicationbuilder/pom.xml | 24 +++++----- .../feature/applicationbuilder/impl/Main.java | 14 +++--- .../impl/ApplicationBuilderTest.java | 55 +++++++++++++++++----- 3 files changed, 62 insertions(+), 31 deletions(-) diff --git a/featuremodel/feature-applicationbuilder/pom.xml b/featuremodel/feature-applicationbuilder/pom.xml index 917e103..9f470e2 100644 --- a/featuremodel/feature-applicationbuilder/pom.xml +++ b/featuremodel/feature-applicationbuilder/pom.xml @@ -104,6 +104,12 @@ org.apache.sling + org.apache.sling.feature.analyser + 0.0.1-SNAPSHOT + provided + + + org.apache.sling org.apache.sling.feature.resolver 0.0.1-SNAPSHOT provided @@ -133,6 +139,12 @@ provided + org.apache.felix + org.apache.felix.framework + 5.6.10 + provided + + org.apache.sling org.apache.sling.commons.osgi 2.4.0 @@ -151,17 +163,5 @@ junit test - - org.apache.felix - org.apache.felix.framework - 5.6.10 - test - - - org.apache.sling - org.apache.sling.feature.analyser - 0.0.1-SNAPSHOT - test - diff --git a/featuremodel/feature-applicationbuilder/src/main/java/org/apache/sling/feature/applicationbuilder/impl/Main.java b/featuremodel/feature-applicationbuilder/src/main/java/org/apache/sling/feature/applicationbuilder/impl/Main.java index db733cb..3235e81 100644 --- a/featuremodel/feature-applicationbuilder/src/main/java/org/apache/sling/feature/applicationbuilder/impl/Main.java +++ b/featuremodel/feature-applicationbuilder/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/featuremodel/feature-applicationbuilder/src/test/java/org/apache/sling/feature/applicationbuilder/impl/ApplicationBuilderTest.java b/featuremodel/feature-applicationbuilder/src/test/java/org/apache/sling/feature/applicationbuilder/impl/ApplicationBuilderTest.java index 414d426..0c88957 100644 --- a/featuremodel/feature-applicationbuilder/src/test/java/org/apache/sling/feature/applicationbuilder/impl/ApplicationBuilderTest.java +++ b/featuremodel/feature-applicationbuilder/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.