blob: cf69e3f02ae96ea0c8a1ef2ac5288e3a2cc7f005 [file] [log] [blame]
/*
* Copyright (C) 2008 Google Inc.
*
* 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 com.google.inject.servlet;
import static org.easymock.EasyMock.anyObject;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Sets;
import com.google.inject.Binding;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.spi.BindingScopingVisitor;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import junit.framework.TestCase;
/**
* Basic unit test for lifecycle of a ServletDefinition (wrapper).
*
* @author Dhanji R. Prasanna (dhanji@gmail com)
*/
public class ServletDefinitionTest extends TestCase {
public final void testServletInitAndConfig() throws ServletException {
Injector injector = createMock(Injector.class);
Binding binding = createMock(Binding.class);
expect(binding.acceptScopingVisitor((BindingScopingVisitor) anyObject())).andReturn(true);
expect(injector.getBinding(Key.get(HttpServlet.class))).andReturn(binding);
final HttpServlet mockServlet = new HttpServlet() {};
expect(injector.getInstance(Key.get(HttpServlet.class))).andReturn(mockServlet).anyTimes();
replay(injector, binding);
//some init params
//noinspection SSBasedInspection
final Map<String, String> initParams =
new ImmutableMap.Builder<String, String>()
.put("ahsd", "asdas24dok")
.put("ahssd", "asdasd124ok")
.build();
String pattern = "/*";
final ServletDefinition servletDefinition =
new ServletDefinition(
Key.get(HttpServlet.class),
UriPatternType.get(UriPatternType.SERVLET, pattern),
initParams,
null);
ServletContext servletContext = createMock(ServletContext.class);
final String contextName = "thing__!@@44__SRV" + getClass();
expect(servletContext.getServletContextName()).andReturn(contextName);
replay(servletContext);
servletDefinition.init(servletContext, injector, Sets.<HttpServlet>newIdentityHashSet());
assertNotNull(mockServlet.getServletContext());
assertEquals(contextName, mockServlet.getServletContext().getServletContextName());
assertEquals(Key.get(HttpServlet.class).toString(), mockServlet.getServletName());
final ServletConfig servletConfig = mockServlet.getServletConfig();
final Enumeration names = servletConfig.getInitParameterNames();
while (names.hasMoreElements()) {
String name = (String) names.nextElement();
assertTrue(initParams.containsKey(name));
assertEquals(initParams.get(name), servletConfig.getInitParameter(name));
}
verify(injector, binding, servletContext);
}
public void testServiceWithContextPath() throws IOException, ServletException {
String pattern = "/*";
//some init params
Map<String, String> initParams =
new ImmutableMap.Builder<String, String>()
.put("ahsd", "asdas24dok")
.put("ahssd", "asdasd124ok")
.build();
final ServletDefinition servletDefinition =
new ServletDefinition(
Key.get(HttpServlet.class),
UriPatternType.get(UriPatternType.SERVLET, pattern),
initParams,
null);
HttpServletResponse servletResponse = createMock(HttpServletResponse.class);
HttpServletRequest servletRequest = createMock(HttpServletRequest.class);
expect(servletRequest.getContextPath()).andReturn("/a_context_path");
expect(servletRequest.getRequestURI()).andReturn("/test.html");
replay(servletRequest, servletResponse);
servletDefinition.service(servletRequest, servletResponse);
verify(servletRequest, servletResponse);
}
}