org.apache.click.servlet
Class MockServletContext

java.lang.Object
  extended by org.apache.click.servlet.MockServletContext
All Implemented Interfaces:
ServletContext

public class MockServletContext
extends Object
implements ServletContext

Mock implementation of ServletContext.

This implementation supports all of the standard context methods except for request dispatching which just indicates what is being dispatched to, rather than performing an actual dispatch.

The context can be configured with a path parameter that should point to an directory location that represents the place where the contents of the WAR bundle are located. The path can either be an absolute or relative path. If the path is not found, the classpath will be checked for such a directory. Setting this value allows all of the resource location functionality to work as in a fully functioning web application. If this value is not set then not resource location functionality will work and instead null will always be returned.

This class was adapted from Apache Wicket.


Field Summary
static String DEFAULT_CONTEXT_PATH
          The servlet context default context path, "/mock".
 
Constructor Summary
MockServletContext()
          Default constructor for this mock object.
MockServletContext(String contextPath, String webappPath)
          Create the mock object.
MockServletContext(String contextPath, String webappPath, String tempPath)
          Create the mock object.
 
Method Summary
 void addInitParameter(String name, String value)
          Add an init parameter.
 void addInitParameters(Map<String,String> initParameters)
          Add the map of init parameters.
 void addMimeType(String fileExtension, String mimeType)
          Add a new recognized mime type.
 void createTempDir()
          Creates a temporary directory as specified by getTempPath().
 void createWebappRoot()
          Creates the web application root File getWebappRoot().
 Object getAttribute(String name)
          Get an attribute with the given name.
 Enumeration<String> getAttributeNames()
          Get all of the attribute names.
 ServletContext getContext(String name)
          Get the context for the given URL path.
 String getContextPath()
          Return the servlet context path.
 String getInitParameter(String name)
          Get the init parameter with the given name.
 Enumeration<String> getInitParameterNames()
          Get the name of all of the init parameters.
 int getMajorVersion()
          Return the major version of the Servlet spec that this package supports, defaults to 2.
 String getMimeType(String name)
          Get the mime type for the given file.
 int getMinorVersion()
          Return the minor version of the Servlet spec that this package supports, defaults to 3.
 RequestDispatcher getNamedDispatcher(String name)
          Returns a RequestDispatcher for the specified name.
 String getRealPath(String name)
          Get the real file path of the given resource name.
 RequestDispatcher getRequestDispatcher(String path)
          Returns a RequestDispatcher for the specified path.
 URL getResource(String name)
          Get the URL for a particular resource that is relative to the web app root directory.
 InputStream getResourceAsStream(String name)
          Get an input stream for a particular resource that is relative to the web app root directory or the current classpath.
 Set<String> getResourcePaths(String name)
          Get the resource paths starting from the web app root directory and then relative to the given name.
 String getServerInfo()
          Get the server info.
 Servlet getServlet(String name)
          NOT USED - Servlet Spec requires that this always returns null.
 String getServletContextName()
          Return the name of the servlet context.
 Enumeration<String> getServletNames()
          NOT USED - Servlet spec requires that this always returns null.
 Enumeration<?> getServlets()
          NOT USED - Servlet spec requires that this always returns null.
 String getTempPath()
          Return the temporary path where files are stored during test runs.
 String getWebappPath()
          Return the web application path where resources like javascript, css and images can be picked up.
 File getWebappRoot()
          Return the web application root File where resources like javascript, css and images can be picked up.
 void log(Exception e, String msg)
          Log the exception to System.err and the message to System.out.
 void log(String msg)
          Log the message to System.out.
 void log(String msg, Throwable cause)
          Log the cause to System.err and the message to System.out.
 void removeAttribute(String name)
          Remove an attribute with the given name.
 void setAttribute(String name, Object o)
          Set an attribute.
 void setContextPath(String contextPath)
          Sets the servlet context path.
 void setServletContextName(String servletContextName)
          Set the servlet context name to the specified value.
 void setTempPath(String tempPath)
          Set the temporary path where files are stored during test runs.
 void setWebappPath(String webappPath)
          Sets the mock web application path to the specified webappPath.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_CONTEXT_PATH

public static final String DEFAULT_CONTEXT_PATH
The servlet context default context path, "/mock".

See Also:
Constant Field Values
Constructor Detail

MockServletContext

public MockServletContext()
Default constructor for this mock object.

The servlet context name is set to 'mock'. The web content root and temporary work direcotry are set to null.


