1
- // Licensed to the .NET Foundation under one or more agreements.
1
+ // Licensed to the .NET Foundation under one or more agreements.
2
2
// The .NET Foundation licenses this file to you under the MIT license.
3
3
4
4
using System . Reflection ;
5
5
using Microsoft . Extensions . Internal ;
6
+ using System . Runtime . CompilerServices ;
6
7
7
8
namespace Microsoft . AspNetCore . Mvc . Infrastructure ;
8
9
@@ -21,6 +22,7 @@ public void ActionMethodExecutor_ExecutesVoidActions()
21
22
var valueTask = actionMethodExecutor . Execute ( mapper , objectMethodExecutor , controller , Array . Empty < object > ( ) ) ;
22
23
23
24
// Assert
25
+ Assert . Equal ( "VoidResultExecutor" , actionMethodExecutor . GetType ( ) . Name ) ;
24
26
Assert . True ( controller . Executed ) ;
25
27
Assert . IsType < EmptyResult > ( valueTask . Result ) ;
26
28
}
@@ -38,6 +40,7 @@ public void ActionMethodExecutor_ExecutesActionsReturningIActionResult()
38
40
var valueTask = actionMethodExecutor . Execute ( mapper , objectMethodExecutor , controller , Array . Empty < object > ( ) ) ;
39
41
40
42
// Assert
43
+ Assert . Equal ( "SyncActionResultExecutor" , actionMethodExecutor . GetType ( ) . Name ) ;
41
44
Assert . True ( valueTask . IsCompleted ) ;
42
45
Assert . IsType < ContentResult > ( valueTask . Result ) ;
43
46
}
@@ -55,6 +58,7 @@ public void ActionMethodExecutor_ExecutesActionsReturningSubTypeOfActionResult()
55
58
var valueTask = actionMethodExecutor . Execute ( mapper , objectMethodExecutor , controller , Array . Empty < object > ( ) ) ;
56
59
57
60
// Assert
61
+ Assert . Equal ( "SyncActionResultExecutor" , actionMethodExecutor . GetType ( ) . Name ) ;
58
62
Assert . IsType < ContentResult > ( valueTask . Result ) ;
59
63
}
60
64
@@ -72,6 +76,8 @@ public void ActionMethodExecutor_ExecutesActionsReturningActionResultOfT()
72
76
73
77
// Assert
74
78
var result = Assert . IsType < ObjectResult > ( valueTask . Result ) ;
79
+
80
+ Assert . Equal ( "SyncObjectResultExecutor" , actionMethodExecutor . GetType ( ) . Name ) ;
75
81
Assert . NotNull ( result . Value ) ;
76
82
Assert . IsType < TestModel > ( result . Value ) ;
77
83
Assert . Equal ( typeof ( TestModel ) , result . DeclaredType ) ;
@@ -91,6 +97,8 @@ public void ActionMethodExecutor_ExecutesActionsReturningModelAsModel()
91
97
92
98
// Assert
93
99
var result = Assert . IsType < ObjectResult > ( valueTask . Result ) ;
100
+
101
+ Assert . Equal ( "SyncObjectResultExecutor" , actionMethodExecutor . GetType ( ) . Name ) ;
94
102
Assert . NotNull ( result . Value ) ;
95
103
Assert . IsType < TestModel > ( result . Value ) ;
96
104
Assert . Equal ( typeof ( TestModel ) , result . DeclaredType ) ;
@@ -110,6 +118,8 @@ public void ActionMethodExecutor_ExecutesActionsReturningModelAsObject()
110
118
111
119
// Assert
112
120
var result = Assert . IsType < ObjectResult > ( valueTask . Result ) ;
121
+
122
+ Assert . Equal ( "SyncObjectResultExecutor" , actionMethodExecutor . GetType ( ) . Name ) ;
113
123
Assert . NotNull ( result . Value ) ;
114
124
Assert . IsType < TestModel > ( result . Value ) ;
115
125
Assert . Equal ( typeof ( object ) , result . DeclaredType ) ;
@@ -128,6 +138,7 @@ public void ActionMethodExecutor_ExecutesActionsReturningActionResultAsObject()
128
138
var valueTask = actionMethodExecutor . Execute ( mapper , objectMethodExecutor , controller , Array . Empty < object > ( ) ) ;
129
139
130
140
// Assert
141
+ Assert . Equal ( "SyncActionResultExecutor" , actionMethodExecutor . GetType ( ) . Name ) ;
131
142
Assert . IsType < ContentResult > ( valueTask . Result ) ;
132
143
}
133
144
@@ -144,10 +155,29 @@ public void ActionMethodExecutor_ExecutesActionsReturnTask()
144
155
var valueTask = actionMethodExecutor . Execute ( mapper , objectMethodExecutor , controller , Array . Empty < object > ( ) ) ;
145
156
146
157
// Assert
158
+ Assert . Equal ( "TaskResultExecutor" , actionMethodExecutor . GetType ( ) . Name ) ;
147
159
Assert . True ( controller . Executed ) ;
148
160
Assert . IsType < EmptyResult > ( valueTask . Result ) ;
149
161
}
150
162
163
+ [ Fact ]
164
+ public void ActionMethodExecutor_ExecutesActionsReturnAwaitable ( )
165
+ {
166
+ // Arrange
167
+ var mapper = new ActionResultTypeMapper ( ) ;
168
+ var controller = new TestController ( ) ;
169
+ var objectMethodExecutor = GetExecutor ( nameof ( TestController . ReturnsAwaitable ) ) ;
170
+ var actionMethodExecutor = ActionMethodExecutor . GetExecutor ( objectMethodExecutor ) ;
171
+
172
+ // Act
173
+ var awaitableResult = actionMethodExecutor . Execute ( mapper , objectMethodExecutor , controller , Array . Empty < object > ( ) ) ;
174
+
175
+ // Assert
176
+ Assert . Equal ( "AwaitableResultExecutor" , actionMethodExecutor . GetType ( ) . Name ) ;
177
+ Assert . True ( controller . Executed ) ;
178
+ Assert . IsType < EmptyResult > ( awaitableResult . Result ) ;
179
+ }
180
+
151
181
[ Fact ]
152
182
public void ActionMethodExecutorExecutesActionsAsynchronouslyReturningIActionResult ( )
153
183
{
@@ -161,6 +191,7 @@ public void ActionMethodExecutorExecutesActionsAsynchronouslyReturningIActionRes
161
191
var valueTask = actionMethodExecutor . Execute ( mapper , objectMethodExecutor , controller , Array . Empty < object > ( ) ) ;
162
192
163
193
// Assert
194
+ Assert . Equal ( "TaskOfIActionResultExecutor" , actionMethodExecutor . GetType ( ) . Name ) ;
164
195
Assert . IsType < StatusCodeResult > ( valueTask . Result ) ;
165
196
}
166
197
@@ -170,15 +201,16 @@ public async Task ActionMethodExecutor_ExecutesActionsAsynchronouslyReturningAct
170
201
// Arrange
171
202
var mapper = new ActionResultTypeMapper ( ) ;
172
203
var controller = new TestController ( ) ;
173
- var objectMethodExecutor = GetExecutor ( nameof ( TestController . ReturnIActionResultAsync ) ) ;
204
+ var objectMethodExecutor = GetExecutor ( nameof ( TestController . ReturnActionResultAsync ) ) ;
174
205
var actionMethodExecutor = ActionMethodExecutor . GetExecutor ( objectMethodExecutor ) ;
175
206
176
207
// Act
177
208
var valueTask = actionMethodExecutor . Execute ( mapper , objectMethodExecutor , controller , Array . Empty < object > ( ) ) ;
178
209
179
210
// Assert
180
211
await valueTask ;
181
- Assert . IsType < StatusCodeResult > ( valueTask . Result ) ;
212
+ Assert . Equal ( "TaskOfActionResultExecutor" , actionMethodExecutor . GetType ( ) . Name ) ;
213
+ Assert . IsType < ViewResult > ( valueTask . Result ) ;
182
214
}
183
215
184
216
[ Fact ]
@@ -195,6 +227,8 @@ public void ActionMethodExecutor_ExecutesActionsAsynchronouslyReturningModel()
195
227
196
228
// Assert
197
229
var result = Assert . IsType < ObjectResult > ( valueTask . Result ) ;
230
+
231
+ Assert . Equal ( "AwaitableObjectResultExecutor" , actionMethodExecutor . GetType ( ) . Name ) ;
198
232
Assert . NotNull ( result . Value ) ;
199
233
Assert . IsType < TestModel > ( result . Value ) ;
200
234
Assert . Equal ( typeof ( TestModel ) , result . DeclaredType ) ;
@@ -214,6 +248,8 @@ public void ActionMethodExecutor_ExecutesActionsAsynchronouslyReturningModelAsOb
214
248
215
249
// Assert
216
250
var result = Assert . IsType < ObjectResult > ( valueTask . Result ) ;
251
+
252
+ Assert . Equal ( "AwaitableObjectResultExecutor" , actionMethodExecutor . GetType ( ) . Name ) ;
217
253
Assert . NotNull ( result . Value ) ;
218
254
Assert . IsType < TestModel > ( result . Value ) ;
219
255
Assert . Equal ( typeof ( object ) , result . DeclaredType ) ;
@@ -232,6 +268,7 @@ public void ActionMethodExecutor_ExecutesActionsAsynchronouslyReturningIActionRe
232
268
var valueTask = actionMethodExecutor . Execute ( mapper , objectMethodExecutor , controller , Array . Empty < object > ( ) ) ;
233
269
234
270
// Assert
271
+ Assert . Equal ( "AwaitableObjectResultExecutor" , actionMethodExecutor . GetType ( ) . Name ) ;
235
272
Assert . IsType < OkResult > ( valueTask . Result ) ;
236
273
}
237
274
@@ -249,6 +286,8 @@ public void ActionMethodExecutor_ExecutesActionsAsynchronouslyReturningActionRes
249
286
250
287
// Assert
251
288
var result = Assert . IsType < ObjectResult > ( valueTask . Result ) ;
289
+
290
+ Assert . Equal ( "AwaitableObjectResultExecutor" , actionMethodExecutor . GetType ( ) . Name ) ;
252
291
Assert . NotNull ( result . Value ) ;
253
292
Assert . IsType < TestModel > ( result . Value ) ;
254
293
Assert . Equal ( typeof ( TestModel ) , result . DeclaredType ) ;
@@ -304,8 +343,16 @@ public Task ReturnsTask()
304
343
return Task . CompletedTask ;
305
344
}
306
345
346
+ public YieldAwaitable ReturnsAwaitable ( )
347
+ {
348
+ Executed = true ;
349
+ return Task . Yield ( ) ;
350
+ }
351
+
307
352
public Task < IActionResult > ReturnIActionResultAsync ( ) => Task . FromResult ( ( IActionResult ) new StatusCodeResult ( 201 ) ) ;
308
353
354
+ public Task < ViewResult > ReturnActionResultAsync ( ) => Task . FromResult ( new ViewResult { StatusCode = 200 } ) ;
355
+
309
356
public Task < StatusCodeResult > ReturnsIActionResultSubTypeAsync ( ) => Task . FromResult ( new StatusCodeResult ( 200 ) ) ;
310
357
311
358
public Task < TestModel > ReturnsModelAsModelAsync ( ) => Task . FromResult ( new TestModel ( ) ) ;
0 commit comments