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}