blob: a7b8322de9e9f697c098c4c321ac3cb2dd0d3a5b [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 groovy.servlet
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TemporaryFolder
import javax.servlet.ServletConfig
import javax.servlet.ServletContext
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
class TemplateServletTest {
TemplateServlet servlet
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder()
@Before
void setUp() {
servlet = new TemplateServlet()
}
@Test
void test_service_for_existing_resource() {
def templateFile = temporaryFolder.newFile('template.gsp')
def url = templateFile.toURI().toURL()
def servletConfig = mockServletConfigForUrlResource(url)
HttpServletRequest request = mockRequest()
def (HttpServletResponse response, responseData) = mockResponse()
servlet.init(servletConfig)
servlet.service(request, response)
assert responseData.error == null
assert responseData.writer.toString() != ''
assert responseData.status == HttpServletResponse.SC_OK
}
@Test
void test_service_for_missing_resource() {
def url = null
def servletConfig = mockServletConfigForUrlResource(url)
HttpServletRequest request = mockRequest()
def (HttpServletResponse response, responseData) = mockResponse()
servlet.init(servletConfig)
servlet.service(request, response)
assert responseData.error == HttpServletResponse.SC_NOT_FOUND
assert responseData.writer.toString() == ''
assert responseData.status == null
}
private mockRequest() {
return [
getAttribute : { null },
getPathInfo : { 'pathInfo' },
getScriptUri : 'scriptUri',
getServletPath : { 'servletPath' },
getSession : { null },
getParameterNames: { new Vector().elements() },
getHeaderNames : { new Vector().elements() },
] as HttpServletRequest
}
private mockResponse() {
def data = [
writer: new StringWriter(),
status: null,
error : null,
]
def mock = [
getWriter : { new PrintWriter(data.writer) },
sendError : { error -> data.error = error },
setContentType: { contentType -> },
setStatus : { status -> data.status = status },
flushBuffer : { -> },
] as HttpServletResponse
return [mock, data]
}
private mockServletConfigForUrlResource(URL mockedResourceUrl) {
def servletContext = [
getRealPath: { arg -> null },
getResource: { arg -> mockedResourceUrl },
log : { msg -> },
] as ServletContext
[
getServletName : { 'name' },
getServletContext: { servletContext },
getInitParameter : { null },
] as ServletConfig
}
}