Imported Upstream version 5.4.0.167

Former-commit-id: 5624ac747d633e885131e8349322922b6a59baaa
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2017-08-21 15:34:15 +00:00
parent e49d6f06c0
commit 536cd135cc
12856 changed files with 563812 additions and 223249 deletions

View File

@ -30,10 +30,24 @@ namespace System.Threading.Tasks.Tests
Task<Task> outer = Task.FromResult(inner);
Task unwrappedInner = outer.Unwrap();
Assert.True(unwrappedInner.IsCompleted);
Assert.Same(inner, unwrappedInner);
AssertTasksAreEqual(inner, unwrappedInner);
}
/// <summary>
/// Tests Unwrap when both the outer task and non-generic inner task have completed by the time Unwrap is called.
/// </summary>
/// <param name="inner">Will be run with a RanToCompletion, Faulted, and Canceled task.</param>
[SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, ".NET Core optimization to return the exact same object")]
[Theory]
[MemberData(nameof(CompletedNonGenericTasks))]
public void NonGeneric_Completed_Completed_OptimizeToUseSameInner(Task inner)
{
Task<Task> outer = Task.FromResult(inner);
Task unwrappedInner = outer.Unwrap();
Assert.True(unwrappedInner.IsCompleted);
Assert.Same(inner, unwrappedInner);
}
/// <summary>
/// Tests Unwrap when both the outer task and generic inner task have completed by the time Unwrap is called.
/// </summary>
@ -45,10 +59,24 @@ namespace System.Threading.Tasks.Tests
Task<Task<string>> outer = Task.FromResult(inner);
Task<string> unwrappedInner = outer.Unwrap();
Assert.True(unwrappedInner.IsCompleted);
Assert.Same(inner, unwrappedInner);
AssertTasksAreEqual(inner, unwrappedInner);
}
/// <summary>
/// Tests Unwrap when both the outer task and generic inner task have completed by the time Unwrap is called.
/// </summary>
/// <param name="inner">The inner task.</param>
[SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework, ".NET Core optimization to return the exact same object")]
[Theory]
[MemberData(nameof(CompletedStringTasks))]
public void Generic_Completed_Completed_OptimizeToUseSameInner(Task<string> inner)
{
Task<Task<string>> outer = Task.FromResult(inner);
Task<string> unwrappedInner = outer.Unwrap();
Assert.True(unwrappedInner.IsCompleted);
Assert.Same(inner, unwrappedInner);
}
/// <summary>
/// Tests Unwrap when the non-generic inner task has completed but the outer task has not completed by the time Unwrap is called.
/// </summary>