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/10/02 17:33:10 UTC

svn commit: r1810562 - in /sling/trunk/bundles/extensions/servlet-helpers/src: main/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequest.java test/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequestTest.java

Author: justin
Date: Mon Oct  2 17:33:10 2017
New Revision: 1810562

URL: http://svn.apache.org/viewvc?rev=1810562&view=rev
Log:
SLING-7174 - implement getReader in MockRequest

Modified:
    sling/trunk/bundles/extensions/servlet-helpers/src/main/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequest.java
    sling/trunk/bundles/extensions/servlet-helpers/src/test/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequestTest.java

Modified: sling/trunk/bundles/extensions/servlet-helpers/src/main/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/servlet-helpers/src/main/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequest.java?rev=1810562&r1=1810561&r2=1810562&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/servlet-helpers/src/main/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequest.java (original)
+++ sling/trunk/bundles/extensions/servlet-helpers/src/main/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequest.java Mon Oct  2 17:33:10 2017
@@ -24,9 +24,11 @@ import java.io.BufferedReader;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.StringReader;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.net.URLEncoder;
+import java.nio.charset.Charset;
 import java.security.Principal;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -101,6 +103,8 @@ public class MockSlingHttpServletRequest
     private String remoteHost;
     private int remotePort;
     private Locale locale = Locale.US;
+    private boolean getInputStreamCalled;
+    private boolean getReaderCalled;
 
     private MockRequestDispatcherFactory requestDispatcherFactory;
     
@@ -540,11 +544,12 @@ public class MockSlingHttpServletRequest
 
     @Override
     public ServletInputStream getInputStream() {
-        if (content == null) {
-            return null;
+        if (getReaderCalled) {
+            throw new IllegalArgumentException();
         }
+        getInputStreamCalled = true;
         return new ServletInputStream() {
-            private final InputStream is = new ByteArrayInputStream(content);
+            private final InputStream is = content == null ? new ByteArrayInputStream(new byte[0]) : new ByteArrayInputStream(content);
             @Override
             public int read() throws IOException {
                 return is.read();
@@ -823,7 +828,26 @@ public class MockSlingHttpServletRequest
 
     @Override
     public BufferedReader getReader() {
-        throw new UnsupportedOperationException();
+        if (getInputStreamCalled) {
+            throw new IllegalArgumentException();
+        }
+        getReaderCalled = true;
+        if (this.content == null) {
+            return new BufferedReader(new StringReader(""));
+        } else {
+            String content;
+            try {
+                if (characterEncoding == null) {
+                    content = new String(this.content, Charset.defaultCharset());
+                } else {
+                    content = new String(this.content, characterEncoding);
+                }
+            } catch (UnsupportedEncodingException e) {
+                content = new String(this.content, Charset.defaultCharset());
+            }
+            return new BufferedReader(new StringReader(content));
+        }
+
     }
 
     @Override

Modified: sling/trunk/bundles/extensions/servlet-helpers/src/test/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequestTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/servlet-helpers/src/test/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequestTest.java?rev=1810562&r1=1810561&r2=1810562&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/servlet-helpers/src/test/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequestTest.java (original)
+++ sling/trunk/bundles/extensions/servlet-helpers/src/test/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequestTest.java Mon Oct  2 17:33:10 2017
@@ -29,8 +29,10 @@ import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import java.io.BufferedReader;
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
+import java.nio.charset.Charset;
 import java.util.Calendar;
 import java.util.Enumeration;
 import java.util.LinkedHashMap;
@@ -326,7 +328,8 @@ public class MockSlingHttpServletRequest
     @Test
     public void testContent() throws Exception {
         assertEquals(0, request.getContentLength());
-        assertNull(request.getInputStream());
+        assertNotNull(request.getInputStream());
+        assertArrayEquals(new byte[0], IOUtils.toByteArray(request.getInputStream()));
         
         byte[] data = new byte[] { 0x01,0x02,0x03 };
         request.setContent(data);
@@ -336,6 +339,41 @@ public class MockSlingHttpServletRequest
     }
 
     @Test
+    public void testContentFromReader() throws Exception {
+        Charset utf8 = Charset.forName("UTF-8");
+        request.setContent("hello".getBytes(utf8));
+        assertEquals(5, request.getContentLength());
+        BufferedReader reader = request.getReader();
+        String content = IOUtils.toString(reader);
+        assertEquals("hello", content);
+    }
+
+    @Test
+    public void testGetReaderAfterGetInputStream() {
+        boolean thrown = false;
+        request.getInputStream();
+        try {
+            request.getReader();
+        } catch (IllegalArgumentException e) {
+            thrown = true;
+        }
+        assertTrue(thrown);
+    }
+
+    @Test
+    public void testGetInputStreamAfterGetReader() {
+        boolean thrown = false;
+        request.getReader();
+        try {
+            request.getInputStream();
+        } catch (IllegalArgumentException e) {
+            thrown = true;
+        }
+        assertTrue(thrown);
+    }
+
+
+    @Test
     public void testGetRequestDispatcher() {
         MockRequestDispatcherFactory requestDispatcherFactory = mock(MockRequestDispatcherFactory.class);
         RequestDispatcher requestDispatcher = mock(RequestDispatcher.class);