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