blob: b876c8de6e01dea24b66803fe4de794a08f9847f [file] [log] [blame]
// Copyright 2004 The Apache Software Foundation
//
// 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.apache.tapestry.junit;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.Principal;
import java.util.Enumeration;
import java.util.Locale;
import java.util.Map;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletInputStream;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.tapestry.ApplicationServlet;
import org.apache.tapestry.Tapestry;
import org.apache.tapestry.engine.EngineServiceLink;
import org.apache.tapestry.request.RequestContext;
import org.apache.tapestry.junit.mock.MockContext;
import org.apache.tapestry.junit.mock.MockServletConfig;
public class TestEngineServiceLink extends TapestryTestCase
{
private class TestRequest implements HttpServletRequest
{
public String getAuthType()
{
return null;
}
public String getContextPath()
{
return null;
}
public Cookie[] getCookies()
{
return null;
}
public long getDateHeader(String arg0)
{
return 0;
}
public String getHeader(String arg0)
{
return null;
}
public Enumeration getHeaderNames()
{
return null;
}
public Enumeration getHeaders(String arg0)
{
return null;
}
public int getIntHeader(String arg0)
{
return 0;
}
public String getMethod()
{
return null;
}
public String getPathInfo()
{
return null;
}
public String getPathTranslated()
{
return null;
}
public String getQueryString()
{
return null;
}
public String getRemoteUser()
{
return null;
}
public String getRequestedSessionId()
{
return null;
}
public String getRequestURI()
{
return null;
}
public StringBuffer getRequestURL()
{
return null;
}
public String getServletPath()
{
return null;
}
public HttpSession getSession()
{
return null;
}
public HttpSession getSession(boolean arg0)
{
return null;
}
public Principal getUserPrincipal()
{
return null;
}
public boolean isRequestedSessionIdFromCookie()
{
return false;
}
public boolean isRequestedSessionIdFromUrl()
{
return false;
}
public boolean isRequestedSessionIdFromURL()
{
return false;
}
public boolean isRequestedSessionIdValid()
{
return false;
}
public boolean isUserInRole(String arg0)
{
return false;
}
public Object getAttribute(String arg0)
{
return null;
}
public Enumeration getAttributeNames()
{
return null;
}
public String getCharacterEncoding()
{
return null;
}
public int getContentLength()
{
return 0;
}
public String getContentType()
{
return null;
}
public ServletInputStream getInputStream() throws IOException
{
return null;
}
public Locale getLocale()
{
return null;
}
public Enumeration getLocales()
{
return null;
}
public String getParameter(String arg0)
{
return null;
}
public Map getParameterMap()
{
return null;
}
public Enumeration getParameterNames()
{
return null;
}
public String[] getParameterValues(String arg0)
{
return null;
}
public String getProtocol()
{
return null;
}
public BufferedReader getReader() throws IOException
{
return null;
}
public String getRealPath(String arg0)
{
return null;
}
public String getRemoteAddr()
{
return null;
}
public String getRemoteHost()
{
return null;
}
public RequestDispatcher getRequestDispatcher(String arg0)
{
return null;
}
public String getScheme()
{
return "http";
}
public String getServerName()
{
return "testserver";
}
public int getServerPort()
{
return 80;
}
public boolean isSecure()
{
return false;
}
public void removeAttribute(String arg0)
{
}
public void setAttribute(String arg0, Object arg1)
{
}
public void setCharacterEncoding(String arg0) throws UnsupportedEncodingException
{
}
public int getRemotePort()
{
return 0;
}
public String getLocalName()
{
return null;
}
public String getLocalAddr()
{
return null;
}
public int getLocalPort()
{
return 0;
}
}
private MockRequestCycle create(String servletPath) throws Exception
{
MockContext servletContext = new MockContext();
MockServletConfig config = new MockServletConfig("servlet", servletContext);
ApplicationServlet servlet = new ApplicationServlet();
servlet.init(config);
MockEngine engine = new MockEngine();
engine.setServletPath(servletPath);
HttpServletRequest request = new TestRequest();
RequestContext context = new RequestContext(servlet, request, null);
return new MockRequestCycle(engine, context);
}
public void testGetURL() throws Exception
{
MockRequestCycle c = create("/context/servlet");
EngineServiceLink l = new EngineServiceLink(c, "myservice", null, null, true);
assertEquals("/context/servlet?service=myservice", l.getURL());
assertEquals("/context/servlet?service=myservice", c.getLastEncodedURL());
assertEquals("/context/servlet", l.getURL(null, false));
assertEquals("/context/servlet#anchor", l.getURL("anchor", false));
assertEquals("/context/servlet?service=myservice#anchor", l.getURL("anchor", true));
checkList(
"parameterNames",
new String[] { Tapestry.SERVICE_QUERY_PARAMETER_NAME },
l.getParameterNames());
}
public void testGetAbsoluteURL() throws Exception
{
MockRequestCycle c = create("/context/servlet");
EngineServiceLink l = new EngineServiceLink(c, "myservice", null, null, true);
assertEquals("http://testserver/context/servlet?service=myservice", l.getAbsoluteURL());
assertEquals("http://testserver/context/servlet?service=myservice", c.getLastEncodedURL());
assertEquals(
"http://testserver/context/servlet#anchor",
l.getAbsoluteURL(null, null, 0, "anchor", false));
assertEquals(
"http://testserver/context/servlet?service=myservice#anchor",
l.getAbsoluteURL(null, null, 0, "anchor", true));
assertEquals(
"frob://magic:77/context/servlet?service=myservice",
l.getAbsoluteURL("frob", "magic", 77, null, true));
}
public void testContext() throws Exception
{
MockRequestCycle c = create("/alpha/bravo");
EngineServiceLink l =
new EngineServiceLink(
c,
"myservice",
new String[] { "Alpha", "Bravo", "Tango" },
null,
true);
checkList(
"parameterNames",
new String[] { Tapestry.SERVICE_QUERY_PARAMETER_NAME },
l.getParameterNames());
checkList(
"service parameters values",
new String[] { "myservice/Alpha/Bravo/Tango" },
l.getParameterValues(Tapestry.SERVICE_QUERY_PARAMETER_NAME));
assertEquals("/alpha/bravo?service=myservice/Alpha/Bravo/Tango", l.getURL());
}
public void testServiceParameters() throws Exception
{
MockRequestCycle c = create("/alpha/bravo");
EngineServiceLink l =
new EngineServiceLink(
c,
"myservice",
null,
new String[] { "One Two", "Three Four" },
true);
assertEquals("/alpha/bravo?service=myservice&sp=One+Two&sp=Three+Four", l.getURL());
checkList(
"parameterNames",
new String[] {
Tapestry.SERVICE_QUERY_PARAMETER_NAME,
Tapestry.PARAMETERS_QUERY_PARAMETER_NAME },
l.getParameterNames());
checkList(
"service parameters values",
new String[] { "One Two", "Three Four" },
l.getParameterValues(Tapestry.PARAMETERS_QUERY_PARAMETER_NAME));
}
public void testUnknownParameter() throws Exception
{
MockRequestCycle c = create("/context/servlet");
EngineServiceLink l = new EngineServiceLink(c, "myservice", null, null, true);
try
{
l.getParameterValues("unknown");
unreachable();
}
catch (IllegalArgumentException ex)
{
}
}
}