MockServletContext

public MockServletContext(String contextPath,
                          String webappPath)
Create the mock object. As part of the creation, the context sets the root directory where web application content is stored. This must be an ABSOLUTE directory relative to where the tests are being executed.

For example: System.getProperty("user.dir") + "/src/webapp"

In addition to setting the web root directory, this constructor also sets up a temporary work directory for things like file uploads.

Note this temporary work directory is set as the value of the ServletContext attribute 'javax.servlet.context.tempdir'.

The temporary work directory defaults to System.getProperty("java.io.tmpdir").

Parameters:
contextPath - the servlet context path
webappPath - The path to the root of the web application

MockServletContext

public MockServletContext(String contextPath,
                          String webappPath,
                          String tempPath)
Create the mock object. As part of the creation, the context sets the root directory where web application content is stored. This must be an ABSOLUTE directory relative to where the tests are being executed.

For example: System.getProperty("user.dir") + "/src/webapp"

In addition to setting the web root directory, this constructor also sets up a temporary work directory for things like file uploads.

Note this temporary work directory is set as the value of the ServletContext attribute 'javax.servlet.context.tempdir'.

Parameters:
contextPath - the servlet context path
webappPath - the path to the root of the web application
tempPath - the temporary work directory
Method Detail

createWebappRoot

public void createWebappRoot()
Creates the web application root File getWebappRoot().

Throws:
IllegalStateException - if the getWebappPath() cannot be found

createTempDir

public void createTempDir()
Creates a temporary directory as specified by getTempPath().

Throws:
IllegalStateException - if the getTempPath() is not valid

setServletContextName

public void setServletContextName(String servletContextName)
Set the servlet context name to the specified value.

Parameters:
servletContextName - the servlet context name

getTempPath

public String getTempPath()
Return the temporary path where files are stored during test runs.

Returns:
the temporary path where files are stored during test runs

setTempPath

public void setTempPath(String tempPath)
Set the temporary path where files are stored during test runs.

Parameters:
tempPath - the temporary path where files are stored during test runs

getWebappPath

public String getWebappPath()
Return the web application path where resources like javascript, css and images can be picked up.

Returns:
the web application path

getWebappRoot

public File getWebappRoot()
Return the web application root File where resources like javascript, css and images can be picked up.

Returns:
the web application root File

setWebappPath

public void setWebappPath(String webappPath)
Sets the mock web application path to the specified webappPath.

Note: this method will also set the web application's temporary directory to the value getTempPath(). If getTempPath() is not set, this method will default tempPath to: System.getProperty("java.io.tmpdir").

Parameters:
webappPath - set the context web application path

addInitParameter

public void addInitParameter(String name,
                             String value)
Add an init parameter.

Parameters:
name - The parameter name
value - The parameter value

addInitParameters

public void addInitParameters(Map<String,String> initParameters)
Add the map of init parameters.

Parameters:
initParameters - A map of init parameters

addMimeType

public void addMimeType(String fileExtension,
                        String mimeType)
Add a new recognized mime type.

Parameters:
fileExtension - The file extension (e.g. "jpg")
mimeType - The mime type (e.g. "image/jpeg")

getAttribute

public Object getAttribute(String name)
Get an attribute with the given name.

Specified by:
getAttribute in interface ServletContext
Parameters:
name - The attribute name
Returns:
The value, or null

getAttributeNames

public Enumeration<String> getAttributeNames()
Get all of the attribute names.

Specified by:
getAttributeNames in interface ServletContext
Returns:
The attribute names

getContext

public ServletContext getContext(String name)
Get the context for the given URL path.

Specified by:
getContext in interface ServletContext
Parameters:
name - The url path
Returns:
Always returns this

getContextPath

public String getContextPath()
Return the servlet context path.

Returns:
the servletContext path

setContextPath

public void setContextPath(String contextPath)
Sets the servlet context path.

Parameters:
contextPath - the servlet context path

getInitParameter

public String getInitParameter(String name)
Get the init parameter with the given name.

Specified by:
getInitParameter in interface ServletContext
Parameters:
name - The name
Returns:
The parameter, or null if no such parameter

getInitParameterNames

public Enumeration<String> getInitParameterNames()
Get the name of all of the init parameters.

Specified by:
getInitParameterNames in interface ServletContext
Returns:
The init parameter names

getMajorVersion

public int getMajorVersion()
Return the major version of the Servlet spec that this package supports, defaults to 2.

