|
|||||||||||||||||||
30 day Evaluation Version distributed via the Maven Jar Repository. Clover is not free. You have 30 days to evaluate it. Please visit http://www.thecortex.net/clover to obtain a licensed version of Clover | |||||||||||||||||||
Source file | Conditionals | Statements | Methods | TOTAL | |||||||||||||||
ScriptedTestSession.java | 0% | 8% | 33.3% | 11.1% |
|
1 |
// Copyright 2004, 2005 The Apache Software Foundation
|
|
2 |
//
|
|
3 |
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4 |
// you may not use this file except in compliance with the License.
|
|
5 |
// You may obtain a copy of the License at
|
|
6 |
//
|
|
7 |
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8 |
//
|
|
9 |
// Unless required by applicable law or agreed to in writing, software
|
|
10 |
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11 |
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12 |
// See the License for the specific language governing permissions and
|
|
13 |
// limitations under the License.
|
|
14 |
|
|
15 |
package org.apache.tapestry.test;
|
|
16 |
|
|
17 |
import java.util.HashMap;
|
|
18 |
import java.util.Iterator;
|
|
19 |
import java.util.Map;
|
|
20 |
|
|
21 |
import javax.servlet.http.HttpServlet;
|
|
22 |
|
|
23 |
import org.apache.hivemind.ApplicationRuntimeException;
|
|
24 |
import org.apache.tapestry.test.mock.InitParameterHolder;
|
|
25 |
import org.apache.tapestry.test.mock.MockContext;
|
|
26 |
import org.apache.tapestry.test.mock.MockRequest;
|
|
27 |
import org.apache.tapestry.test.mock.MockResponse;
|
|
28 |
import org.apache.tapestry.test.mock.MockServletConfig;
|
|
29 |
import org.apache.tapestry.util.RegexpMatcher;
|
|
30 |
|
|
31 |
/**
|
|
32 |
* Executes a series of requests and assertions specified by
|
|
33 |
* a {@link org.apache.tapestry.test.ScriptDescriptor).
|
|
34 |
*
|
|
35 |
* @author Howard Lewis Ship
|
|
36 |
* @since 4.0
|
|
37 |
*/
|
|
38 |
public class ScriptedTestSession |
|
39 |
{ |
|
40 |
private ScriptDescriptor _scriptDescriptor;
|
|
41 |
private MockContext _context;
|
|
42 |
private MockRequest _request;
|
|
43 |
private MockResponse _response;
|
|
44 |
private RegexpMatcher _matcher = new RegexpMatcher(); |
|
45 |
|
|
46 | 11 |
public ScriptedTestSession(ScriptDescriptor descriptor)
|
47 |
{ |
|
48 | 11 |
_scriptDescriptor = descriptor; |
49 |
} |
|
50 |
|
|
51 | 0 |
public void execute() |
52 |
{ |
|
53 | 0 |
setupForExecute(); |
54 |
|
|
55 | 0 |
Iterator i = _scriptDescriptor.getRequestDescriptors().iterator(); |
56 |
|
|
57 | 0 |
while (i.hasNext())
|
58 |
{ |
|
59 | 0 |
RequestDescriptor rd = (RequestDescriptor) i.next(); |
60 |
|
|
61 | 0 |
executeRequest(rd); |
62 |
} |
|
63 |
} |
|
64 |
|
|
65 | 0 |
private void setupForExecute() |
66 |
{ |
|
67 | 0 |
_context = new MockContext(_scriptDescriptor.getRootDirectory());
|
68 | 0 |
_context.setServletContextName(_scriptDescriptor.getContextName()); |
69 |
} |
|
70 |
|
|
71 | 0 |
private void executeRequest(RequestDescriptor rd) |
72 |
{ |
|
73 | 0 |
HttpServlet s = getServlet(rd.getServletName()); |
74 |
|
|
75 | 0 |
_request = new MockRequest(_context, rd.getServletPath());
|
76 |
|
|
77 | 0 |
loadParameters(_request, rd); |
78 |
|
|
79 | 0 |
_response = new MockResponse(_request);
|
80 |
|
|
81 | 0 |
try
|
82 |
{ |
|
83 | 0 |
s.service(_request, _response); |
84 |
} |
|
85 |
catch (Exception ex)
|
|
86 |
{ |
|
87 | 0 |
throw new ApplicationRuntimeException( |
88 |
"Error executing request: " + ex.getMessage(),
|
|
89 |
rd.getLocation(), |
|
90 |
ex); |
|
91 |
} |
|
92 |
|
|
93 | 0 |
rd.executeAssertions(this);
|
94 |
} |
|
95 |
|
|
96 | 0 |
private void loadParameters(MockRequest request, RequestDescriptor rd) |
97 |
{ |
|
98 | 0 |
String[] names = rd.getParameterNames(); |
99 |
|
|
100 | 0 |
for (int i = 0; i < names.length; i++) |
101 |
{ |
|
102 | 0 |
String[] values = rd.getParameterValues(names[i]); |
103 |
|
|
104 | 0 |
request.setParameter(names[i], values); |
105 |
} |
|
106 |
} |
|
107 |
|
|
108 |
private Map _servlets = new HashMap(); |
|
109 |
|
|
110 | 0 |
private HttpServlet getServlet(String name)
|
111 |
{ |
|
112 | 0 |
if (name == null) |
113 | 0 |
name = _scriptDescriptor.getDefaultServletDescriptor().getName(); |
114 |
|
|
115 | 0 |
HttpServlet result = (HttpServlet) _servlets.get(name); |
116 |
|
|
117 | 0 |
if (result == null) |
118 |
{ |
|
119 | 0 |
result = readyServlet(name); |
120 | 0 |
_servlets.put(name, result); |
121 |
} |
|
122 |
|
|
123 | 0 |
return result;
|
124 |
} |
|
125 |
|
|
126 | 0 |
private HttpServlet readyServlet(String name)
|
127 |
{ |
|
128 | 0 |
ServletDescriptor sd = _scriptDescriptor.getServletDescriptor(name); |
129 |
|
|
130 | 0 |
HttpServlet result = instantiateServlet(sd); |
131 |
|
|
132 | 0 |
MockServletConfig config = new MockServletConfig(name, _context);
|
133 |
|
|
134 | 0 |
loadInitParameters(config, sd.getInitParameters()); |
135 |
|
|
136 | 0 |
try
|
137 |
{ |
|
138 | 0 |
result.init(config); |
139 |
} |
|
140 |
catch (Exception ex)
|
|
141 |
{ |
|
142 | 0 |
throw new ApplicationRuntimeException( |
143 |
"Unable to initialize servlet '" + name + "': " + ex.getMessage(), |
|
144 |
sd.getLocation(), |
|
145 |
ex); |
|
146 |
} |
|
147 |
|
|
148 | 0 |
return result;
|
149 |
} |
|
150 |
|
|
151 | 0 |
private void loadInitParameters(InitParameterHolder holder, Map parameters) |
152 |
{ |
|
153 | 0 |
Iterator i = parameters.entrySet().iterator(); |
154 | 0 |
while (i.hasNext())
|
155 |
{ |
|
156 | 0 |
Map.Entry e = (Map.Entry) i.next(); |
157 |
|
|
158 | 0 |
String name = (String) e.getKey(); |
159 | 0 |
String value = (String) e.getValue(); |
160 |
|
|
161 | 0 |
holder.setInitParameter(name, value); |
162 |
} |
|
163 |
} |
|
164 |
|
|
165 | 0 |
private HttpServlet instantiateServlet(ServletDescriptor sd)
|
166 |
{ |
|
167 | 0 |
String className = sd.getClassName(); |
168 | 0 |
ClassLoader loader = Thread.currentThread().getContextClassLoader(); |
169 |
|
|
170 | 0 |
try
|
171 |
{ |
|
172 | 0 |
Class servletClass = Class.forName(className, true, loader);
|
173 |
|
|
174 | 0 |
return (HttpServlet) servletClass.newInstance();
|
175 |
} |
|
176 |
catch (Exception ex)
|
|
177 |
{ |
|
178 | 0 |
throw new ApplicationRuntimeException( |
179 |
"Unable to instantiate servlet '" + sd.getName() + "': " + ex.getMessage(), |
|
180 |
sd.getLocation(), |
|
181 |
ex); |
|
182 |
} |
|
183 |
} |
|
184 |
|
|
185 |
/** Inteaded only for use by the test suite. */
|
|
186 |
|
|
187 | 11 |
void setResponse(MockResponse response)
|
188 |
{ |
|
189 | 11 |
_response = response; |
190 |
} |
|
191 |
|
|
192 | 22 |
public MockResponse getResponse()
|
193 |
{ |
|
194 | 22 |
return _response;
|
195 |
} |
|
196 |
|
|
197 | 8 |
public RegexpMatcher getMatcher()
|
198 |
{ |
|
199 | 8 |
return _matcher;
|
200 |
} |
|
201 |
|
|
202 |
} |
|
203 |
|
|