Add unit test for bug #2007
[mono.git] / mcs / class / corlib / Test / System.Threading.Tasks / TaskFactoryTest.cs
index 959d319c5260d366b1c93057a6050e77be7d8460..3ccdffefa10a60f8397c069a95f2082ff9e8dcbc 100644 (file)
@@ -173,6 +173,25 @@ namespace MonoTests.System.Threading.Tasks
                        Assert.IsTrue (ran, "#2");
                }
 
+               [Test]
+               public void ContinueWhenAll_WithMixedCompletionState ()
+               {
+                       var mre = new ManualResetEventSlim ();
+                       var task = Task.Factory.StartNew (() => mre.Wait (200));
+                       var contFailed = task.ContinueWith (t => {}, TaskContinuationOptions.OnlyOnFaulted);
+                       var contCanceled = task.ContinueWith (t => {}, TaskContinuationOptions.OnlyOnCanceled);
+                       var contSuccess = task.ContinueWith (t => {}, TaskContinuationOptions.OnlyOnRanToCompletion);
+                       bool ran = false;
+
+                       var cont = Task.Factory.ContinueWhenAll (new Task[] { contFailed, contCanceled, contSuccess }, _ => ran = true);
+
+                       mre.Set ();
+                       cont.Wait (200);
+
+                       Assert.IsTrue (ran);
+                       Assert.AreEqual (TaskStatus.RanToCompletion, cont.Status);
+               }
+
                [Test]
                public void ContinueWhenAny_Simple ()
                {