You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2018/06/20 12:56:11 UTC

[sling-whiteboard] branch master updated: Add JSONCapabilitiesWriterTest

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

bdelacretaz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git


The following commit(s) were added to refs/heads/master by this push:
     new cf3ccc2  Add JSONCapabilitiesWriterTest
cf3ccc2 is described below

commit cf3ccc279a7d56b41188b6ab2e4b1d2554389526
Author: Bertrand Delacretaz <bd...@apache.org>
AuthorDate: Wed Jun 20 14:56:01 2018 +0200

    Add JSONCapabilitiesWriterTest
---
 capabilities/pom.xml                               |  6 ++
 .../sling/capabilities/CapabilitiesSource.java     |  4 +-
 .../internal/JSONCapabilitiesWriter.java           |  4 +-
 .../internal/{ => demo}/JvmCapabilitiesSource.java |  8 +--
 .../OsgiFrameworkCapabilitiesSource.java           |  8 +--
 .../internal/JSONCapabilitiesWriterTest.java       | 82 ++++++++++++++++++++++
 6 files changed, 100 insertions(+), 12 deletions(-)

diff --git a/capabilities/pom.xml b/capabilities/pom.xml
index a165edb..d201d81 100644
--- a/capabilities/pom.xml
+++ b/capabilities/pom.xml
@@ -98,6 +98,12 @@
     </dependency>
     <!-- TESTING -->
     <dependency>
+      <groupId>org.apache.sling</groupId>
+      <artifactId>org.apache.sling.commons.johnzon</artifactId>
+      <version>1.0.0</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <scope>test</scope>
diff --git a/capabilities/src/main/java/org/apache/sling/capabilities/CapabilitiesSource.java b/capabilities/src/main/java/org/apache/sling/capabilities/CapabilitiesSource.java
index b2a92ab..e6ec9d5 100644
--- a/capabilities/src/main/java/org/apache/sling/capabilities/CapabilitiesSource.java
+++ b/capabilities/src/main/java/org/apache/sling/capabilities/CapabilitiesSource.java
@@ -36,8 +36,8 @@ public interface CapabilitiesSource {
     String getNamespace();
     
     /** @return zero to N capabilities, each being represented by
-     *      a key/value pair of Strings.
+     *      a key/value pair.
      * @throws Exception if the capabilities could not be computed.
      */
-    Map<String, String> getCapabilities() throws Exception;
+    Map<String, Object> getCapabilities() throws Exception;
 }
