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

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

commit 4ab59ef7d25db2d3c726e07434414b1cef15a300
Author: Justin Edelson <[email protected]>
AuthorDate: Mon Oct 2 17:33:10 2017 +0000

    SLING-7174 - implement getReader in MockRequest
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1810562 
13f79535-47bb-0310-9956-ffa450edef68
---
 .../MockSlingHttpServletRequest.java               | 32 ++++++++++++++---
 .../MockSlingHttpServletRequestTest.java           | 40 +++++++++++++++++++++-
 2 files changed, 67 insertions(+), 5 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequest.java
 
b/src/main/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequest.java
index 94a2ba6..128db0c 100644
--- 
a/src/main/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequest.java
+++ 
b/src/main/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequest.java
@@ -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 extends 
SlingAdaptable implements Sling
     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 extends 
SlingAdaptable implements Sling
 
     @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 extends 
SlingAdaptable implements Sling
 
     @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
diff --git 
a/src/test/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequestTest.java
 
b/src/test/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequestTest.java
index 26e5f51..f3f9c00 100644
--- 
a/src/test/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequestTest.java
+++ 
b/src/test/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequestTest.java
@@ -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 MockSlingHttpServletRequestTest {
     @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 MockSlingHttpServletRequestTest {
     }
 
     @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);

-- 
To stop receiving notification emails like this one, please contact
"[email protected]" <[email protected]>.

Reply via email to