Specified by:
getMajorVersion in interface ServletContext
Returns:
the major version of the Servlet spec that this package supports, defaults to 2.

getMimeType

public String getMimeType(String name)
Get the mime type for the given file. Uses a hardcoded map of mime types set at initialization time. If the mime type was not explicitly set, this method will fallback to ClickUtils.getMimeType(String).

Specified by:
getMimeType in interface ServletContext
Parameters:
name - The name to get the mime type for
Returns:
The mime type

getMinorVersion

public int getMinorVersion()
Return the minor version of the Servlet spec that this package supports, defaults to 3.

Specified by:
getMinorVersion in interface ServletContext
Returns:
the minor version of the Servlet spec that this package supports, defaults to 3.

getRealPath

public String getRealPath(String name)
Get the real file path of the given resource name.

Specified by:
getRealPath in interface ServletContext
Parameters:
name - The name
Returns:
The real path or null

getRequestDispatcher

public RequestDispatcher getRequestDispatcher(String path)
Returns a RequestDispatcher for the specified path. The dispatcher will not dispatch to the resource. It only records the specified path so that one can test if the correct path was dispatched to.

Specified by:
getRequestDispatcher in interface ServletContext
Parameters:
path - a String specifying the pathname to the resource
Returns:
a dispatcher for the specified path

getNamedDispatcher

public RequestDispatcher getNamedDispatcher(String name)
Returns a RequestDispatcher for the specified name. The dispatcher will not dispatch to the resource. It only records the specified name so that one can test if the correct name was dispatched to.

Specified by:
getNamedDispatcher in interface ServletContext
Parameters:
name - a String specifying the name of a servlet to wrap
Returns:
a dispatcher for the specified name

getResource

public URL getResource(String name)
                throws MalformedURLException
Get the URL for a particular resource that is relative to the web app root directory.

Specified by:
getResource in interface ServletContext
Parameters:
name - The name of the resource to get
Returns:
The resource, or null if resource not found
Throws:
MalformedURLException - If the URL is invalid

getResourceAsStream

public InputStream getResourceAsStream(String name)
Get an input stream for a particular resource that is relative to the web app root directory or the current classpath. If the webappRoot is not set, this method will try and load the resource from the classpath.

Specified by:
getResourceAsStream in interface ServletContext
Parameters:
name - The name of the resource to get
Returns:
The input stream for the resource, or null if resource is not found

getResourcePaths

public Set<String> getResourcePaths(String name)
Get the resource paths starting from the web app root directory and then relative to the given name.

Specified by:
getResourcePaths in interface ServletContext
Parameters:
name - The starting name
Returns:
The set of resource paths at this location
Throws:
IllegalArgumentException - if the specified name does not start with a "/" character

getServerInfo

public String getServerInfo()
Get the server info.

Specified by:
getServerInfo in interface ServletContext
Returns:
The server info

getServlet

public Servlet getServlet(String name)
                   throws ServletException
NOT USED - Servlet Spec requires that this always returns null.

Specified by:
getServlet in interface ServletContext
Parameters:
name - Not used
Returns:
null
Throws:
ServletException - Not used

getServletContextName

public String getServletContextName()
Return the name of the servlet context.

Specified by:
getServletContextName in interface ServletContext
Returns:
The name

getServletNames

public Enumeration<String> getServletNames()
NOT USED - Servlet spec requires that this always returns null.

Specified by:
getServletNames in interface ServletContext
Returns:
null

getServlets

public Enumeration<?> getServlets()
NOT USED - Servlet spec requires that this always returns null.

Specified by:
getServlets in interface ServletContext
Returns:
null

log

public void log(Exception e,
                String msg)
Log the exception to System.err and the message to System.out.

Specified by:
log in interface ServletContext
Parameters:
e - The exception to log
msg - The message to log

log

public void log(String msg)
Log the message to System.out.

Specified by:
log in interface ServletContext
Parameters:
msg - The message to log

log

public void log(String msg,
                Throwable cause)
Log the cause to System.err and the message to System.out.

Specified by:
log in interface ServletContext
Parameters:
msg - The message to log
cause - The cause exception

removeAttribute

public void removeAttribute(String name)
Remove an attribute with the given name.

Specified by:
removeAttribute in interface ServletContext
Parameters:
name - The name

setAttribute

public void setAttribute(String name,
                         Object o)
Set an attribute.

Specified by:
setAttribute in interface ServletContext
Parameters:
name - The name of the attribute
o - The value