From 25d13ac41ebfa95d0ef39b6949c5f18dc2136222 Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Thu, 2 Oct 2014 14:03:39 +0200 Subject: [PATCH] Sensible defaults for Servlet & Filter registrations in mock Prior to this commit, the getter methods in MockServletContext threw an UnsupportedOperationException when trying to retrieve Servlet and Filter registrations. This commit improves the behavior of these methods by returning null when a single registration is requested and an empty map when all registrations are requested. This is now in line with the Javadoc for ServletContext. Note, however, that the corresponding setter methods still throw UnsupportedOperationExceptions which is suitable behavior for a mock. Issue: SPR-12290 --- .../mock/web/MockServletContext.java | 26 +++++++++--- .../mock/web/MockServletContextTests.java | 40 ++++++++++++++++++- 2 files changed, 60 insertions(+), 6 deletions(-) diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockServletContext.java b/spring-test/src/main/java/org/springframework/mock/web/MockServletContext.java index b88fa81448..0fb98f2b68 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockServletContext.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockServletContext.java @@ -63,7 +63,7 @@ import org.springframework.web.util.WebUtils; * through {@link #setMajorVersion}/{@link #setMinorVersion}; default is 3.0. * Note that Servlet 3.0 support is limited: servlet, filter and listener * registration methods are not supported; neither is JSP configuration. - * We generally do not recommend to unit-test your ServletContainerInitializers and + * We generally do not recommend to unit test your ServletContainerInitializers and * WebApplicationInitializers which is where those registration methods would be used. * *

Used for testing the Spring web framework; only rarely necessary for testing @@ -605,14 +605,22 @@ public class MockServletContext implements ServletContext { throw new UnsupportedOperationException(); } + /** + * This method always returns {@code null}. + * @see javax.servlet.ServletContext#getServletRegistration(java.lang.String) + */ @Override public ServletRegistration getServletRegistration(String servletName) { - throw new UnsupportedOperationException(); + return null; } + /** + * This method always returns an {@linkplain Collections#emptyMap empty map}. + * @see javax.servlet.ServletContext#getServletRegistrations() + */ @Override public Map getServletRegistrations() { - throw new UnsupportedOperationException(); + return Collections.emptyMap(); } @Override @@ -635,14 +643,22 @@ public class MockServletContext implements ServletContext { throw new UnsupportedOperationException(); } + /** + * This method always returns {@code null}. + * @see javax.servlet.ServletContext#getFilterRegistration(java.lang.String) + */ @Override public FilterRegistration getFilterRegistration(String filterName) { - throw new UnsupportedOperationException(); + return null; } + /** + * This method always returns an {@linkplain Collections#emptyMap empty map}. + * @see javax.servlet.ServletContext#getFilterRegistrations() + */ @Override public Map getFilterRegistrations() { - throw new UnsupportedOperationException(); + return Collections.emptyMap(); } @Override diff --git a/spring-test/src/test/java/org/springframework/mock/web/MockServletContextTests.java b/spring-test/src/test/java/org/springframework/mock/web/MockServletContextTests.java index 177977f32c..83fd14cc05 100644 --- a/spring-test/src/test/java/org/springframework/mock/web/MockServletContextTests.java +++ b/spring-test/src/test/java/org/springframework/mock/web/MockServletContextTests.java @@ -16,16 +16,18 @@ package org.springframework.mock.web; +import java.util.Map; import java.util.Set; import javax.activation.FileTypeMap; import javax.activation.MimetypesFileTypeMap; +import javax.servlet.FilterRegistration; import javax.servlet.RequestDispatcher; +import javax.servlet.ServletRegistration; import org.junit.Test; import static org.hamcrest.CoreMatchers.*; - import static org.junit.Assert.*; /** @@ -147,4 +149,40 @@ public class MockServletContextTests { assertEquals(newDefault, response.getForwardedUrl()); } + /** + * @since 4.1.2 + */ + @Test + public void getServletRegistration() { + assertNull(sc.getServletRegistration("servlet")); + } + + /** + * @since 4.1.2 + */ + @Test + public void getServletRegistrations() { + Map servletRegistrations = sc.getServletRegistrations(); + assertNotNull(servletRegistrations); + assertEquals(0, servletRegistrations.size()); + } + + /** + * @since 4.1.2 + */ + @Test + public void getFilterRegistration() { + assertNull(sc.getFilterRegistration("filter")); + } + + /** + * @since 4.1.2 + */ + @Test + public void getFilterRegistrations() { + Map filterRegistrations = sc.getFilterRegistrations(); + assertNotNull(filterRegistrations); + assertEquals(0, filterRegistrations.size()); + } + } -- GitLab