/* vim: set ts=2 et sw=2 cindent fo=qroca: */ package com.globant.katari.core.web; import static org.easymock.EasyMock.*; import java.util.List; import java.util.LinkedList; import java.util.EventListener; import javax.servlet.ServletContext; import javax.servlet.ServletContextListener; import javax.servlet.ServletContextAttributeListener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextAttributeEvent; import javax.servlet.ServletRequestEvent; import javax.servlet.ServletRequestListener; import javax.servlet.http.HttpSessionActivationListener; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionListener; import javax.servlet.http.HttpSessionBindingListener; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionBindingEvent; import junit.framework.TestCase; import org.springframework.web.context.WebApplicationContext; public class ModuleListenerProxyTest extends TestCase { /* Creates a servlet context with a spring application context that has the * listener object as a bean named beanName. */ public ServletContext createServletContext(final Object listener) { // Mocks the Web Application Context WebApplicationContext wac = createMock(WebApplicationContext.class); expect(wac.getBean("listenerDelegate")).andReturn(listener); expectLastCall().anyTimes(); replay(wac); // Mocks the servlet context. ServletContext servletContext = createNiceMock(ServletContext.class); expect(servletContext.getAttribute( WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE) ).andReturn(wac); expectLastCall().anyTimes(); // Under some conditions, the init method asks context to log the call. servletContext.log(isA(String.class)); expectLastCall().anyTimes(); replay(servletContext); return servletContext; } /* This method tests if the ModuleListenerProxy correctly forwards the events * to the target listeners. It is implemented in one method for convenience. */ public void testDispatching() { // Context listener related mocks. // ServletContextListener ServletContextEvent contextEvent = createMock(ServletContextEvent.class); replay(contextEvent); ServletContextListener context = createMock(ServletContextListener.class); context.contextInitialized(contextEvent); context.contextDestroyed(contextEvent); replay(context); // ServletContextAttributeListener ServletContextAttributeEvent contextAttributeEvent; contextAttributeEvent = createMock(ServletContextAttributeEvent.class); replay(contextAttributeEvent); ServletContextAttributeListener contextAttribute; contextAttribute = createMock(ServletContextAttributeListener.class); contextAttribute.attributeAdded(contextAttributeEvent); contextAttribute.attributeRemoved(contextAttributeEvent); contextAttribute.attributeReplaced(contextAttributeEvent); replay(contextAttribute); // HttpSessionActivationListener HttpSessionEvent sessionEvent = createMock(HttpSessionEvent.class); replay(sessionEvent); HttpSessionActivationListener sessionActivation; sessionActivation = createMock(HttpSessionActivationListener.class); sessionActivation.sessionDidActivate(sessionEvent); sessionActivation.sessionWillPassivate(sessionEvent); replay(sessionActivation); // HttpSessionAttributeListener HttpSessionBindingEvent sessionBindingEvent; sessionBindingEvent = createMock(HttpSessionBindingEvent.class); replay(sessionBindingEvent); HttpSessionAttributeListener sessionAttribute; sessionAttribute = createMock(HttpSessionAttributeListener.class); sessionAttribute.attributeAdded(sessionBindingEvent); sessionAttribute.attributeRemoved(sessionBindingEvent); sessionAttribute.attributeReplaced(sessionBindingEvent); replay(sessionAttribute); // HttpSessionListener HttpSessionListener session = createMock(HttpSessionListener.class); session.sessionCreated(sessionEvent); session.sessionDestroyed(sessionEvent); replay(session); // HttpSessionBindingListener HttpSessionBindingListener sessionBinding; sessionBinding = createMock(HttpSessionBindingListener.class); sessionBinding.valueBound(sessionBindingEvent); sessionBinding.valueUnbound(sessionBindingEvent); replay(sessionBinding); ServletRequestEvent requestEvent = createMock(ServletRequestEvent.class); replay(requestEvent); ServletRequestListener requestListener; requestListener = createMock(ServletRequestListener.class); requestListener.requestDestroyed(requestEvent); requestListener.requestInitialized(requestEvent); replay(requestListener); List<EventListener> initial = new LinkedList<EventListener>(); initial.add(context); ModuleListenerProxy proxy = new ModuleListenerProxy(initial); List<EventListener> additional = new LinkedList<EventListener>(); additional.add(contextAttribute); additional.add(sessionActivation); additional.add(sessionAttribute); additional.add(session); additional.add(sessionBinding); additional.add(requestListener); proxy.addListeners(additional); proxy.contextInitialized(contextEvent); proxy.contextDestroyed(contextEvent); proxy.attributeAdded(contextAttributeEvent); proxy.attributeRemoved(contextAttributeEvent); proxy.attributeReplaced(contextAttributeEvent); proxy.sessionDidActivate(sessionEvent); proxy.sessionWillPassivate(sessionEvent); proxy.attributeAdded(sessionBindingEvent); proxy.attributeRemoved(sessionBindingEvent); proxy.attributeReplaced(sessionBindingEvent); proxy.sessionCreated(sessionEvent); proxy.sessionDestroyed(sessionEvent); proxy.valueBound(sessionBindingEvent); proxy.valueUnbound(sessionBindingEvent); proxy.requestInitialized(requestEvent); proxy.requestDestroyed(requestEvent); verify(context); verify(contextAttribute); verify(sessionActivation); verify(sessionAttribute); verify(session); verify(sessionBinding); verify(requestListener); } }