Add test case for bug #2513.
authorJérémie Laval <jeremie.laval@gmail.com>
Fri, 3 Feb 2012 15:26:06 +0000 (16:26 +0100)
committerJérémie Laval <jeremie.laval@gmail.com>
Sun, 5 Feb 2012 11:03:29 +0000 (12:03 +0100)
mcs/class/corlib/Test/System.Threading.Tasks/TaskCompletionSourceTests.cs

index 093df3c0e0a6e3d1060ee25443efa829720f1171..01ff35d96bf09beb144cb4297831867df699e60d 100644 (file)
@@ -197,6 +197,34 @@ namespace MonoTests.System.Threading.Tasks
                        Assert.AreEqual (thrown, ex.InnerException);
                }
 
+               [Test]
+               public void SetExceptionAndUnobservedEvent ()
+               {
+                       bool wasCalled = false;
+                       bool notFromMainThread = false;
+                       int mainThreadId = Thread.CurrentThread.ManagedThreadId;
+                       TaskScheduler.UnobservedTaskException += (o, args) => {
+                               wasCalled = true;
+                               notFromMainThread = Thread.CurrentThread.ManagedThreadId != mainThreadId;
+                               args.SetObserved ();
+                       };
+                       var inner = new ApplicationException ();
+                       CreateFaultedTaskCompletionSource (inner);
+                       Thread.Sleep (1000);
+                       GC.Collect ();
+                       GC.WaitForPendingFinalizers ();
+
+                       Assert.IsTrue (wasCalled);
+                       Assert.IsTrue (notFromMainThread);
+               }
+
+               void CreateFaultedTaskCompletionSource (Exception inner)
+               {
+                       var tcs = new TaskCompletionSource<int> ();
+                       tcs.SetException (inner);
+                       tcs = null;
+               }
+
                [Test]
                public void WaitingTest ()
                {