Skip to content

Commit e469f9e

Browse files
committed
Added unit test for AsyncTaskMethodBuilder<T>
1 parent d85f836 commit e469f9e

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

UnitTests/UnitTests.Shared/Extensions/Test_TaskExtensions.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,25 @@ public void Test_TaskExtensions_ResultOrDefault()
3737
Assert.AreEqual(42, ((Task)tcs.Task).GetResultOrDefault());
3838
}
3939

40+
[TestCategory("TaskExtensions")]
41+
[TestMethod]
42+
public async Task Test_TaskExtensions_ResultOrDefault_FromAsyncTaskMethodBuilder()
43+
{
44+
var tcs = new TaskCompletionSource<object>();
45+
46+
Task<string> taskFromBuilder = GetTaskFromAsyncMethodBuilder("Test", tcs);
47+
48+
Assert.IsNull(((Task)taskFromBuilder).GetResultOrDefault());
49+
Assert.IsNull(taskFromBuilder.GetResultOrDefault());
50+
51+
tcs.SetResult(null);
52+
53+
await taskFromBuilder;
54+
55+
Assert.AreEqual(((Task)taskFromBuilder).GetResultOrDefault(), "Test");
56+
Assert.AreEqual(taskFromBuilder.GetResultOrDefault(), "Test");
57+
}
58+
4059
[TestCategory("TaskExtensions")]
4160
[TestMethod]
4261
public void Test_TaskExtensions_ResultOrDefault_OfT_Int32()
@@ -86,5 +105,16 @@ public void Test_TaskExtensions_ResultOrDefault_OfT_String()
86105

87106
Assert.AreEqual("Hello world", tcs.Task.GetResultOrDefault());
88107
}
108+
109+
// Creates a Task<T> of a given type which is actually an instance of
110+
// System.Runtime.CompilerServices.AsyncTaskMethodBuilder<TResult>.AsyncStateMachineBox<TStateMachine>.
111+
// See https://source.dot.net/#System.Private.CoreLib/AsyncTaskMethodBuilderT.cs,f8f35fd356112b30.
112+
// This is needed to verify that the extension also works when the input Task<T> is of a derived type.
113+
private static async Task<T> GetTaskFromAsyncMethodBuilder<T>(T result, TaskCompletionSource<object> tcs)
114+
{
115+
await tcs.Task;
116+
117+
return result;
118+
}
89119
}
90120
}

0 commit comments

Comments
 (0)