You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ju...@apache.org on 2017/01/09 05:15:48 UTC

svn commit: r1777928 - in /sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter: BaseRequestComponent.java ExporterTest.java ExtendedRequestComponent.java

Author: justin
Date: Mon Jan  9 05:15:48 2017
New Revision: 1777928

URL: http://svn.apache.org/viewvc?rev=1777928&view=rev
Log:
additional ITs for Sling Models Jackson Exporter

Modified:
    sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/BaseRequestComponent.java
    sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/ExporterTest.java
    sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/ExtendedRequestComponent.java

Modified: sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/BaseRequestComponent.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/BaseRequestComponent.java?rev=1777928&r1=1777927&r2=1777928&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/BaseRequestComponent.java (original)
+++ sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/BaseRequestComponent.java Mon Jan  9 05:15:48 2017
@@ -20,6 +20,7 @@ import com.fasterxml.jackson.annotation.
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.models.annotations.Exporter;
+import org.apache.sling.models.annotations.ExporterOption;
 import org.apache.sling.models.annotations.Model;
 import org.apache.sling.models.annotations.Via;
 import org.apache.sling.models.annotations.injectorspecific.SlingObject;
@@ -30,7 +31,9 @@ import javax.servlet.http.HttpServletReq
 import java.util.Map;
 
 @Model(adaptables = { SlingHttpServletRequest.class }, resourceType = "sling/exp-request/base")
