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")