Add `HtmlHelperDisplayTextTest` and `HtmlHelperValueExtensionsTest` classes
This commit is contained in:
parent
126ee116cf
commit
d0d7c6aef8
|
|
@ -94,8 +94,10 @@
|
|||
<Compile Include="Rendering\DefaultTemplatesUtilities.cs" />
|
||||
<Compile Include="Rendering\HtmlHelperDisplayNameExtensionsTest.cs" />
|
||||
<Compile Include="Rendering\HtmlAttributePropertyHelperTest.cs" />
|
||||
<Compile Include="Rendering\HtmlHelperDisplayTextTest.cs" />
|
||||
<Compile Include="Rendering\HtmlHelperLabelExtensionsTest.cs" />
|
||||
<Compile Include="Rendering\HtmlHelperNameExtensionsTest.cs" />
|
||||
<Compile Include="Rendering\HtmlHelperValueExtensionsTest.cs" />
|
||||
<Compile Include="Rendering\ViewContextTests.cs" />
|
||||
<Compile Include="Rendering\ViewDataOfTTest.cs" />
|
||||
<Compile Include="KnownRouteValueConstraintTests.cs" />
|
||||
|
|
|
|||
|
|
@ -0,0 +1,284 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System.Globalization;
|
||||
using Microsoft.AspNet.Mvc.ModelBinding;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNet.Mvc.Core
|
||||
{
|
||||
/// <summary>
|
||||
/// Test the <see cref="IHtmlHelper.DisplayText"/> and <see cref="IHtmlHelper{T}.DisplayTextFor{TValue}"/> methods.
|
||||
/// </summary>
|
||||
public class HtmlHelperDisplayTextTest
|
||||
{
|
||||
[Fact]
|
||||
public void DisplayText_ReturnsEmpty_IfValueNull()
|
||||
{
|
||||
// Arrange
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper<OverriddenToStringModel>(model: null);
|
||||
|
||||
// Act
|
||||
var result = helper.DisplayText("");
|
||||
|
||||
// Assert
|
||||
Assert.Empty(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DisplayTextFor_ReturnsEmpty_IfValueNull()
|
||||
{
|
||||
// Arrange
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper<OverriddenToStringModel>(model: null);
|
||||
|
||||
// Act
|
||||
var result = helper.DisplayTextFor(m => m);
|
||||
|
||||
// Assert
|
||||
Assert.Empty(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DisplayText_ReturnsNullDisplayText_IfSetAndValueNull()
|
||||
{
|
||||
// Arrange
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper<OverriddenToStringModel>(model: null);
|
||||
helper.ViewData.ModelMetadata.NullDisplayText = "Null display Text";
|
||||
|
||||
// Act
|
||||
var result = helper.DisplayText("");
|
||||
|
||||
// Assert
|
||||
Assert.Equal("Null display Text", result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DisplayTextFor_ReturnsNullDisplayText_IfSetAndValueNull()
|
||||
{
|
||||
// Arrange
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper<OverriddenToStringModel>(model: null);
|
||||
helper.ViewData.ModelMetadata.NullDisplayText = "Null display Text";
|
||||
|
||||
// Act
|
||||
var result = helper.DisplayTextFor(m => m);
|
||||
|
||||
// Assert
|
||||
Assert.Equal("Null display Text", result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DisplayText_ReturnsValue_IfNameEmpty()
|
||||
{
|
||||
// Arrange
|
||||
var model = new OverriddenToStringModel("Model value");
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper(model);
|
||||
|
||||
// Act
|
||||
var result = helper.DisplayText("");
|
||||
|
||||
// Assert
|
||||
Assert.Equal("Model value", result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DisplayText_ReturnsEmpty_IfNameNotFound()
|
||||
{
|
||||
// Arrange
|
||||
var model = new OverriddenToStringModel("Model value");
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper(model);
|
||||
|
||||
// Act
|
||||
var result = helper.DisplayText("NonExistentProperty");
|
||||
|
||||
// Assert
|
||||
Assert.Empty(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DisplayTextFor_ReturnsValue_IfIdentityExpression()
|
||||
{
|
||||
// Arrange
|
||||
var model = new OverriddenToStringModel("Model value");
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper(model);
|
||||
|
||||
// Act
|
||||
var result = helper.DisplayTextFor(m => m);
|
||||
|
||||
// Assert
|
||||
Assert.Equal("Model value", result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DisplayText_ReturnsSimpleDisplayText_IfSetAndValueNonNull()
|
||||
{
|
||||
// Arrange
|
||||
var model = new OverriddenToStringModel("Ignored text");
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper(model);
|
||||
helper.ViewData.ModelMetadata.SimpleDisplayText = "Simple display text";
|
||||
|
||||
// Act
|
||||
var result = helper.DisplayText("");
|
||||
|
||||
// Assert
|
||||
Assert.Equal("Simple display text", result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DisplayTextFor_ReturnsSimpleDisplayText_IfSetAndValueNonNull()
|
||||
{
|
||||
// Arrange
|
||||
var model = new OverriddenToStringModel("Ignored text");
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper(model);
|
||||
helper.ViewData.ModelMetadata.SimpleDisplayText = "Simple display text";
|
||||
|
||||
// Act
|
||||
var result = helper.DisplayTextFor(m => m);
|
||||
|
||||
// Assert
|
||||
Assert.Equal("Simple display text", result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DisplayText_ReturnsPropertyValue_IfNameFound()
|
||||
{
|
||||
// Arrange
|
||||
var model = new OverriddenToStringModel("Ignored text")
|
||||
{
|
||||
Name = "Property value",
|
||||
};
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper(model);
|
||||
helper.ViewData.ModelMetadata.SimpleDisplayText = "Simple display text";
|
||||
|
||||
// Act
|
||||
var result = helper.DisplayText("Name");
|
||||
|
||||
// Assert
|
||||
Assert.Equal("Property value", result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DisplayTextFor_ReturnsPropertyValue_IfPropertyExpression()
|
||||
{
|
||||
// Arrange
|
||||
var model = new OverriddenToStringModel("ignored text")
|
||||
{
|
||||
Name = "Property value",
|
||||
};
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper(model);
|
||||
|
||||
// Act
|
||||
var result = helper.DisplayTextFor(m => m.Name);
|
||||
|
||||
// Assert
|
||||
Assert.Equal("Property value", result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DisplayText_ReturnsViewDataEntry()
|
||||
{
|
||||
// Arrange
|
||||
var model = new OverriddenToStringModel("Model value")
|
||||
{
|
||||
Name = "Property value",
|
||||
};
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper(model);
|
||||
helper.ViewData["Name"] = "View data dictionary value";
|
||||
|
||||
// Act
|
||||
var result = helper.DisplayText("Name");
|
||||
|
||||
// Assert
|
||||
Assert.Equal("View data dictionary value", result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DisplayTextFor_IgnoresViewDataEntry()
|
||||
{
|
||||
// Arrange
|
||||
var model = new OverriddenToStringModel("Model value")
|
||||
{
|
||||
Name = "Property value",
|
||||
};
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper(model);
|
||||
helper.ViewData["Name"] = "View data dictionary value";
|
||||
|
||||
// Act
|
||||
var result = helper.DisplayTextFor(m => m.Name);
|
||||
|
||||
// Assert
|
||||
Assert.Equal("Property value", result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DisplayText_ReturnsModelStateEntry()
|
||||
{
|
||||
// Arrange
|
||||
var model = new OverriddenToStringModel("Model value")
|
||||
{
|
||||
Name = "Property value",
|
||||
};
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper(model);
|
||||
var viewData = helper.ViewData;
|
||||
viewData["Name"] = "View data dictionary value";
|
||||
viewData.TemplateInfo.HtmlFieldPrefix = "FieldPrefix";
|
||||
|
||||
var modelState = new ModelState();
|
||||
modelState.Value = new ValueProviderResult(
|
||||
rawValue: new string[] { "Attempted name value" },
|
||||
attemptedValue: "Attempted name value",
|
||||
culture: CultureInfo.InvariantCulture);
|
||||
viewData.ModelState["FieldPrefix.Name"] = modelState;
|
||||
|
||||
// Act
|
||||
var result = helper.DisplayText("Name");
|
||||
|
||||
// Assert
|
||||
Assert.Equal("View data dictionary value", result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DisplayTextFor_IgnoresModelStateEntry()
|
||||
{
|
||||
// Arrange
|
||||
var model = new OverriddenToStringModel("Model value")
|
||||
{
|
||||
Name = "Property value",
|
||||
};
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper(model);
|
||||
var viewData = helper.ViewData;
|
||||
viewData["Name"] = "View data dictionary value";
|
||||
viewData.TemplateInfo.HtmlFieldPrefix = "FieldPrefix";
|
||||
|
||||
var modelState = new ModelState();
|
||||
modelState.Value = new ValueProviderResult(
|
||||
rawValue: new string[] { "Attempted name value" },
|
||||
attemptedValue: "Attempted name value",
|
||||
culture: CultureInfo.InvariantCulture);
|
||||
viewData.ModelState["FieldPrefix.Name"] = modelState;
|
||||
|
||||
// Act
|
||||
var result = helper.DisplayTextFor(m => m.Name);
|
||||
|
||||
// Assert
|
||||
Assert.Equal("Property value", result);
|
||||
}
|
||||
|
||||
// ModelMetadata.SimpleDisplayText returns ToString() result if that method has been overridden.
|
||||
private sealed class OverriddenToStringModel
|
||||
{
|
||||
private readonly string _simpleDisplayText;
|
||||
|
||||
public OverriddenToStringModel(string simpleDisplayText)
|
||||
{
|
||||
_simpleDisplayText = simpleDisplayText;
|
||||
}
|
||||
|
||||
public string Name { get; set; }
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return _simpleDisplayText;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,169 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using Microsoft.AspNet.Testing;
|
||||
using Microsoft.AspNet.Mvc.ModelBinding;
|
||||
using Microsoft.AspNet.Mvc.Rendering;
|
||||
using Moq;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNet.Mvc.Core
|
||||
{
|
||||
/// <summary>
|
||||
/// Test the <see cref="HtmlHelperValueExtensions" /> class.
|
||||
/// </summary>
|
||||
public class HtmlHelperValueExtensionsTest
|
||||
{
|
||||
// Value
|
||||
|
||||
[Fact]
|
||||
public void ValueGetsValueFromViewData()
|
||||
{
|
||||
// Arrange
|
||||
var helper = GetHtmlHelper();
|
||||
|
||||
// Act
|
||||
var html = helper.Value("StringProperty");
|
||||
|
||||
// Assert
|
||||
Assert.Equal("ViewDataValue", html);
|
||||
}
|
||||
|
||||
// ValueFor
|
||||
|
||||
[Fact]
|
||||
public void ValueForGetsExpressionValueFromViewDataModel()
|
||||
{
|
||||
// Arrange
|
||||
var helper = GetHtmlHelper();
|
||||
|
||||
// Act
|
||||
var html = helper.ValueFor(m => m.StringProperty);
|
||||
|
||||
// Assert
|
||||
Assert.Equal("ModelStringPropertyValue", html);
|
||||
}
|
||||
|
||||
// All Value Helpers including ValueForModel
|
||||
|
||||
[Fact]
|
||||
public void ValueHelpersWithErrorsGetValueFromModelState()
|
||||
{
|
||||
// Arrange
|
||||
var model = new TestModel()
|
||||
{
|
||||
StringProperty = "ModelStringPropertyValue",
|
||||
ObjectProperty = "ModelObjectPropertyValue",
|
||||
};
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper<TestModel>(model);
|
||||
var viewData = helper.ViewData;
|
||||
viewData["StringProperty"] = "ViewDataValue";
|
||||
viewData.TemplateInfo.HtmlFieldPrefix = "FieldPrefix";
|
||||
|
||||
var modelState = new ModelState();
|
||||
modelState.Value = new ValueProviderResult(
|
||||
rawValue: new string[] { "StringPropertyRawValue" },
|
||||
attemptedValue: "StringPropertyAttemptedValue",
|
||||
culture: CultureInfo.InvariantCulture);
|
||||
viewData.ModelState["FieldPrefix.StringProperty"] = modelState;
|
||||
|
||||
modelState = new ModelState();
|
||||
modelState.Value = new ValueProviderResult(
|
||||
rawValue: new string[] { "ModelRawValue" },
|
||||
attemptedValue: "ModelAttemptedValue",
|
||||
culture: CultureInfo.InvariantCulture);
|
||||
viewData.ModelState["FieldPrefix"] = modelState;
|
||||
|
||||
// Act & Assert
|
||||
Assert.Equal("StringPropertyRawValue", helper.Value("StringProperty"));
|
||||
Assert.Equal("StringPropertyRawValue", helper.ValueFor(m => m.StringProperty));
|
||||
Assert.Equal("ModelRawValue", helper.ValueForModel());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[ReplaceCulture]
|
||||
public void ValueHelpersWithEmptyNameConvertModelValueUsingCurrentCulture()
|
||||
{
|
||||
// Arrange
|
||||
var helper = GetHtmlHelper();
|
||||
var expectedModelValue =
|
||||
"{ StringProperty = ModelStringPropertyValue, ObjectProperty = 01/01/1900 00:00:00 }";
|
||||
|
||||
// Act & Assert
|
||||
Assert.Equal(expectedModelValue, helper.Value(name: string.Empty));
|
||||
Assert.Equal(expectedModelValue, helper.ValueFor(m => m));
|
||||
Assert.Equal(expectedModelValue, helper.ValueForModel());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[ReplaceCulture]
|
||||
public void ValueHelpersFormatValue()
|
||||
{
|
||||
// Arrange
|
||||
var helper = GetHtmlHelper();
|
||||
var expectedModelValue =
|
||||
"-{ StringProperty = ModelStringPropertyValue, ObjectProperty = 01/01/1900 00:00:00 }-";
|
||||
var expectedObjectPropertyValue = "-01/01/1900 00:00:00-";
|
||||
|
||||
// Act & Assert
|
||||
Assert.Equal(expectedModelValue, helper.ValueForModel("-{0}-"));
|
||||
Assert.Equal(expectedObjectPropertyValue, helper.Value("ObjectProperty", "-{0}-"));
|
||||
Assert.Equal(expectedObjectPropertyValue, helper.ValueFor(m => m.ObjectProperty, "-{0}-"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ValueHelpersDoNotEncodeValue()
|
||||
{
|
||||
// Arrange
|
||||
var model = new TestModel { StringProperty = "ModelStringPropertyValue <\"\">" };
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper<TestModel>(model);
|
||||
var viewData = helper.ViewData;
|
||||
viewData["StringProperty"] = "ViewDataValue <\"\">";
|
||||
|
||||
var modelState = new ModelState();
|
||||
modelState.Value = new ValueProviderResult(
|
||||
rawValue: new string[] { "ObjectPropertyRawValue <\"\">" },
|
||||
attemptedValue: "ObjectPropertyAttemptedValue <\"\">",
|
||||
culture: CultureInfo.InvariantCulture);
|
||||
viewData.ModelState["ObjectProperty"] = modelState;
|
||||
|
||||
// Act & Assert
|
||||
Assert.Equal(
|
||||
"<{ StringProperty = ModelStringPropertyValue <\"\">, ObjectProperty = (null) }>",
|
||||
helper.ValueForModel("<{0}>"));
|
||||
Assert.Equal("<ViewDataValue <\"\">>", helper.Value("StringProperty", "<{0}>"));
|
||||
Assert.Equal("<ModelStringPropertyValue <\"\">>", helper.ValueFor(m => m.StringProperty, "<{0}>"));
|
||||
Assert.Equal("ObjectPropertyRawValue <\"\">", helper.ValueFor(m => m.ObjectProperty));
|
||||
}
|
||||
|
||||
private sealed class TestModel
|
||||
{
|
||||
public string StringProperty { get; set; }
|
||||
public object ObjectProperty { get; set; }
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format(
|
||||
"{{ StringProperty = {0}, ObjectProperty = {1} }}",
|
||||
StringProperty ?? "(null)",
|
||||
ObjectProperty ?? "(null)");
|
||||
}
|
||||
}
|
||||
|
||||
private static HtmlHelper<TestModel> GetHtmlHelper()
|
||||
{
|
||||
var model = new TestModel
|
||||
{
|
||||
StringProperty = "ModelStringPropertyValue",
|
||||
ObjectProperty = new DateTime(1900, 1, 1, 0, 0, 0),
|
||||
};
|
||||
var helper = DefaultTemplatesUtilities.GetHtmlHelper<TestModel>(model);
|
||||
helper.ViewData["StringProperty"] = "ViewDataValue";
|
||||
|
||||
return helper;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue