Skip to content

Instantly share code, notes, and snippets.

@ataylor284
Created February 27, 2015 22:39
Show Gist options
  • Save ataylor284/7498dec6c3bb0c571ec4 to your computer and use it in GitHub Desktop.
Save ataylor284/7498dec6c3bb0c571ec4 to your computer and use it in GitHub Desktop.
A quick and dirty trait for testing legacy Java servlets.
import javax.servlet.ServletOutputStream
import javax.servlet.http.*
trait ServletTestCase {
def parameters = [:]
def requestAttributes = [:]
def sessionAttributes = [:]
def responseContentType
def responseHeaders = [:]
def responseOutput = []
private HttpServletRequest request
private HttpServletResponse response
private HttpSession session
HttpServletRequest getRequest() {
if (request == null) {
request = [
getParameter: { String name -> parameters[name] },
getParameterNames: { -> Collections.enumeration(parameters.keySet()) },
getSession: { -> owner.getSession() },
getAttribute: { String name -> requestAttributes[name] },
setAttribute: { String name, Object value -> requestAttributes[name] = value },
removeAttribute: { String name -> requestAttributes.remove(name) },
getRequestDispatcher: { String path -> "getRequestDispatcher $path"; null },
toString: { -> "mock request: $parameters" }
] as HttpServletRequest
}
request
}
HttpServletResponse getResponse() {
if (response == null) {
response = [
toString: { -> "mock response" },
setContentType: { String contentType -> responseContentType = contentType },
setHeader: { String name, String value -> responseHeaders[name] = value },
getOutputStream: { -> [write: { byte[] bytes -> responseOutput << bytes }] as ServletOutputStream }
] as HttpServletResponse
}
response
}
HttpSession getSession() {
if (session == null) {
session = [
getAttribute: { String name -> sessionAttributes[name] },
setAttribute: { String name, Object value -> sessionAttributes[name] = value },
toString: { -> "mock session: $sessionAttributes" }
] as HttpSession
}
session
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment