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