1 // 2 // TestStubTypes.cs 3 // 4 // Author: 5 // Atsushi Enomoto <atsushi@ximian.com> 6 // 7 // Copyright (C) 2008 Novell Inc. http://novell.com 8 // 9 10 // 11 // Permission is hereby granted, free of charge, to any person obtaining 12 // a copy of this software and associated documentation files (the 13 // "Software"), to deal in the Software without restriction, including 14 // without limitation the rights to use, copy, modify, merge, publish, 15 // distribute, sublicense, and/or sell copies of the Software, and to 16 // permit persons to whom the Software is furnished to do so, subject to 17 // the following conditions: 18 // 19 // The above copyright notice and this permission notice shall be 20 // included in all copies or substantial portions of the Software. 21 // 22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 29 // 30 using System; 31 using System.Collections; 32 using System.Web; 33 using System.Web.Routing; 34 using NUnit.Framework; 35 36 namespace MonoTests.System.Web.Routing 37 { 38 class HttpContextStub : HttpContextBase 39 { 40 HttpRequestStub req; 41 bool returnNullRequest; 42 HttpContextStub()43 public HttpContextStub () 44 : this (null) 45 { 46 } 47 HttpContextStub(bool returnNullRequest)48 public HttpContextStub (bool returnNullRequest) 49 : this (null) 50 { 51 this.returnNullRequest = returnNullRequest; 52 } 53 HttpContextStub(string dummyRequestPath)54 public HttpContextStub (string dummyRequestPath) 55 : this (dummyRequestPath, null) 56 { 57 } 58 HttpContextStub(string dummyRequestPath, string pathInfo)59 public HttpContextStub (string dummyRequestPath, string pathInfo) 60 : this (dummyRequestPath, pathInfo, null) 61 { 62 } 63 HttpContextStub(string dummyRequestPath, string pathInfo, string method)64 public HttpContextStub (string dummyRequestPath, string pathInfo, string method) 65 { 66 if (dummyRequestPath != null) { 67 req = new HttpRequestStub (dummyRequestPath, pathInfo); 68 req.Method = method; 69 } 70 } 71 72 public override HttpRequestBase Request { 73 get { 74 if (returnNullRequest) 75 return null; 76 77 return req != null ? req : base.Request; 78 } 79 } 80 } 81 82 class HttpRequestStub : HttpRequestBase 83 { HttpRequestStub(string dummyRequestPath, string pathInfo)84 public HttpRequestStub (string dummyRequestPath, string pathInfo) 85 { 86 req_path = dummyRequestPath; 87 path_info = pathInfo; 88 } 89 90 string req_path, path_info; 91 92 public override string AppRelativeCurrentExecutionFilePath { 93 get { return req_path ?? base.AppRelativeCurrentExecutionFilePath; } 94 } 95 96 public override string PathInfo { 97 get { return path_info ?? base.PathInfo; } 98 } 99 100 public override string HttpMethod { 101 get { return Method; } 102 } 103 104 public string Method { get; set; } 105 } 106 107 class MyDictionary : Hashtable 108 { 109 public override ICollection Keys { 110 get { return null; } 111 } 112 113 public override object this [object key] { 114 get { 115 //Console.Error.WriteLine ("Get: {0} {1}", key, key.GetHashCode ()); 116 return base [key]; 117 } 118 set { 119 //Console.Error.WriteLine ("Set: {0} {1} = {2}", key, key.GetHashCode (), value); 120 base [key] = value; 121 } 122 } 123 } 124 125 class HttpContextStub2 : HttpContextBase 126 { HttpContextStub2()127 public HttpContextStub2 () 128 : this (null, null) 129 { 130 } 131 HttpContextStub2(string requestUrl, string path)132 public HttpContextStub2 (string requestUrl, string path) 133 : this (requestUrl, path, null) 134 { 135 } 136 HttpContextStub2(string requestUrl, string path, string appPath)137 public HttpContextStub2 (string requestUrl, string path, string appPath) 138 { 139 request = new HttpRequestStub2 (requestUrl, path, appPath); 140 } 141 142 Hashtable items = new MyDictionary (); 143 HttpRequestStub request; 144 HttpResponseBase response; 145 146 public override IDictionary Items { 147 get { return items; } 148 } 149 150 public override HttpRequestBase Request { 151 get { return request ?? base.Request; } 152 } 153 154 public override HttpResponseBase Response { 155 get { return response ?? base.Response; } 156 } 157 RewritePath(string path)158 public override void RewritePath (string path) 159 { 160 throw new ApplicationException (path); 161 } 162 SetResponse(HttpResponseBase response)163 public void SetResponse (HttpResponseBase response) 164 { 165 this.response = response; 166 } 167 SetRequest(HttpRequestStub request)168 public void SetRequest (HttpRequestStub request) 169 { 170 this.request = request; 171 } 172 } 173 174 class HttpRequestStub2 : HttpRequestStub 175 { HttpRequestStub2(string dummyRequestPath, string dummyPath, string appPath)176 public HttpRequestStub2 (string dummyRequestPath, string dummyPath, string appPath) 177 : base (dummyRequestPath, String.Empty) 178 { 179 path = dummyPath; 180 app_path = appPath; 181 } 182 183 string path, app_path; 184 185 public override string ApplicationPath { 186 get { return app_path ?? base.ApplicationPath; } 187 } 188 189 public override string Path { 190 get { return path ?? base.Path; } 191 } 192 } 193 194 public class HttpResponseStub : HttpResponseBase 195 { HttpResponseStub()196 public HttpResponseStub () 197 : this (0) 198 { 199 } 200 201 int impl_type; 202 HttpResponseStub(int implType)203 public HttpResponseStub (int implType) 204 { 205 this.impl_type = implType; 206 } 207 ApplyAppPathModifier(string virtualPath)208 public override string ApplyAppPathModifier (string virtualPath) 209 { 210 switch (impl_type) { 211 case 3: 212 return virtualPath; // pass thru 213 case 2: 214 return virtualPath + "_modified"; 215 case 1: 216 throw new ApplicationException (virtualPath); 217 default: 218 return base.ApplyAppPathModifier (virtualPath); 219 } 220 } 221 } 222 223 class HttpContextStub3 : HttpContextStub2 224 { HttpContextStub3(string requestUrl, string path, string appPath, bool supportHandler)225 public HttpContextStub3 (string requestUrl, string path, string appPath, bool supportHandler) 226 : base (requestUrl, path, appPath) 227 { 228 this.support_handler = supportHandler; 229 } 230 RewritePath(string path)231 public override void RewritePath (string path) 232 { 233 RewrittenPath = path; 234 } 235 236 bool support_handler; 237 public IHttpHandler HttpHandler { get; set; } 238 239 public override IHttpHandler Handler { 240 get { return support_handler ? HttpHandler : base.Handler; } 241 set { 242 if (support_handler) 243 HttpHandler = value; 244 else 245 base.Handler = value; 246 } 247 } 248 249 public string RewrittenPath { get; set; } 250 } 251 class FakeHttpRequestWrapper : HttpRequestWrapper 252 { 253 string requestUrl; 254 string path; 255 string appPath; 256 FakeHttpRequestWrapper(string requestUrl, string path, string appPath)257 public FakeHttpRequestWrapper (string requestUrl, string path, string appPath) 258 : base (new HttpRequest (path, "http://localhost/", String.Empty)) 259 { 260 this.requestUrl = requestUrl; 261 this.path = path; 262 this.appPath = appPath; 263 } 264 265 public override string AppRelativeCurrentExecutionFilePath 266 { 267 get 268 { 269 return appPath; 270 } 271 } 272 } 273 274 class HttpContextStub4 : HttpContextStub3 275 { 276 HttpRequestWrapper wrapper; 277 278 public override HttpRequestBase Request 279 { 280 get 281 { 282 return wrapper; 283 } 284 } 285 HttpContextStub4(string requestUrl, string path, string appPath, bool supportHandler)286 public HttpContextStub4 (string requestUrl, string path, string appPath, bool supportHandler) 287 : base (requestUrl, path, appPath, supportHandler) 288 { 289 wrapper = new FakeHttpRequestWrapper (requestUrl, path, appPath); 290 } 291 } 292 293 class HttpContextStub5 : HttpContextStub2 294 { 295 HttpRequestWrapper wrapper; 296 297 public override HttpRequestBase Request 298 { 299 get 300 { 301 return wrapper; 302 } 303 } 304 HttpContextStub5()305 public HttpContextStub5 () 306 : this (null, null) 307 { 308 } 309 HttpContextStub5(string requestUrl, string path)310 public HttpContextStub5 (string requestUrl, string path) 311 : this (requestUrl, path, null) 312 { 313 314 } 315 HttpContextStub5(string requestUrl, string path, string appPath)316 public HttpContextStub5 (string requestUrl, string path, string appPath) 317 : base (requestUrl, path, appPath) 318 { 319 wrapper = new FakeHttpRequestWrapper (requestUrl, path, appPath); 320 } 321 } 322 public class MyStopRoutingHandler : StopRoutingHandler 323 { CallGetHttpHandler(RequestContext rc)324 public IHttpHandler CallGetHttpHandler (RequestContext rc) 325 { 326 return GetHttpHandler (rc); 327 } 328 } 329 330 public class MyUrlRoutingHandler : UrlRoutingHandler 331 { DoProcessRequest(HttpContextBase httpContext)332 public void DoProcessRequest (HttpContextBase httpContext) 333 { 334 ProcessRequest (httpContext); 335 } 336 VerifyAndProcessRequest(IHttpHandler httpHandler, HttpContextBase httpContext)337 protected override void VerifyAndProcessRequest (IHttpHandler httpHandler, HttpContextBase httpContext) 338 { 339 throw new ApplicationException ("MyUrlRoutingHandler"); 340 } 341 } 342 343 public class ErrorRouteHandler : IRouteHandler 344 { GetHttpHandler(RequestContext requestContext)345 public IHttpHandler GetHttpHandler (RequestContext requestContext) 346 { 347 throw new ApplicationException ("ErrorRouteHandler"); 348 } 349 } 350 351 public class MyRouteHandler : IRouteHandler 352 { MyRouteHandler()353 public MyRouteHandler () 354 : this (new MyHttpHandler ()) 355 { 356 } 357 MyRouteHandler(IHttpHandler handler)358 public MyRouteHandler (IHttpHandler handler) 359 { 360 this.handler = handler; 361 } 362 363 IHttpHandler handler; 364 GetHttpHandler(RequestContext requestContext)365 public IHttpHandler GetHttpHandler (RequestContext requestContext) 366 { 367 return handler; 368 } 369 } 370 371 public class MyHttpHandler : IHttpHandler 372 { 373 public bool IsReusable { 374 get { return true; } 375 } 376 ProcessRequest(HttpContext ctx)377 public void ProcessRequest (HttpContext ctx) 378 { 379 throw new MyException ("HOGE"); 380 } 381 } 382 383 public class MyException : Exception 384 { MyException(string msg)385 public MyException (string msg) : base (msg) {} 386 } 387 388 public class NullRouteHandler : IRouteHandler 389 { GetHttpHandler(RequestContext requestContext)390 public IHttpHandler GetHttpHandler (RequestContext requestContext) 391 { 392 return null; 393 } 394 } 395 396 public class MyRoute : Route 397 { MyRoute(string url, IRouteHandler handler)398 public MyRoute (string url, IRouteHandler handler) 399 : this (url, handler, null) 400 { 401 } 402 MyRoute(string url, IRouteHandler handler, Exception ex)403 public MyRoute (string url, IRouteHandler handler, Exception ex) 404 : base (url, handler) 405 { 406 this.ex = ex; 407 } 408 409 Exception ex; 410 GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)411 public override VirtualPathData GetVirtualPath (RequestContext requestContext, RouteValueDictionary values) 412 { 413 if (ex != null) 414 throw ex; 415 return base.GetVirtualPath (requestContext, values); 416 } 417 DoProcessConstraint(HttpContextBase httpContext, object constraint, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)418 public bool DoProcessConstraint (HttpContextBase httpContext, object constraint, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 419 { 420 return ProcessConstraint (httpContext, constraint, parameterName, values, routeDirection); 421 } 422 } 423 } 424