All Downloads are FREE. Search and download functionalities are using the official Maven repository.

skinny.test.MockHttpServletResponse.scala Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2002-2013 the original author or authors.
 *
 * 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 skinny.test

import javax.servlet.http.{ Cookie, HttpServletResponse }
import javax.servlet.ServletOutputStream
import java.io.{ ByteArrayOutputStream, PrintWriter }
import java.util._

class MockHttpServletResponse extends HttpServletResponse {

  var CHARSET_PREFIX = "charset="
  var CONTENT_TYPE_HEADER = "Content-Type"
  var CONTENT_LENGTH_HEADER = "Content-Length"
  var LOCATION_HEADER = "Location"

  //---------------------------------------------------------------------
  // ServletResponse properties
  //---------------------------------------------------------------------

  var outputStreamAccessAllowed = true
  var writerAccessAllowed = true
  var characterEncoding = "ISO-8859-1"
  var charset = false
  var content = new ByteArrayOutputStream()
  var writer: PrintWriter = _
  var contentLength: Long = 0
  var contentType: String = _
  var bufferSize = 4096
  var committed: Boolean = false
  var locale: Locale = Locale.getDefault()

  //---------------------------------------------------------------------
  // HttpServletResponse properties
  //---------------------------------------------------------------------

  var cookies = new ArrayList[Cookie]()
  var headers = new LinkedHashMap[String, HeaderValueHolder]
  var status = 200
  var errorMessage: String = _
  var forwardedUrl: String = _
  var includedUrls = new ArrayList[String]

  override def getLocale: Locale = locale

  override def setLocale(loc: Locale): Unit = {
    this.locale = locale
  }

  override def reset(): Unit = {
    resetBuffer()
    characterEncoding = null
    contentLength = 0
    contentType = null
    locale = null
    cookies.clear()
    headers.clear()
    status = HttpServletResponse.SC_OK
    errorMessage = null
  }

  override def isCommitted: Boolean = committed
  override def resetBuffer(): Unit = content.reset()
  override def flushBuffer(): Unit = committed = true
  override def getBufferSize: Int = bufferSize

  override def setBufferSize(size: Int): Unit = {
    this.bufferSize = bufferSize
  }
  override def setContentType(contentType: String): Unit = {
    this.contentType = contentType
  }
  override def setContentLength(len: Int): Unit = {
    this.contentLength = len
  }
  override def setCharacterEncoding(charset: String): Unit = {
    this.characterEncoding = charset
  }

  override def getWriter: PrintWriter = writer

  val stubOutputStream = new MockServletOutputStream
  override def getOutputStream: ServletOutputStream = stubOutputStream

  override def getContentType: String = contentType
  override def getCharacterEncoding: String = characterEncoding

  override def getStatus: Int = status
  override def setStatus(sc: Int, sm: String): Unit = {
    // TODO: sm is ignored for now
    this.status = sc
  }
  override def setStatus(sc: Int): Unit = {
    this.status = sc
  }

  private def _addHeader(name: String, value: Any): Unit = {
    Option(headers.get(name)).map(_.getValues()).map(_.add(value)).getOrElse(_setHeader(name, value))
  }
  private def _setHeader(name: String, value: Any): Unit = {
    headers.put(name, HeaderValueHolder(value))
  }

  override def getHeaderNames: Collection[String] = headers.keySet
  override def getHeaders(name: String): Collection[String] = {
    Option(headers.get(name)).map(_.getStringValues).getOrElse(new java.util.ArrayList[String])
  }
  override def getHeader(name: String): String = {
    Option(headers.get(name)).map(_.getStringValue).orNull[String]
  }

  override def addHeader(name: String, value: String): Unit = _addHeader(name, value)
  override def setHeader(name: String, value: String): Unit = _setHeader(name, value)
  override def addIntHeader(name: String, value: Int): Unit = _addHeader(name, value)
  override def setIntHeader(name: String, value: Int): Unit = _setHeader(name, value)
  override def addDateHeader(name: String, date: Long): Unit = _addHeader(name, date)
  override def setDateHeader(name: String, date: Long): Unit = _setHeader(name, date)
  override def containsHeader(name: String): Boolean = headers.keySet.contains(name)

  override def sendRedirect(location: String): Unit = {
    setHeader(LOCATION_HEADER, location)
    setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY)
    committed = true
  }

  override def sendError(sc: Int): Unit = {
    status = sc
    committed = true
  }

  override def sendError(sc: Int, msg: String): Unit = {
    status = sc
    errorMessage = msg
    committed = true
  }

  override def encodeRedirectUrl(url: String): String = encodeRedirectURL(url)
  override def encodeUrl(url: String): String = encodeURL(url)
  override def encodeRedirectURL(url: String): String = encodeURL(url)
  override def encodeURL(url: String): String = url

  override def addCookie(cookie: Cookie): Unit = cookies.add(cookie)

  override def setContentLengthLong(len: Long): Unit = {
    this.contentLength = len
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy