Bart De Smet 10 лет назад
Родитель
Сommit
07f10669d0
2 измененных файлов с 23 добавлено и 9 удалено
  1. 7 7
      Ix.NET/Source/Tests/AsyncTests.Bugs.cs
  2. 16 2
      Ix.NET/Source/Tests/AsyncTests.cs

+ 7 - 7
Ix.NET/Source/Tests/AsyncTests.Bugs.cs

@@ -121,30 +121,30 @@ namespace Tests
         [TestMethod]
         public void DisposesUponError()
         {
-            var disposed = false;
+            var disposed = new TaskCompletionSource<bool>();
 
             var xs = new[] { 1, 2, 3 }.WithDispose(() =>
             {
-                disposed = true;
+                disposed.SetResult(true);
             }).ToAsyncEnumerable();
 
             var ex = new Exception("Bang!");
             var ys = xs.Select(x => { if (x == 1) throw ex; return x; });
 
             var e = ys.GetEnumerator();
-            AssertThrows<Exception>(() => e.MoveNext());
+            AssertThrows<Exception>(() => e.MoveNext().Wait());
 
-            Assert.IsTrue(disposed);
+            Assert.IsTrue(disposed.Task.Result);
         }
 
         [TestMethod]
         public void CorrectCancel()
         {
-            var disposed = false;
+            var disposed = new TaskCompletionSource<bool>();
 
             var xs = new[] { 1, 2, 3 }.WithDispose(() =>
             {
-                disposed = true;
+                disposed.SetResult(true);
             }).ToAsyncEnumerable();
 
             var ys = xs.Select(x => x + 1).Where(x => true);
@@ -171,7 +171,7 @@ namespace Tests
                 // it. This design is chosen because cancelling a MoveNext call leaves
                 // the enumerator in an indeterminate state. Further interactions with
                 // it should be forbidden.
-                Assert.IsTrue(disposed);
+                Assert.IsTrue(disposed.Task.Result);
             }
 
             Assert.IsFalse(e.MoveNext().Result);

+ 16 - 2
Ix.NET/Source/Tests/AsyncTests.cs

@@ -14,27 +14,41 @@ namespace Tests
         public void AssertThrows<E>(Action a)
             where E : Exception
         {
+            var hasFailed = false;
+
             try
             {
                 a();
-                Assert.Fail();
             }
             catch (E)
             {
+                hasFailed = true;
+            }
+
+            if (!hasFailed)
+            {
+                Assert.Fail();
             }
         }
 
         public void AssertThrows<E>(Action a, Func<E, bool> assert)
             where E : Exception
         {
+            var hasFailed = false;
+
             try
             {
                 a();
-                Assert.Fail();
             }
             catch (E e)
             {
                 Assert.IsTrue(assert(e));
+                hasFailed = true;
+            }
+
+            if (!hasFailed)
+            {
+                Assert.Fail();
             }
         }