public void ModelType_UsesDeclaredType_WhenModelIsNull() { // Arrange var provider = new EmptyModelMetadataProvider(); var modelExplorer = provider.GetModelExplorerForType(typeof(BaseClass), model: null); // Act var modelType = modelExplorer.ModelType; // Assert Assert.Equal(typeof(BaseClass), modelType); }
public void GetPropertyExplorer_DeferredModelAccess_ContainerModelIsNull() { // Arrange var provider = new EmptyModelMetadataProvider(); var modelExplorer = provider.GetModelExplorerForType(typeof(BaseClass), model: null); var propertyExplorer = modelExplorer.GetExplorerForProperty("Base1"); // Act var propertyValue = propertyExplorer.Model; // Assert Assert.Null(propertyValue); }
public void GetSimpleDisplayText_WithoutSimpleDisplayProperty( object model, Type modelType, string expectedResult) { // Arrange var provider = new EmptyModelMetadataProvider(); var modelExplorer = provider.GetModelExplorerForType(modelType, model); // Act var result = modelExplorer.GetSimpleDisplayText(); // Assert Assert.Equal(expectedResult, result); }
public void GetPropertyExplorer_ReturnsNull_ForPropertyNotFound() { // Arrange var model = new DerivedClass() { Base1 = 5, }; var provider = new EmptyModelMetadataProvider(); var modelExplorer = provider.GetModelExplorerForType(typeof(BaseClass), model); // Act var propertyExplorer = modelExplorer.GetExplorerForProperty("BadName"); // Assert Assert.Null(propertyExplorer); }
public void GetPropertyExplorer_DeferredModelAccess() { // Arrange var model = new DerivedClass() { Base1 = 5, }; var provider = new EmptyModelMetadataProvider(); var modelExplorer = provider.GetModelExplorerForType(typeof(BaseClass), model); // Change the model value after creating the explorer var propertyExplorer = modelExplorer.GetExplorerForProperty("Base1"); model.Base1 = 17; // Act var propertyValue = propertyExplorer.Model; // Assert Assert.Equal(17, propertyValue); }
private static ModelExpression CreateModelExpression(string name) { var modelMetadataProvider = new EmptyModelMetadataProvider(); return new ModelExpression( name, modelMetadataProvider.GetModelExplorerForType(typeof(object), model: null)); }
public void ModelType_UsesRuntimeType() { // Arrange var provider = new EmptyModelMetadataProvider(); var modelExplorer = provider.GetModelExplorerForType(typeof(BaseClass), new DerivedClass()); // Act var modelType = modelExplorer.ModelType; // Assert Assert.Equal(typeof(DerivedClass), modelType); }
public void Properties_UsesRuntimeType() { // Arrange var provider = new EmptyModelMetadataProvider(); var modelExplorer = provider.GetModelExplorerForType(typeof(BaseClass), new DerivedClass()); // Act var properties = modelExplorer.Properties.ToArray(); // Assert Assert.Equal(2, properties.Length); var baseProperty = Assert.Single(properties, p => p.Metadata.PropertyName == "Base1"); Assert.Equal(typeof(int), baseProperty.Metadata.ModelType); Assert.Equal(typeof(DerivedClass), baseProperty.Metadata.ContainerType); Assert.Same(modelExplorer, baseProperty.Container); var derivedProperty = Assert.Single(properties, p => p.Metadata.PropertyName == "Derived1"); Assert.Equal(typeof(string), derivedProperty.Metadata.ModelType); Assert.Equal(typeof(DerivedClass), derivedProperty.Metadata.ContainerType); Assert.Same(modelExplorer, derivedProperty.Container); }
public void Properties_UsesDeclaredType_WhenModelIsNull() { // Arrange var provider = new EmptyModelMetadataProvider(); var modelExplorer = provider.GetModelExplorerForType(typeof(BaseClass), model: null); // Act var properties = modelExplorer.Properties.ToArray(); // Assert Assert.Equal(1, properties.Length); var baseProperty = Assert.Single(properties, p => p.Metadata.PropertyName == "Base1"); Assert.Equal(typeof(int), baseProperty.Metadata.ModelType); Assert.Equal(typeof(BaseClass), baseProperty.Metadata.ContainerType); Assert.Same(modelExplorer, baseProperty.Container); }
public void LabelHelpers_DisplayMetadataPropertyNameForProperty() { // Arrange var propertyName = "Property1"; var provider = new EmptyModelMetadataProvider(); var modelExplorer = provider .GetModelExplorerForType(typeof(DefaultTemplatesUtilities.ObjectTemplateModel), model: null) .GetExplorerForProperty(propertyName); var helper = DefaultTemplatesUtilities.GetHtmlHelper(); helper.ViewData.ModelExplorer = modelExplorer; // Act var labelResult = helper.Label(expression: string.Empty); var labelForResult = helper.LabelFor(m => m); var labelForModelResult = helper.LabelForModel(); // Assert Assert.Equal("<label for=\"\">HtmlEncode[[" + propertyName + "]]</label>", HtmlContentUtilities.HtmlContentToString(labelResult)); Assert.Equal("<label for=\"\">HtmlEncode[[" + propertyName + "]]</label>", HtmlContentUtilities.HtmlContentToString(labelForResult)); Assert.Equal("<label for=\"\">HtmlEncode[[" + propertyName + "]]</label>", HtmlContentUtilities.HtmlContentToString(labelForModelResult)); }
public async Task TagHelper_CallsGeneratorWithExpectedValues_RealModelType( Type modelType, object model, bool allowMultiple) { // Arrange var contextAttributes = new TagHelperAttributeList( Enumerable.Empty<TagHelperAttribute>()); var originalAttributes = new TagHelperAttributeList(); var propertyName = "Property1"; var tagName = "select"; var tagHelperContext = new TagHelperContext( contextAttributes, items: new Dictionary<object, object>(), uniqueId: "test"); var output = new TagHelperOutput( tagName, originalAttributes, getChildContentAsync: (useCachedResult, encoder) => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return Task.FromResult<TagHelperContent>(tagHelperContent); }); var metadataProvider = new EmptyModelMetadataProvider(); var modelExplorer = metadataProvider.GetModelExplorerForType(modelType, model); var modelExpression = new ModelExpression(propertyName, modelExplorer); var htmlGenerator = new Mock<IHtmlGenerator>(MockBehavior.Strict); var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator.Object, metadataProvider); var currentValues = new string[0]; htmlGenerator .Setup(real => real.GetCurrentValues( viewContext, modelExplorer, propertyName, // expression allowMultiple)) .Returns(currentValues) .Verifiable(); htmlGenerator .Setup(real => real.GenerateSelect( viewContext, modelExplorer, null, // optionLabel propertyName, // expression It.IsAny<IEnumerable<SelectListItem>>(), currentValues, allowMultiple, null)) // htmlAttributes .Returns((TagBuilder)null) .Verifiable(); var tagHelper = new SelectTagHelper(htmlGenerator.Object) { For = modelExpression, ViewContext = viewContext, }; // Act tagHelper.Init(tagHelperContext); await tagHelper.ProcessAsync(tagHelperContext, output); // Assert htmlGenerator.Verify(); var keyValuePair = Assert.Single( tagHelperContext.Items, entry => (Type)entry.Key == typeof(SelectTagHelper)); var actualCurrentValues = Assert.IsType<CurrentValues>(keyValuePair.Value); Assert.Same(currentValues, actualCurrentValues.Values); }
public async Task ProcessAsync_CallsGeneratorWithExpectedValues_ItemsAndAttribute( IEnumerable<SelectListItem> inputItems, string attributeName, string attributeValue, IEnumerable<SelectListItem> expectedItems) { // Arrange var contextAttributes = new TagHelperAttributeList { // Provided for completeness. Select tag helper does not confirm AllAttributes set is consistent. { attributeName, attributeValue }, }; var originalAttributes = new TagHelperAttributeList { { attributeName, attributeValue }, }; var propertyName = "Property1"; var expectedTagName = "select"; var tagHelperContext = new TagHelperContext( contextAttributes, items: new Dictionary<object, object>(), uniqueId: "test"); var output = new TagHelperOutput( expectedTagName, originalAttributes, getChildContentAsync: (useCachedResult, encoder) => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Something"); return Task.FromResult<TagHelperContent>(tagHelperContent); }); var metadataProvider = new EmptyModelMetadataProvider(); string model = null; var modelExplorer = metadataProvider.GetModelExplorerForType(typeof(string), model); var htmlGenerator = new Mock<IHtmlGenerator>(MockBehavior.Strict); var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator.Object, metadataProvider); // Simulate a (model => model) scenario. E.g. the calling helper may appear in a low-level template. var modelExpression = new ModelExpression(string.Empty, modelExplorer); viewContext.ViewData.TemplateInfo.HtmlFieldPrefix = propertyName; var currentValues = new string[0]; htmlGenerator .Setup(real => real.GetCurrentValues( viewContext, modelExplorer, string.Empty, // expression false)) // allowMultiple .Returns(currentValues) .Verifiable(); htmlGenerator .Setup(real => real.GenerateSelect( viewContext, modelExplorer, null, // optionLabel string.Empty, // expression expectedItems, currentValues, false, // allowMultiple null)) // htmlAttributes .Returns((TagBuilder)null) .Verifiable(); var tagHelper = new SelectTagHelper(htmlGenerator.Object) { For = modelExpression, Items = inputItems, ViewContext = viewContext, }; // Act tagHelper.Init(tagHelperContext); await tagHelper.ProcessAsync(tagHelperContext, output); // Assert htmlGenerator.Verify(); var keyValuePair = Assert.Single( tagHelperContext.Items, entry => (Type)entry.Key == typeof(SelectTagHelper)); var actualCurrentValues = Assert.IsType<CurrentValues>(keyValuePair.Value); Assert.Same(currentValues, actualCurrentValues.Values); }