-@Exporter(name = "jackson", extensions = "json")
+@Exporter(name = "jackson", extensions = "json", options = {
+    @ExporterOption(name = "MapperFeature.SORT_PROPERTIES_ALPHABETICALLY", value = "true")
+})
 public class BaseRequestComponent {
 
     @Inject @SlingObject

Modified: sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/ExporterTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/ExporterTest.java?rev=1777928&r1=1777927&r2=1777928&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/ExporterTest.java (original)
+++ sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/ExporterTest.java Mon Jan  9 05:15:48 2017
@@ -16,6 +16,9 @@
  */
 package org.apache.sling.models.it.exporter;
 
+import java.io.InputStream;
+import java.io.ByteArrayInputStream;
+import java.text.Format;
 import java.util.Calendar;
 import java.util.Collections;
 import java.util.HashMap;
@@ -23,9 +26,8 @@ import java.util.Map;
 import java.util.TimeZone;
 
 import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.time.FastDateFormat;
 import org.apache.sling.api.SlingConstants;
-import org.apache.sling.api.resource.LoginException;
-import org.apache.sling.api.resource.PersistenceException;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceResolverFactory;
@@ -62,13 +64,25 @@ public class ExporterTest {
     private final String interfaceRequestComponentPath = "/content/exp-request/interfaceComponent";
     private Calendar testDate;
 
+    private Format dateFormat = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
+
     @Before
-    public void setup() throws LoginException, PersistenceException {
+    public void setup() throws Exception {
         ResourceResolver adminResolver = null;
         try {
             adminResolver = rrFactory.getAdministrativeResourceResolver(null);
             Map<String, Object> properties = new HashMap<String, Object>();
             properties.put("sampleValue", "baseTESTValue");
+            properties.put("sampleBooleanValue", true);
+            properties.put("sampleLongValue", 1l);
+            properties.put("sampleDoubleValue", 1d);
+            properties.put("sampleArray", new String[] { "a", "b", "c" });
+            properties.put("sampleEmptyArray", new String[0]);
+            properties.put("sampleBinary", new ByteArrayInputStream("abc".getBytes("UTF-8")));
+            properties.put("sampleBinaryArray", new InputStream[] {
+                    new ByteArrayInputStream("abc".getBytes("UTF-8")),
+                    new ByteArrayInputStream("def".getBytes("UTF-8"))
+            });
             properties.put(SlingConstants.NAMESPACE_PREFIX + ":" + SlingConstants.PROPERTY_RESOURCE_TYPE,
                     "sling/exp/base");
             ResourceUtil.getOrCreateResource(adminResolver, baseComponentPath, properties, null, false);
@@ -131,6 +145,16 @@ public class ExporterTest {
             Assert.assertTrue("JSON Data should contain the property value",
                     StringUtils.contains(jsonData, "baseTESTValue"));
 
+            JSONObject parsed = new JSONObject(jsonData);
+            JSONObject resource = parsed.getJSONObject("resource");
+            Assert.assertEquals(3, resource.getJSONArray("sampleArray").length());
+            Assert.assertEquals(1.0d, resource.getDouble("sampleDoubleValue"), .1);
+            Assert.assertEquals(2, resource.getJSONArray(":sampleBinaryArray").length());
+            Assert.assertTrue(resource.getBoolean("sampleBooleanValue"));
+            Assert.assertEquals(1, resource.getLong("sampleLongValue"));
+            Assert.assertEquals(3, resource.getLong(":sampleBinary"));
+            Assert.assertEquals(0, resource.getJSONArray("sampleEmptyArray"));
+
             final Resource extendedComponentResource = resolver.getResource(extendedComponentPath);
             Assert.assertNotNull(extendedComponentResource);
             jsonData = modelFactory.exportModelForResource(extendedComponentResource, "jackson", String.class,
@@ -152,6 +176,27 @@ public class ExporterTest {
     }
 
     @Test
+    public void testExportToTidyJSON() throws Exception {
+        ResourceResolver resolver = null;
+        try {
+            resolver = rrFactory.getAdministrativeResourceResolver(null);
+            final Resource baseComponentResource = resolver.getResource(baseComponentPath);
+            Assert.assertNotNull(baseComponentResource);
+            String jsonData = modelFactory.exportModelForResource(baseComponentResource, "jackson", String.class,
+                    Collections.<String, String>emptyMap());
+            Assert.assertFalse(jsonData.contains(System.lineSeparator()));
+
+            jsonData = modelFactory.exportModelForResource(baseComponentResource, "jackson", String.class,
+                    Collections.<String, String>singletonMap("tidy", "true"));
+            Assert.assertTrue(jsonData.contains(System.lineSeparator()));
+        } finally {
+            if (resolver != null && resolver.isLive()) {
+                resolver.close();
+            }
+        }
+    }
+
+    @Test
     public void testExportToMap() throws Exception {
         ResourceResolver resolver = null;
         try {
@@ -208,7 +253,11 @@ public class ExporterTest {
             resolver = rrFactory.getAdministrativeResourceResolver(null);
             FakeResponse response = new FakeResponse();
             slingRequestProcessor.processRequest(new FakeRequest(baseRequestComponentPath + ".model.json"), response, resolver);
-            JSONObject obj = new JSONObject(response.getStringWriter().toString());
+            String stringOutput = response.getStringWriter().toString();
+
+            Assert.assertTrue(stringOutput.startsWith("{\"UPPER\":"));
+
+            JSONObject obj = new JSONObject(stringOutput);
             Assert.assertEquals("application/json", response.getContentType());
             Assert.assertEquals("BASETESTVALUE", obj.getString("UPPER"));
             Assert.assertTrue(obj.has("testBindingsObject"));
@@ -224,7 +273,7 @@ public class ExporterTest {
             obj = new JSONObject(response.getStringWriter().toString());
             Assert.assertEquals("application/json", response.getContentType());
             Assert.assertEquals(extendedRequestComponentPath, obj.getString("id"));
-            Assert.assertEquals(testDate.getTimeInMillis(), obj.getLong("date"));
+            Assert.assertEquals(dateFormat.format(testDate), obj.getString("date"));
 
             response = new FakeResponse();
             slingRequestProcessor.processRequest(new FakeRequest(interfaceRequestComponentPath + ".model.json"), response, resolver);

Modified: sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/ExtendedRequestComponent.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/ExtendedRequestComponent.java?rev=1777928&r1=1777927&r2=1777928&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/ExtendedRequestComponent.java (original)
+++ sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/ExtendedRequestComponent.java Mon Jan  9 05:15:48 2017
@@ -19,6 +19,7 @@ package org.apache.sling.models.it.expor
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.models.annotations.Exporter;
+import org.apache.sling.models.annotations.ExporterOption;
 import org.apache.sling.models.annotations.Model;
 import org.apache.sling.models.annotations.Via;
 
@@ -28,7 +29,9 @@ import java.util.Date;
 import java.util.GregorianCalendar;
 
 @Model(adaptables = { SlingHttpServletRequest.class }, resourceType = "sling/exp-request/extended")
-@Exporter(name = "jackson", extensions = "json")
+@Exporter(name = "jackson", extensions = "json", options = {
+    @ExporterOption(name = "SerializationFeature.WRITE_DATES_AS_TIMESTAMPS", value = "false")
+})
 public class ExtendedRequestComponent extends BaseRequestComponent {
 
     @Inject @Via("resource")