diff --git a/spring-test/.springBeans b/spring-test/.springBeans index a4a7e241718f9678b135841772f1454d2e392e5f..656622651c9d834673707cbebdf839cdb42751f7 100644 --- a/spring-test/.springBeans +++ b/spring-test/.springBeans @@ -1,7 +1,7 @@ 1 - + @@ -9,7 +9,7 @@ src/test/java/org/springframework/test/context/junit4/profile/xml/DefaultProfileXmlConfigTests-context.xml src/test/java/org/springframework/test/context/junit4/aci/xml/MultipleInitializersXmlConfigTests-context.xml - src/test/resources/org/springframework/test/context/web/BasicXmlWacTests-config.xml + src/test/resources/org/springframework/test/context/web/RequestAndSessionScopedBeansWacTests-context.xml diff --git a/spring-test/src/test/java/org/springframework/test/context/web/AbstractBasicWacTests.java b/spring-test/src/test/java/org/springframework/test/context/web/AbstractBasicWacTests.java index 428791fbcffbbabac2a824f2dcc4bba496e09cee..5a1a8421ddad4754e2643a48976c3704d4a450d0 100644 --- a/spring-test/src/test/java/org/springframework/test/context/web/AbstractBasicWacTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/web/AbstractBasicWacTests.java @@ -27,6 +27,7 @@ import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; +import org.springframework.mock.web.MockHttpSession; import org.springframework.mock.web.MockServletContext; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.web.context.ServletContextAware; @@ -55,6 +56,9 @@ public abstract class AbstractBasicWacTests implements ServletContextAware { @Autowired protected MockHttpServletResponse response; + @Autowired + protected MockHttpSession session; + @Autowired protected ServletWebRequest webRequest; @@ -75,6 +79,7 @@ public abstract class AbstractBasicWacTests implements ServletContextAware { assertNotNull("ServletContext should have been autowired from the WAC.", mockServletContext); assertNotNull("MockHttpServletRequest should have been autowired from the WAC.", request); assertNotNull("MockHttpServletResponse should have been autowired from the WAC.", response); + assertNotNull("MockHttpSession should have been autowired from the WAC.", session); assertNotNull("ServletWebRequest should have been autowired from the WAC.", webRequest); Object rootWac = mockServletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); diff --git a/spring-test/src/test/java/org/springframework/test/context/web/RequestAndSessionScopedBeansWacTests.java b/spring-test/src/test/java/org/springframework/test/context/web/RequestAndSessionScopedBeansWacTests.java new file mode 100644 index 0000000000000000000000000000000000000000..c07b25a9273bb2e782bda71e30903442afc03c5e --- /dev/null +++ b/spring-test/src/test/java/org/springframework/test/context/web/RequestAndSessionScopedBeansWacTests.java @@ -0,0 +1,80 @@ +/* + * Copyright 2002-2012 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.test.context.web; + +import static org.junit.Assert.*; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.TestBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.web.context.WebApplicationContext; + +/** + * Integration tests that verify support for request and session scoped beans + * in conjunction with the TestContext Framework. + * + * @author Sam Brannen + * @since 3.2 + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration +@WebAppConfiguration +public class RequestAndSessionScopedBeansWacTests { + + @Autowired + private WebApplicationContext wac; + + @Autowired + private MockHttpServletRequest request; + + @Autowired + private MockHttpSession session; + + + @Test + public void requestScope() throws Exception { + final String beanName = "requestScopedTestBean"; + final String contextPath = "/path"; + + assertNull(request.getAttribute(beanName)); + + request.setContextPath(contextPath); + TestBean testBean = wac.getBean(beanName, TestBean.class); + + assertEquals(contextPath, testBean.getName()); + assertSame(testBean, request.getAttribute(beanName)); + assertSame(testBean, wac.getBean(beanName, TestBean.class)); + } + + @Test + public void sessionScope() throws Exception { + final String beanName = "sessionScopedTestBean"; + + assertNull(session.getAttribute(beanName)); + + TestBean testBean = wac.getBean(beanName, TestBean.class); + + assertSame(testBean, session.getAttribute(beanName)); + assertSame(testBean, wac.getBean(beanName, TestBean.class)); + } + +} diff --git a/spring-test/src/test/java/org/springframework/test/context/web/WebContextLoaderTestSuite.java b/spring-test/src/test/java/org/springframework/test/context/web/WebContextLoaderTestSuite.java index e20866222c18384d0dd5fa854500fbf84bf7e045..06a83a2923386aa823160c5a29f3aaa40237d79b 100644 --- a/spring-test/src/test/java/org/springframework/test/context/web/WebContextLoaderTestSuite.java +++ b/spring-test/src/test/java/org/springframework/test/context/web/WebContextLoaderTestSuite.java @@ -33,8 +33,9 @@ import org.springframework.web.context.WebApplicationContext; @RunWith(Suite.class) // Note: the following 'multi-line' layout is for enhanced code readability. @SuiteClasses({// - BasicXmlWacTests.class,// - BasicAnnotationConfigWacTests.class // +BasicXmlWacTests.class,// + BasicAnnotationConfigWacTests.class,// + RequestAndSessionScopedBeansWacTests.class // }) public class WebContextLoaderTestSuite { } diff --git a/spring-test/src/test/resources/org/springframework/test/context/web/RequestAndSessionScopedBeansWacTests-context.xml b/spring-test/src/test/resources/org/springframework/test/context/web/RequestAndSessionScopedBeansWacTests-context.xml new file mode 100644 index 0000000000000000000000000000000000000000..0930460eeaa71e74f4c076b733fb089185c8b1df --- /dev/null +++ b/spring-test/src/test/resources/org/springframework/test/context/web/RequestAndSessionScopedBeansWacTests-context.xml @@ -0,0 +1,11 @@ + + + + + + + + + +