a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
167 lines
6.4 KiB
C#
167 lines
6.4 KiB
C#
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
|
|
|
|
using System.Web.Mvc.Test;
|
|
using Microsoft.Web.UnitTestUtil;
|
|
using Xunit;
|
|
using Assert = Microsoft.TestCommon.AssertEx;
|
|
|
|
namespace System.Web.Mvc.Html.Test
|
|
{
|
|
public class ValueExtensionsTest
|
|
{
|
|
// Value
|
|
|
|
[Fact]
|
|
public void ValueWithNullNameThrows()
|
|
{
|
|
// Arrange
|
|
HtmlHelper<FooBarModel> helper = MvcHelper.GetHtmlHelper(GetValueViewData());
|
|
|
|
// Act & Assert
|
|
Assert.ThrowsArgumentNull(
|
|
() => helper.Value(name: null),
|
|
"name"
|
|
);
|
|
}
|
|
|
|
[Fact]
|
|
public void ValueGetsValueFromViewData()
|
|
{
|
|
// Arrange
|
|
HtmlHelper<FooBarModel> helper = MvcHelper.GetHtmlHelper(GetValueViewData());
|
|
|
|
// Act
|
|
MvcHtmlString html = helper.Value("foo");
|
|
|
|
// Assert
|
|
Assert.Equal("ViewDataFoo", html.ToHtmlString());
|
|
}
|
|
|
|
// ValueFor
|
|
|
|
[Fact]
|
|
public void ValueForWithNullExpressionThrows()
|
|
{
|
|
// Arrange
|
|
HtmlHelper<FooBarModel> helper = MvcHelper.GetHtmlHelper(GetValueViewData());
|
|
|
|
// Act & Assert
|
|
Assert.ThrowsArgumentNull(
|
|
() => helper.ValueFor<FooBarModel, object>(expression: null),
|
|
"expression"
|
|
);
|
|
}
|
|
|
|
[Fact]
|
|
public void ValueForGetsExpressionValueFromViewDataModel()
|
|
{
|
|
// Arrange
|
|
HtmlHelper<FooBarModel> helper = MvcHelper.GetHtmlHelper(GetValueViewData());
|
|
|
|
// Act
|
|
MvcHtmlString html = helper.ValueFor(m => m.foo);
|
|
|
|
// Assert
|
|
Assert.Equal("ViewItemFoo", html.ToHtmlString());
|
|
}
|
|
|
|
// All Value Helpers including ValueForModel
|
|
|
|
[Fact]
|
|
public void ValueHelpersWithErrorsGetValueFromModelState()
|
|
{
|
|
// Arrange
|
|
ViewDataDictionary<FooBarModel> viewDataWithErrors = new ViewDataDictionary<FooBarModel> { { "foo", "ViewDataFoo" } };
|
|
viewDataWithErrors.Model = new FooBarModel() { foo = "ViewItemFoo", bar = "ViewItemBar" };
|
|
viewDataWithErrors.TemplateInfo.HtmlFieldPrefix = "FieldPrefix";
|
|
|
|
ModelState modelStateFoo = new ModelState();
|
|
modelStateFoo.Value = HtmlHelperTest.GetValueProviderResult(new string[] { "AttemptedValueFoo" }, "AttemptedValueFoo");
|
|
viewDataWithErrors.ModelState["FieldPrefix.foo"] = modelStateFoo;
|
|
|
|
ModelState modelStateFooBar = new ModelState();
|
|
modelStateFooBar.Value = HtmlHelperTest.GetValueProviderResult(new string[] { "AttemptedValueFooBar" }, "AttemptedValueFooBar");
|
|
viewDataWithErrors.ModelState["FieldPrefix"] = modelStateFooBar;
|
|
|
|
HtmlHelper<FooBarModel> helper = MvcHelper.GetHtmlHelper(viewDataWithErrors);
|
|
|
|
// Act & Assert
|
|
Assert.Equal("AttemptedValueFoo", helper.Value("foo").ToHtmlString());
|
|
Assert.Equal("AttemptedValueFoo", helper.ValueFor(m => m.foo).ToHtmlString());
|
|
Assert.Equal("AttemptedValueFooBar", helper.ValueForModel().ToHtmlString());
|
|
}
|
|
|
|
[Fact]
|
|
public void ValueHelpersWithEmptyNameConvertModelValueUsingCurrentCulture()
|
|
{
|
|
// Arrange
|
|
HtmlHelper<FooBarModel> helper = MvcHelper.GetHtmlHelper(GetValueViewData());
|
|
string expectedModelValue = "{ foo = ViewItemFoo, bar = 1900/01/01 12:00:00 AM }";
|
|
|
|
// Act & Assert
|
|
using (HtmlHelperTest.ReplaceCulture("en-ZA", "en-US"))
|
|
{
|
|
Assert.Equal(expectedModelValue, helper.Value(name: String.Empty).ToHtmlString());
|
|
Assert.Equal(expectedModelValue, helper.ValueFor(m => m).ToHtmlString());
|
|
Assert.Equal(expectedModelValue, helper.ValueForModel().ToHtmlString());
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void ValueHelpersFormatValue()
|
|
{
|
|
// Arrange
|
|
HtmlHelper<FooBarModel> helper = MvcHelper.GetHtmlHelper(GetValueViewData());
|
|
string expectedModelValue = "-{ foo = ViewItemFoo, bar = 1900/01/01 12:00:00 AM }-";
|
|
string expectedBarValue = "-1900/01/01 12:00:00 AM-";
|
|
|
|
// Act & Assert
|
|
using (HtmlHelperTest.ReplaceCulture("en-ZA", "en-US"))
|
|
{
|
|
Assert.Equal(expectedModelValue, helper.ValueForModel("-{0}-").ToHtmlString());
|
|
Assert.Equal(expectedBarValue, helper.Value("bar", "-{0}-").ToHtmlString());
|
|
Assert.Equal(expectedBarValue, helper.ValueFor(m => m.bar, "-{0}-").ToHtmlString());
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void ValueHelpersEncodeValue()
|
|
{
|
|
// Arrange
|
|
ViewDataDictionary<FooBarModel> viewData = new ViewDataDictionary<FooBarModel> { { "foo", @"ViewDataFoo <"">" } };
|
|
viewData.Model = new FooBarModel { foo = @"ViewItemFoo <"">" };
|
|
|
|
ModelState modelStateFoo = new ModelState();
|
|
modelStateFoo.Value = HtmlHelperTest.GetValueProviderResult(new string[] { @"AttemptedValueBar <"">" }, @"AttemptedValueBar <"">");
|
|
viewData.ModelState["bar"] = modelStateFoo;
|
|
|
|
HtmlHelper<FooBarModel> helper = MvcHelper.GetHtmlHelper(viewData);
|
|
|
|
// Act & Assert
|
|
Assert.Equal("<{ foo = ViewItemFoo <">, bar = (null) }", helper.ValueForModel("<{0}").ToHtmlString());
|
|
Assert.Equal("<ViewDataFoo <">", helper.Value("foo", "<{0}").ToHtmlString());
|
|
Assert.Equal("<ViewItemFoo <">", helper.ValueFor(m => m.foo, "<{0}").ToHtmlString());
|
|
Assert.Equal("AttemptedValueBar <">", helper.ValueFor(m => m.bar).ToHtmlString());
|
|
}
|
|
|
|
private sealed class FooBarModel
|
|
{
|
|
public string foo { get; set; }
|
|
public object bar { get; set; }
|
|
|
|
public override string ToString()
|
|
{
|
|
return String.Format("{{ foo = {0}, bar = {1} }}", foo ?? "(null)", bar ?? "(null)");
|
|
}
|
|
}
|
|
|
|
private static ViewDataDictionary<FooBarModel> GetValueViewData()
|
|
{
|
|
ViewDataDictionary<FooBarModel> viewData = new ViewDataDictionary<FooBarModel> { { "foo", "ViewDataFoo" } };
|
|
viewData.Model = new FooBarModel { foo = "ViewItemFoo", bar = new DateTime(1900, 1, 1, 0, 0, 0) };
|
|
|
|
return viewData;
|
|
}
|
|
}
|
|
}
|