Add more tests
authorMarek Safar <marek.safar@gmail.com>
Fri, 5 Aug 2011 20:46:53 +0000 (21:46 +0100)
committerMarek Safar <marek.safar@gmail.com>
Fri, 5 Aug 2011 20:47:23 +0000 (21:47 +0100)
mcs/class/Mono.Async/Mono.Async_test.dll.sources
mcs/class/Mono.Async/Test/Mono.Async.Test.csproj
mcs/class/Mono.Async/Test/System.Runtime.CompilerServices/AsyncVoidMethodBuilderTest.cs [new file with mode: 0644]

index b428ab1b34ce26d320e9d0967d7a33394c60e1eb..1bd9cf3bc0e273577ba340d35bee1b6b19d761f1 100644 (file)
@@ -1,2 +1,3 @@
+System.Runtime.CompilerServices/AsyncVoidMethodBuilderTest.cs
 System.Runtime.CompilerServices/TaskAwaiterTest.cs
 System.Runtime.CompilerServices/TaskAwaiterTest_T.cs
index 9ca3021a2206addae20ea06b89fa4f3f4540f10e..81c9bdf69859d21fa8edc8381dd93040d0fdb270 100644 (file)
@@ -40,6 +40,7 @@
     <Reference Include="Microsoft.CSharp" />\r
   </ItemGroup>\r
   <ItemGroup>\r
+    <Compile Include="System.Runtime.CompilerServices\AsyncVoidMethodBuilderTest.cs" />\r
     <Compile Include="System.Runtime.CompilerServices\TaskAwaiterTest.cs" />\r
     <Compile Include="System.Runtime.CompilerServices\TaskAwaiterTest_T.cs" />\r
   </ItemGroup>\r
diff --git a/mcs/class/Mono.Async/Test/System.Runtime.CompilerServices/AsyncVoidMethodBuilderTest.cs b/mcs/class/Mono.Async/Test/System.Runtime.CompilerServices/AsyncVoidMethodBuilderTest.cs
new file mode 100644 (file)
index 0000000..01ea1ca
--- /dev/null
@@ -0,0 +1,110 @@
+//
+// AsyncVoidMethodBuilderTest.cs
+//
+// Authors:
+//     Marek Safar  <marek.safar@gmail.com>
+//
+// Copyright (C) 2011 Xamarin, Inc (http://www.xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Threading;
+using System.Threading.Tasks;
+using NUnit.Framework;
+using System.Runtime.CompilerServices;
+
+namespace MonoTests.System.Runtime.CompilerServices
+{
+       [TestFixture]
+       public class AsyncVoidMethodBuilderTest
+       {
+               class MyContext : SynchronizationContext
+               {
+                       public int Started;
+                       public int Completed;
+                       public int PostCounter;
+                       public int SendCounter;
+
+                       public override void OperationStarted ()
+                       {
+                               ++Started;
+                               base.OperationStarted ();
+                       }
+
+                       public override void OperationCompleted ()
+                       {
+                               ++Completed;
+                               base.OperationCompleted ();
+                       }
+
+                       public override void Post (SendOrPostCallback d, object state)
+                       {
+                               ++PostCounter;
+                               base.Post (d, state);
+                       }
+
+                       public override void Send (SendOrPostCallback d, object state)
+                       {
+                               ++SendCounter;
+                               base.Send (d, state);
+                       }
+               }
+
+               [Test]
+               public void SetResult ()
+               {
+                       var awaiter = AsyncVoidMethodBuilder.Create ();
+                       awaiter.SetResult ();
+               }
+
+               [Test]
+               public void SetException ()
+               {
+                       var context = new MyContext ();
+                       try {
+                               SynchronizationContext.SetSynchronizationContext (context);
+                               var awaiter = AsyncVoidMethodBuilder.Create ();
+
+                               Assert.AreEqual (1, context.Started, "#1");
+                               Assert.AreEqual (0, context.Completed, "#2");
+                               Assert.AreEqual (0, context.SendCounter, "#3");
+                               Assert.AreEqual (0, context.PostCounter, "#4");
+
+                               awaiter.SetException (new ApplicationException ());
+
+                               Assert.AreEqual (1, context.Started, "#5");
+                               Assert.AreEqual (1, context.Completed, "#6");
+                               Assert.AreEqual (0, context.SendCounter, "#7");
+                               Assert.AreEqual (1, context.PostCounter, "#8");
+
+                               awaiter.SetResult ();
+
+                               Assert.AreEqual (1, context.Started, "#9");
+                               Assert.AreEqual (1, context.Completed, "#10");
+                               Assert.AreEqual (0, context.SendCounter, "#11");
+                               Assert.AreEqual (1, context.PostCounter, "#12");
+                       } finally {
+                               SynchronizationContext.SetSynchronizationContext (null);
+                       }
+               }
+       }
+}
\ No newline at end of file