blob: 3d60884364c1740db1bcb1affb505e6130692e82 [file] [log] [blame]
// Copyright 2007, 2008, 2009, 2010, 2011 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.tapestry5.internal.test;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
import org.apache.tapestry5.ioc.internal.util.InternalUtils;
import org.apache.tapestry5.services.Session;
import java.util.*;
public class TestableRequestImpl implements TestableRequest
{
private final String contextPath;
private final Map<String, Object> parameters = CollectionFactory.newMap();
private final Map<String, Object> attributes = CollectionFactory.newMap();
private Session session;
private String path = "/";
private Locale locale = Locale.getDefault();
@Inject
public TestableRequestImpl()
{
this("/foo");
}
public TestableRequestImpl(String contextPath)
{
this.contextPath = contextPath;
}
public TestableRequest clear()
{
parameters.clear();
return this;
}
public TestableRequest setPath(String path)
{
this.path = path;
return this;
}
public TestableRequest setLocale(Locale locale)
{
this.locale = locale;
return this;
}
public TestableRequest loadParameter(String parameterName, String parameterValue)
{
Object existing = parameters.get(parameterName);
if (existing == null)
{
parameters.put(parameterName, parameterValue);
return this;
}
if (existing instanceof List)
{
((List) existing).add(parameterValue);
return this;
}
// Convert from a single String to a List of Strings.
List list = new ArrayList();
list.add(existing);
list.add(parameterValue);
parameters.put(parameterName, list);
return this;
}
public TestableRequest overrideParameter(String parameterName, String parameterValue)
{
parameters.put(parameterName, parameterValue);
return this;
}
public long getDateHeader(String name)
{
return 0;
}
/**
* Returns null.
*/
public String getHeader(String name)
{
return null;
}
/**
* Returns an empty list.
*/
public List<String> getHeaderNames()
{
return Collections.emptyList();
}
public Locale getLocale()
{
return locale;
}
public List<String> getParameterNames()
{
return InternalUtils.sortedKeys(parameters);
}
public String[] getParameters(String name)
{
Object value = parameters.get(name);
if (value == null)
return null;
if (value instanceof String)
return new String[]
{ (String) value };
List list = (List) value;
return (String[]) list.toArray(new String[list.size()]);
}
public String getPath()
{
return path;
}
public String getContextPath()
{
return contextPath;
}
public String getParameter(String name)
{
Object value = parameters.get(name);
if (value == null || value instanceof String)
return (String) value;
List<String> list = (List<String>) value;
return list.get(0);
}
public Session getSession(boolean create)
{
if (!create)
return session;
if (session == null)
session = new PageTesterSession();
return session;
}
public void setEncoding(String requestEncoding)
{
}
/**
* Always returns false. If you need to test Ajax functionality, you need to be using Selenium.
*/
public boolean isXHR()
{
return false;
}
public boolean isSecure()
{
return false;
}
/**
* Always returns true.
*/
public boolean isRequestedSessionIdValid()
{
return true;
}
public Object getAttribute(String name)
{
return attributes.get(name);
}
public void setAttribute(String name, Object value)
{
attributes.put(name, value);
}
/**
* Returns "localhost" which is sufficient for testing purposes.
*/
public String getServerName()
{
return "localhost";
}
/**
* Always returns POST, to keep the Form component happy.
*/
public String getMethod()
{
return "POST";
}
/**
* Always returns 80.
*/
public int getLocalPort()
{
return 80;
}
/**
* Always returns 80.
*
* @since 5.2.5
*/
public int getServerPort()
{
return 80;
}
}