@@ -10,6 +10,12 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal
10
10
{
11
11
public class ExpressionMetadataProviderTest
12
12
{
13
+ private string PrivateProperty { get ; set ; }
14
+
15
+ public static string StaticProperty { get ; set ; }
16
+
17
+ public string Field = "Hello" ;
18
+
13
19
[ Fact ]
14
20
public void FromLambdaExpression_GetsExpectedMetadata_ForIdentityExpression ( )
15
21
{
@@ -148,6 +154,72 @@ public void FromStringExpression_SetsContainerAsExpected()
148
154
Assert . Same ( myModel , metadata . Container . Model ) ;
149
155
}
150
156
157
+ // A private property can't be found by the model metadata provider, so return the property's type
158
+ // as a best-effort mechanism.
159
+ [ Fact ]
160
+ public void FromLambdaExpression_ForPrivateProperty_ReturnsMetadataOfExpressionType ( )
161
+ {
162
+ // Arrange
163
+ var provider = new EmptyModelMetadataProvider ( ) ;
164
+ var viewData = new ViewDataDictionary < ExpressionMetadataProviderTest > ( provider ) ;
165
+
166
+ // Act
167
+ var explorer = ExpressionMetadataProvider . FromLambdaExpression (
168
+ m => m . PrivateProperty ,
169
+ viewData ,
170
+ provider ) ;
171
+
172
+ // Assert
173
+ Assert . NotNull ( explorer ) ;
174
+ Assert . NotNull ( explorer . Metadata ) ;
175
+ Assert . Equal ( ModelMetadataKind . Type , explorer . Metadata . MetadataKind ) ;
176
+ Assert . Equal ( typeof ( string ) , explorer . ModelType ) ;
177
+ }
178
+
179
+ // A static property can't be found by the model metadata provider, so return the property's type
180
+ // as a best-effort mechanism.
181
+ [ Fact ]
182
+ public void FromLambdaExpression_ForStaticProperty_ReturnsMetadataOfExpressionType ( )
183
+ {
184
+ // Arrange
185
+ var provider = new EmptyModelMetadataProvider ( ) ;
186
+ var viewData = new ViewDataDictionary < ExpressionMetadataProviderTest > ( provider ) ;
187
+
188
+ // Act
189
+ var explorer = ExpressionMetadataProvider . FromLambdaExpression (
190
+ m => ExpressionMetadataProviderTest . StaticProperty ,
191
+ viewData ,
192
+ provider ) ;
193
+
194
+ // Assert
195
+ Assert . NotNull ( explorer ) ;
196
+ Assert . NotNull ( explorer . Metadata ) ;
197
+ Assert . Equal ( ModelMetadataKind . Type , explorer . Metadata . MetadataKind ) ;
198
+ Assert . Equal ( typeof ( string ) , explorer . ModelType ) ;
199
+ }
200
+
201
+ // A field can't be found by the model metadata provider, so return the field's type
202
+ // as a best-effort mechanism.
203
+ [ Fact ]
204
+ public void FromLambdaExpression_ForField_ReturnsMetadataOfExpressionType ( )
205
+ {
206
+ // Arrange
207
+ var provider = new EmptyModelMetadataProvider ( ) ;
208
+ var viewData = new ViewDataDictionary < ExpressionMetadataProviderTest > ( provider ) ;
209
+
210
+ // Act
211
+ var explorer = ExpressionMetadataProvider . FromLambdaExpression (
212
+ m => m . Field ,
213
+ viewData ,
214
+ provider ) ;
215
+
216
+ // Assert
217
+ Assert . NotNull ( explorer ) ;
218
+ Assert . NotNull ( explorer . Metadata ) ;
219
+ Assert . Equal ( ModelMetadataKind . Type , explorer . Metadata . MetadataKind ) ;
220
+ Assert . Equal ( typeof ( string ) , explorer . ModelType ) ;
221
+ }
222
+
151
223
private class TestModel
152
224
{
153
225
public Category SelectedCategory { get ; set ; }
0 commit comments