001/**
002 * Copyright (c) 2015-2022, Michael Yang 杨福海 (fuhai999@gmail.com).
003 * <p>
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 * <p>
008 * http://www.apache.org/licenses/LICENSE-2.0
009 * <p>
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package io.jboot.test.web;
017
018import com.jfinal.kit.PathKit;
019import io.jboot.components.http.HttpMimeTypes;
020import io.jboot.test.MockExceptions;
021
022import javax.servlet.*;
023import javax.servlet.descriptor.JspConfigDescriptor;
024import java.io.File;
025import java.io.IOException;
026import java.io.InputStream;
027import java.net.MalformedURLException;
028import java.net.URL;
029import java.util.*;
030
031public class MockServletContext implements ServletContext {
032    public static MockServletContext DEFAULT = new MockServletContext();
033
034    protected Map<String, String> initParameters = new HashMap<>();
035    protected Map<String, Object> attributes = new HashMap<>();
036
037    protected String contextPath = "";
038    protected String servletContextName = "";
039
040    @Override
041    public String getContextPath() {
042        return contextPath;
043    }
044
045    public void setContextPath(String contextPath) {
046        this.contextPath = contextPath;
047    }
048
049    @Override
050    public ServletContext getContext(String uripath) {
051        throw MockExceptions.unsupported;
052    }
053
054    @Override
055    public int getMajorVersion() {
056        return 0;
057    }
058
059    @Override
060    public int getMinorVersion() {
061        return 0;
062    }
063
064    @Override
065    public int getEffectiveMajorVersion() {
066        return 0;
067    }
068
069    @Override
070    public int getEffectiveMinorVersion() {
071        return 0;
072    }
073
074    @Override
075    public String getMimeType(String file) {
076        return HttpMimeTypes.getMimeType(file);
077    }
078
079    @Override
080    public Set<String> getResourcePaths(String path) {
081        try {
082            HashSet<String> hashSet = new HashSet<>();
083            Enumeration<URL> enumeration = getClass().getClassLoader().getResources(path);
084            while (enumeration.hasMoreElements()) {
085                URL url = enumeration.nextElement();
086                hashSet.add(url.toString());
087            }
088            return hashSet;
089        } catch (IOException e) {
090            return null;
091        }
092    }
093
094    @Override
095    public URL getResource(String path) throws MalformedURLException {
096        return getClass().getResource(path);
097    }
098
099    @Override
100    public InputStream getResourceAsStream(String path) {
101        return getClass().getResourceAsStream(path);
102    }
103
104    @Override
105    public RequestDispatcher getRequestDispatcher(String path) {
106        throw MockExceptions.unsupported;
107    }
108
109    @Override
110    public RequestDispatcher getNamedDispatcher(String name) {
111        throw MockExceptions.unsupported;
112    }
113
114    @Override
115    public Servlet getServlet(String name) throws ServletException {
116        throw MockExceptions.unsupported;
117    }
118
119    @Override
120    public Enumeration<Servlet> getServlets() {
121        throw MockExceptions.unsupported;
122    }
123
124    @Override
125    public Enumeration<String> getServletNames() {
126        throw MockExceptions.unsupported;
127    }
128
129    @Override
130    public void log(String msg) {
131        System.out.println(msg);
132    }
133
134    @Override
135    public void log(Exception exception, String msg) {
136        System.out.println(msg);
137        exception.printStackTrace();
138    }
139
140    @Override
141    public void log(String message, Throwable throwable) {
142        System.out.println(message);
143        throwable.printStackTrace();
144    }
145
146
147    @Override
148    public String getRealPath(String path) {
149        return new File(PathKit.getWebRootPath(), path).getAbsolutePath();
150    }
151
152    @Override
153    public String getServerInfo() {
154        return "Jboot Mock Server 1.0";
155    }
156
157    @Override
158    public String getInitParameter(String name) {
159        return initParameters.get(name);
160    }
161
162    @Override
163    public Enumeration<String> getInitParameterNames() {
164        return Collections.enumeration(initParameters.keySet());
165    }
166
167    @Override
168    public boolean setInitParameter(String name, String value) {
169        return null != initParameters.put(name, value);
170    }
171
172    @Override
173    public Object getAttribute(String name) {
174        return attributes.get(name);
175    }
176
177    @Override
178    public Enumeration<String> getAttributeNames() {
179        return Collections.enumeration(attributes.keySet());
180    }
181
182    @Override
183    public void setAttribute(String name, Object object) {
184        attributes.put(name, object);
185    }
186
187    @Override
188    public void removeAttribute(String name) {
189        attributes.remove(name);
190    }
191
192    @Override
193    public String getServletContextName() {
194        return servletContextName;
195    }
196
197    public void setServletContextName(String servletContextName) {
198        this.servletContextName = servletContextName;
199    }
200
201    @Override
202    public ServletRegistration.Dynamic addServlet(String servletName, String className) {
203        throw MockExceptions.unsupported;
204    }
205
206    @Override
207    public ServletRegistration.Dynamic addServlet(String servletName, Servlet servlet) {
208        throw MockExceptions.unsupported;
209    }
210
211    @Override
212    public ServletRegistration.Dynamic addServlet(String servletName, Class<? extends Servlet> servletClass) {
213        throw MockExceptions.unsupported;
214    }
215
216    @Override
217    public ServletRegistration.Dynamic addJspFile(String servletName, String jspFile) {
218        throw MockExceptions.unsupported;
219    }
220
221    @Override
222    public <T extends Servlet> T createServlet(Class<T> clazz) throws ServletException {
223        throw MockExceptions.unsupported;
224    }
225
226    @Override
227    public ServletRegistration getServletRegistration(String servletName) {
228        throw MockExceptions.unsupported;
229    }
230
231    @Override
232    public Map<String, ? extends ServletRegistration> getServletRegistrations() {
233        throw MockExceptions.unsupported;
234    }
235
236    @Override
237    public FilterRegistration.Dynamic addFilter(String filterName, String className) {
238        throw MockExceptions.unsupported;
239    }
240
241    @Override
242    public FilterRegistration.Dynamic addFilter(String filterName, Filter filter) {
243        throw MockExceptions.unsupported;
244    }
245
246    @Override
247    public FilterRegistration.Dynamic addFilter(String filterName, Class<? extends Filter> filterClass) {
248        throw MockExceptions.unsupported;
249    }
250
251    @Override
252    public <T extends Filter> T createFilter(Class<T> clazz) throws ServletException {
253        throw MockExceptions.unsupported;
254    }
255
256    @Override
257    public FilterRegistration getFilterRegistration(String filterName) {
258        throw MockExceptions.unsupported;
259    }
260
261    @Override
262    public Map<String, ? extends FilterRegistration> getFilterRegistrations() {
263        throw MockExceptions.unsupported;
264    }
265
266    @Override
267    public SessionCookieConfig getSessionCookieConfig() {
268        return null;
269    }
270
271    @Override
272    public void setSessionTrackingModes(Set<SessionTrackingMode> sessionTrackingModes) {
273
274    }
275
276    @Override
277    public Set<SessionTrackingMode> getDefaultSessionTrackingModes() {
278        return null;
279    }
280
281    @Override
282    public Set<SessionTrackingMode> getEffectiveSessionTrackingModes() {
283        return null;
284    }
285
286    @Override
287    public void addListener(String className) {
288
289    }
290
291    @Override
292    public <T extends EventListener> void addListener(T t) {
293
294    }
295
296    @Override
297    public void addListener(Class<? extends EventListener> listenerClass) {
298
299    }
300
301    @Override
302    public <T extends EventListener> T createListener(Class<T> clazz) throws ServletException {
303        return null;
304    }
305
306    @Override
307    public JspConfigDescriptor getJspConfigDescriptor() {
308        return null;
309    }
310
311    @Override
312    public ClassLoader getClassLoader() {
313        return null;
314    }
315
316    @Override
317    public void declareRoles(String... roleNames) {
318
319    }
320
321    @Override
322    public String getVirtualServerName() {
323        return null;
324    }
325
326    @Override
327    public int getSessionTimeout() {
328        return 0;
329    }
330
331    @Override
332    public void setSessionTimeout(int sessionTimeout) {
333
334    }
335
336    @Override
337    public String getRequestCharacterEncoding() {
338        return null;
339    }
340
341    @Override
342    public void setRequestCharacterEncoding(String encoding) {
343
344    }
345
346    @Override
347    public String getResponseCharacterEncoding() {
348        return null;
349    }
350
351    @Override
352    public void setResponseCharacterEncoding(String encoding) {
353
354    }
355}