\ No newline at end of file
diff --git a/capabilities/src/main/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriter.java b/capabilities/src/main/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriter.java
index 25f193b..3552941 100644
--- a/capabilities/src/main/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriter.java
+++ b/capabilities/src/main/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriter.java
@@ -38,7 +38,7 @@ class JSONCapabilitiesWriter {
         jw.key(CAPS_KEY);
         jw.object();
         
-        Map<String, String> values = null;
+        Map<String, Object> values = null;
         for(CapabilitiesSource s : sources) {
             try {
                 values = s.getCapabilities();
@@ -48,7 +48,7 @@ class JSONCapabilitiesWriter {
             }
             jw.key(s.getNamespace());
             jw.object();
-            for(Map.Entry<String, String> e : values.entrySet()) {
+            for(Map.Entry<String, Object> e : values.entrySet()) {
                 jw.key(e.getKey());
                 jw.value(e.getValue());
             }
diff --git a/capabilities/src/main/java/org/apache/sling/capabilities/internal/JvmCapabilitiesSource.java b/capabilities/src/main/java/org/apache/sling/capabilities/internal/demo/JvmCapabilitiesSource.java
similarity index 88%
rename from capabilities/src/main/java/org/apache/sling/capabilities/internal/JvmCapabilitiesSource.java
rename to capabilities/src/main/java/org/apache/sling/capabilities/internal/demo/JvmCapabilitiesSource.java
index 399e78d..7116da0 100644
--- a/capabilities/src/main/java/org/apache/sling/capabilities/internal/JvmCapabilitiesSource.java
+++ b/capabilities/src/main/java/org/apache/sling/capabilities/internal/demo/JvmCapabilitiesSource.java
@@ -16,7 +16,7 @@
  ~ specific language governing permissions and limitations
  ~ under the License.
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
-package org.apache.sling.capabilities.internal;
+package org.apache.sling.capabilities.internal.demo;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -31,13 +31,13 @@ public class JvmCapabilitiesSource implements CapabilitiesSource {
 
     @Override
     public String getNamespace() {
-        return "org.apache.sling.capabilities.demo." + getClass().getSimpleName();
+        return "org.apache.sling.capabilities.DEMO." + getClass().getSimpleName();
     }
     
     @Override
-    public Map<String, String> getCapabilities() throws Exception {
+    public Map<String, Object> getCapabilities() throws Exception {
         // Return semi-useful JVM properties for our proof of concept
-        final Map<String, String> result = new HashMap<>();
+        final Map<String, Object> result = new HashMap<>();
 
         final String[] props = {
             "java.specification.version",
diff --git a/capabilities/src/main/java/org/apache/sling/capabilities/internal/OsgiFrameworkCapabilitiesSource.java b/capabilities/src/main/java/org/apache/sling/capabilities/internal/demo/OsgiFrameworkCapabilitiesSource.java
similarity index 89%
rename from capabilities/src/main/java/org/apache/sling/capabilities/internal/OsgiFrameworkCapabilitiesSource.java
rename to capabilities/src/main/java/org/apache/sling/capabilities/internal/demo/OsgiFrameworkCapabilitiesSource.java
index 2a1a30f..fd0ed5a 100644
--- a/capabilities/src/main/java/org/apache/sling/capabilities/internal/OsgiFrameworkCapabilitiesSource.java
+++ b/capabilities/src/main/java/org/apache/sling/capabilities/internal/demo/OsgiFrameworkCapabilitiesSource.java
@@ -16,7 +16,7 @@
  ~ specific language governing permissions and limitations
  ~ under the License.
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
-package org.apache.sling.capabilities.internal;
+package org.apache.sling.capabilities.internal.demo;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -43,12 +43,12 @@ public class OsgiFrameworkCapabilitiesSource implements CapabilitiesSource {
 
     @Override
     public String getNamespace() {
-        return "org.apache.sling.capabilities.demo." + getClass().getSimpleName();
+        return "org.apache.sling.capabilities.DEMO." + getClass().getSimpleName();
     }
     
     @Override
-    public Map<String, String> getCapabilities() throws Exception {
-        final Map<String, String> result = new HashMap<>();
+    public Map<String, Object> getCapabilities() throws Exception {
+        final Map<String, Object> result = new HashMap<>();
         
         final Bundle frameworkBundle = bundleContext.getBundle(0);
         
diff --git a/capabilities/src/test/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriterTest.java b/capabilities/src/test/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriterTest.java
new file mode 100644
index 0000000..78e6b75
--- /dev/null
+++ b/capabilities/src/test/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriterTest.java
@@ -0,0 +1,82 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ 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.capabilities.internal;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.json.Json;
+import javax.json.JsonObject;
+import javax.json.JsonReader;
+import org.apache.sling.capabilities.CapabilitiesSource;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
+
+/** Test the JSONCapabilitiesWriter */
+public class JSONCapabilitiesWriterTest {
+
+    static class TestSource implements CapabilitiesSource {
+        private final String namespace;
+        private final Map<String, Object> props = new HashMap<>();
+        
+        TestSource(String namespace, int propsCount) {
+            this.namespace = namespace;
+            for(int i=0; i < propsCount; i++) {
+                props.put("KEY_" + i + "_" + namespace, "VALUE_" + i + "_" + namespace);
+            }
+        }
+
+        @Override
+        public Map<String, Object> getCapabilities() throws Exception {
+            return Collections.unmodifiableMap(props);
+        }
+        
+        @Override
+        public String getNamespace() {
+            return namespace;
+        }
+        
+    }
+    
+    @Test
+    public void testWithTwoSources() throws IOException {
+        final List<CapabilitiesSource> sources = new ArrayList<>();
+        sources.add(new TestSource("A", 2));
+        sources.add(new TestSource("B", 1));
+        
+        final StringWriter w = new StringWriter();
+        new JSONCapabilitiesWriter().writeJson(w, sources);
+        
+        final JsonReader r = Json.createReader(new StringReader(w.toString()));
+        final JsonObject rootJson = r.readObject();
+        final JsonObject json = rootJson.getJsonObject(JSONCapabilitiesWriter.CAPS_KEY);
+        assertEquals("VALUE_0_A", json.getJsonObject("A").getString("KEY_0_A"));
+        assertEquals("VALUE_1_A", json.getJsonObject("A").getString("KEY_1_A"));
+        assertEquals("VALUE_0_B", json.getJsonObject("B").getString("KEY_0_B"));
+        
+        assertEquals("Expecting 1 root key", 1, rootJson.keySet().size());
+        assertEquals("Expecting 2 keys at A", 2, json.getJsonObject("A").keySet().size());
+        assertEquals("Expecting 1 key at B", 1, json.getJsonObject("B").keySet().size());
+    }
+}
\ No newline at end of file