1
0
Эх сурвалжийг харах

Add tests based on code coverage

Oren Novotny 9 жил өмнө
parent
commit
fc324a3d2d

+ 15 - 0
Ix.NET/Source/System.Interactive.Async/ExcludeFromCodeCoverageAttribute.cs

@@ -0,0 +1,15 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the Apache 2.0 License.
+// See the LICENSE file in the project root for more information. 
+
+#if NO_CODE_COVERAGE_ATTRIBUTE
+
+namespace System.Diagnostics.CodeAnalysis
+{
+    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Event, Inherited = false)]
+    internal sealed class ExcludeFromCodeCoverageAttribute : Attribute
+    {
+    }
+}
+
+#endif

+ 5 - 0
Ix.NET/Source/System.Interactive.Async/ToAsyncEnumerable.cs

@@ -198,6 +198,11 @@ namespace System.Linq
                 return Task.FromResult(false);
             }
 
+            public override IAsyncEnumerable<TResult> Select<TResult>(Func<T, TResult> selector)
+            {
+                return new SelectIListIterator<T, TResult>(source, selector);
+            }
+
             // These optimizations rely on the Sys.Linq impls from IEnumerable to optimize
             // and short circuit as appropriate
             public Task<T[]> ToArrayAsync(CancellationToken cancellationToken)

+ 2 - 0
Ix.NET/Source/System.Interactive.Async/project.json

@@ -54,6 +54,7 @@
       "buildOptions": {
         "define": [
           "NO_ARRAY_EMPTY",
+          "NO_CODE_COVERAGE_ATTRIBUTE",
           "CRIPPLED_REFLECTION",
           "PLIB"
         ]
@@ -63,6 +64,7 @@
       "buildOptions": {
         "define": [
           "CRIPPLED_REFLECTION",
+          "NO_CODE_COVERAGE_ATTRIBUTE",
           "PLIB"
         ]
       }

+ 83 - 0
Ix.NET/Source/Tests/AsyncTests.Single.cs

@@ -14,6 +14,14 @@ namespace Tests
 {
     public partial class AsyncTests
     {
+        [Fact]
+        public void MoveNextExtension_Null()
+        {
+            var en = default(IAsyncEnumerator<int>);
+
+            Assert.ThrowsAsync<ArgumentNullException>(() => en.MoveNext());
+        }
+
         [Fact]
         public void MoveNextExtension()
         {
@@ -81,6 +89,81 @@ namespace Tests
             AssertThrows<Exception>(() => e.MoveNext().Wait(WaitTimeoutMs), ex_ => ((AggregateException)ex_).Flatten().InnerExceptions.Single() is DivideByZeroException);
         }
 
+        [Fact]
+        public void Select5()
+        {
+            var xs = new[] { 0, 1, 2 }.ToAsyncEnumerable();
+            var ys = xs.Select(i => i + 3).Select(x => (char)('a' + x));
+
+            var e = ys.GetEnumerator();
+            HasNext(e, 'd');
+            HasNext(e, 'e');
+            HasNext(e, 'f');
+            NoNext(e);
+        }
+
+        [Fact]
+        public void Select6()
+        {
+            var xs = new CancellationTestAsyncEnumerable();
+            var ys = xs.Select(i => i + 3).Select(x => (char)('a' + x));
+
+            var e = ys.GetEnumerator();
+            HasNext(e, 'd');
+            HasNext(e, 'e');
+            HasNext(e, 'f');
+        }
+
+        [Fact]
+        public void SelectWhere1()
+        {
+            var xs = new CancellationTestAsyncEnumerable();
+            var ys = xs.Select(i => i + 2).Where(i => i % 2 == 0);
+
+            var e = ys.GetEnumerator();
+            HasNext(e, 2);
+            HasNext(e, 4);
+            HasNext(e, 6);
+        }
+
+        [Fact]
+        public void WhereSelect1()
+        {
+            var xs = new CancellationTestAsyncEnumerable();
+            var ys = xs.Where(i => i % 2 == 0).Select(i => i + 2);
+
+            var e = ys.GetEnumerator();
+            HasNext(e, 2);
+            HasNext(e, 4);
+            HasNext(e, 6);
+        }
+
+
+        [Fact]
+        public void SelectWhere2()
+        {
+            var xs = new[] { 0, 1, 2 }.ToAsyncEnumerable();
+            var ys = xs.Select(i => i + 2).Where(i => i % 2 == 0);
+
+            var e = ys.GetEnumerator();
+            HasNext(e, 2);
+            HasNext(e, 4);
+            NoNext(e);
+
+        }
+
+        [Fact]
+        public void WhereSelect2()
+        {
+            var xs = new[] { 0, 1, 2 }.ToAsyncEnumerable();
+            var ys = xs.Where(i => i % 2 == 0).Select(i => i + 2);
+
+            var e = ys.GetEnumerator();
+            HasNext(e, 2);
+            HasNext(e, 4);
+            NoNext(e);
+        }
+
         [Fact]
         public void Where_Null()
         {