2 // MonoTests.System.Web.HttpTaskAsyncHandlerTest.cs
5 // Kornel Pal (kornelpal@gmail.com)
7 // Copyright (C) 2014 Kornel Pal
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 using System.Threading.Tasks;
35 using NUnit.Framework;
37 namespace MonoTests.System.Web
40 public sealed class HttpTaskAsyncHandlerTest : TaskAsyncResultTest
42 sealed class DummyHttpTaskAsyncHandler : HttpTaskAsyncHandler
44 public DummyHttpTaskAsyncHandler ()
48 public override Task ProcessRequestAsync (HttpContext context)
50 throw new AssertionException ("Should not be called.");
54 sealed class TestHttpTaskAsyncHandler : HttpTaskAsyncHandler
56 readonly Func<Task> taskFactory;
57 readonly HttpContext expectedContext;
59 public TestHttpTaskAsyncHandler (Func<Task> taskFactory, HttpContext expectedContext)
61 this.taskFactory = taskFactory;
62 this.expectedContext = expectedContext;
65 public override Task ProcessRequestAsync (HttpContext context)
67 Assert.AreSame (expectedContext, context, "TestHttpTaskAsyncHandler#A01");
69 return taskFactory ();
73 IHttpAsyncHandler handler;
74 HttpContext expectedContext;
76 protected override void SetNullArguments ()
78 expectedContext = null;
81 protected override IAsyncResult GetAsyncResult (Func<Task> taskFactory, AsyncCallback callback, object state)
83 Assert.IsNull (handler, "GetAsyncResult#A01");
85 handler = new TestHttpTaskAsyncHandler (taskFactory, expectedContext);
86 return handler.BeginProcessRequest (expectedContext, callback, state);
89 protected override void Wait (IAsyncResult result)
91 Assert.IsNotNull (handler, "Wait#A01");
93 handler.EndProcessRequest (result);
96 protected override void TestSetUp ()
102 var request = new HttpRequest (string.Empty, "http://localhost/", string.Empty);
103 var response = new HttpResponse (TextWriter.Null);
104 expectedContext = new HttpContext (request, response);
108 public void IsReusable ()
110 var handler = new DummyHttpTaskAsyncHandler ();
111 Assert.IsFalse (handler.IsReusable, "#A01");
115 [ExpectedException (typeof (NotSupportedException))]
116 public void ProcessRequest ()
118 var handler = new DummyHttpTaskAsyncHandler ();
119 handler.ProcessRequest (expectedContext);
123 [ExpectedException (typeof (NotSupportedException))]
124 public void ProcessRequest_NullContext ()
126 var handler = new DummyHttpTaskAsyncHandler ();
127 handler.ProcessRequest (null);