You've already forked linux-packaging-mono
acceptance-tests
data
debian
docs
external
Newtonsoft.Json
api-doc-tools
api-snapshot
aspnetwebstack
packages
src
test
Microsoft.TestCommon
Microsoft.Web.Helpers.Test
Microsoft.Web.Http.Data.Test
Microsoft.Web.Mvc.Test
Microsoft.Web.WebPages.OAuth.Test
SPA.Test
System.Json.Test.Integration
System.Json.Test.Unit
System.Net.Http.Formatting.Test.Integration
System.Net.Http.Formatting.Test.Unit
System.Web.Helpers.Test
System.Web.Http.Integration.Test
System.Web.Http.SelfHost.Test
System.Web.Http.Test
System.Web.Http.WebHost.Test
System.Web.Mvc.Test
Ajax
Async
ExpressionUtil
Html
Test
ChildActionExtensionsTest.cs
DefaultDisplayTemplatesTest.cs
DefaultEditorTemplatesTest.cs
DisplayNameExtensionsTest.cs
FormExtensionsTest.cs
InputExtensionsTest.cs
LabelExtensionsTest.cs
LinkExtensionsTest.cs
MvcFormTest.cs
NameExtensionsTest.cs
PartialExtensionsTest.cs
RenderPartialExtensionsTest.cs
SelectExtensionsTest.cs
TemplateHelpersTest.cs
TextAreaExtensionsTest.cs
ValidationExtensionsTest.cs
ValueExtensionsTest.cs
Properties
Razor
Test
Util
System.Web.Mvc.Test.csproj
packages.config
System.Web.Razor.Test
System.Web.WebPages.Administration.Test
System.Web.WebPages.Deployment.Test
System.Web.WebPages.Razor.Test
System.Web.WebPages.Test
WebMatrix.Data.Test
WebMatrix.WebData.Test
Settings.StyleCop
tools
.gitattributes
.gitignore
License.txt
README.md
Runtime.msbuild
Runtime.sln
Runtime.xunit
Settings.StyleCop
build.cmd
binary-reference-assemblies
bockbuild
boringssl
cecil
cecil-legacy
corefx
corert
ikdasm
ikvm
linker
nuget-buildtasks
nunit-lite
roslyn-binaries
rx
xunit-binaries
ikvm-native
libgc
llvm
m4
man
mcs
mono
msvc
po
runtime
samples
scripts
support
tools
COPYING.LIB
LICENSE
Makefile.am
Makefile.in
NEWS
README.md
acinclude.m4
aclocal.m4
autogen.sh
code_of_conduct.md
compile
config.guess
config.h.in
config.rpath
config.sub
configure.REMOVED.git-id
configure.ac.REMOVED.git-id
depcomp
install-sh
ltmain.sh.REMOVED.git-id
missing
mkinstalldirs
mono-uninstalled.pc.in
test-driver
winconfig.h
1860 lines
71 KiB
C#
1860 lines
71 KiB
C#
![]() |
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
|
|||
|
|
|||
|
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.ComponentModel.DataAnnotations;
|
|||
|
using System.Globalization;
|
|||
|
using System.Linq;
|
|||
|
using System.Web.Mvc.Test;
|
|||
|
using Microsoft.Web.UnitTestUtil;
|
|||
|
using Xunit;
|
|||
|
using Assert = Microsoft.TestCommon.AssertEx;
|
|||
|
|
|||
|
namespace System.Web.Mvc.Html.Test
|
|||
|
{
|
|||
|
public class SelectExtensionsTest
|
|||
|
{
|
|||
|
private static readonly ViewDataDictionary<FooModel> _listBoxViewData = new ViewDataDictionary<FooModel> { { "foo", new[] { "Bravo" } } };
|
|||
|
private static readonly ViewDataDictionary<FooModel> _dropDownListViewData = new ViewDataDictionary<FooModel> { { "foo", "Bravo" } };
|
|||
|
private static readonly ViewDataDictionary<NonIEnumerableModel> _nonIEnumerableViewData = new ViewDataDictionary<NonIEnumerableModel> { { "foo", 1 } };
|
|||
|
|
|||
|
private static ViewDataDictionary GetViewDataWithSelectList()
|
|||
|
{
|
|||
|
ViewDataDictionary viewData = new ViewDataDictionary();
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleAnonymousObjects(), "Letter", "FullWord", "C");
|
|||
|
viewData["foo"] = selectList;
|
|||
|
viewData["foo.bar"] = selectList;
|
|||
|
return viewData;
|
|||
|
}
|
|||
|
|
|||
|
// DropDownList
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListUsesExplicitValueIfNotProvidedInViewData()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary());
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleAnonymousObjects(), "Letter", "FullWord", "C");
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo", selectList, (string)null /* optionLabel */);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" name=""foo""><option value=""A"">Alpha</option>
|
|||
|
<option value=""B"">Bravo</option>
|
|||
|
<option selected=""selected"" value=""C"">Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListUsesExplicitValueIfNotProvidedInViewData_Unobtrusive()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary());
|
|||
|
helper.ViewContext.ClientValidationEnabled = true;
|
|||
|
helper.ViewContext.UnobtrusiveJavaScriptEnabled = true;
|
|||
|
helper.ViewContext.FormContext = new FormContext();
|
|||
|
helper.ClientValidationRuleFactory = (name, metadata) => new[] { new ModelClientValidationRule { ValidationType = "type", ErrorMessage = "error" } };
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleAnonymousObjects(), "Letter", "FullWord", "C");
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo", selectList, (string)null /* optionLabel */);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select data-val=""true"" data-val-type=""error"" id=""foo"" name=""foo""><option value=""A"">Alpha</option>
|
|||
|
<option value=""B"">Bravo</option>
|
|||
|
<option selected=""selected"" value=""C"">Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListUsesViewDataDefaultValue()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(_dropDownListViewData);
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings(), "Charlie");
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo", selectList, (string)null /* optionLabel */);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" name=""foo""><option>Alpha</option>
|
|||
|
<option selected=""selected"">Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListUsesViewDataDefaultValueNoOptionLabel()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(_dropDownListViewData);
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings(), "Charlie");
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo", selectList);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" name=""foo""><option>Alpha</option>
|
|||
|
<option selected=""selected"">Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListWithAttributesDictionary()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary());
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo", selectList, null /* optionLabel */, HtmlHelperTest.AttributesDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazValue"" id=""foo"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListWithEmptyNameThrows()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary());
|
|||
|
|
|||
|
// Act & Assert
|
|||
|
Assert.ThrowsArgumentNullOrEmpty(
|
|||
|
delegate { helper.DropDownList(String.Empty, (SelectList)null /* selectList */, (string)null /* optionLabel */); },
|
|||
|
"name");
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListWithErrors()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings(), new[] { "Charlie" });
|
|||
|
ViewDataDictionary viewData = GetViewDataWithErrors();
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(viewData);
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo", selectList, null /* optionLabel */, HtmlHelperTest.AttributesObjectDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazObjValue"" class=""input-validation-error"" id=""foo"" name=""foo""><option>Alpha</option>
|
|||
|
<option selected=""selected"">Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListWithErrorsAndCustomClass()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
ViewDataDictionary viewData = GetViewDataWithErrors();
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(viewData);
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo", selectList, null /* optionLabel */, new { @class = "foo-class" });
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select class=""input-validation-error foo-class"" id=""foo"" name=""foo""><option>Alpha</option>
|
|||
|
<option selected=""selected"">Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListWithNullNameThrows()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary());
|
|||
|
|
|||
|
// Act & Assert
|
|||
|
Assert.ThrowsArgumentNullOrEmpty(
|
|||
|
delegate { helper.DropDownList(null /* name */, (SelectList)null /* selectList */, (string)null /* optionLabel */); },
|
|||
|
"name");
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListWithNullSelectListUsesViewData()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper();
|
|||
|
helper.ViewData["foo"] = new MultiSelectList(MultiSelectListTest.GetSampleStrings(), new[] { "Charlie" });
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo");
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option selected=""selected"">Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListWithObjectDictionary()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
ViewDataDictionary viewData = new ViewDataDictionary();
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(viewData);
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo", selectList, null /* optionLabel */, HtmlHelperTest.AttributesObjectDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazObjValue"" id=""foo"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListWithObjectDictionaryWithUnderscores()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
ViewDataDictionary viewData = new ViewDataDictionary();
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(viewData);
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo", selectList, null /* optionLabel */, HtmlHelperTest.AttributesObjectUnderscoresDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select foo-baz=""BazObjValue"" id=""foo"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListWithObjectDictionaryAndSelectList()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary());
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo", selectList, null /* optionLabel */, HtmlHelperTest.AttributesObjectDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazObjValue"" id=""foo"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListWithObjectDictionaryAndSelectListNoOptionLabel()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary());
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo", selectList, HtmlHelperTest.AttributesObjectDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazObjValue"" id=""foo"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListWithObjectDictionaryWithUnderscoresAndSelectListNoOptionLabel()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary());
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo", selectList, HtmlHelperTest.AttributesObjectUnderscoresDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select foo-baz=""BazObjValue"" id=""foo"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListWithObjectDictionaryAndEmptyOptionLabel()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary());
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo", selectList, String.Empty /* optionLabel */, HtmlHelperTest.AttributesObjectDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazObjValue"" id=""foo"" name=""foo""><option value=""""></option>
|
|||
|
<option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListWithObjectDictionaryAndTitle()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary());
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo", selectList, "[Select Something]", HtmlHelperTest.AttributesObjectDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazObjValue"" id=""foo"" name=""foo""><option value="""">[Select Something]</option>
|
|||
|
<option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListUsesViewDataSelectList()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(GetViewDataWithSelectList());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo", (string)null /* optionLabel */);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" name=""foo""><option value=""A"">Alpha</option>
|
|||
|
<option value=""B"">Bravo</option>
|
|||
|
<option selected=""selected"" value=""C"">Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListUsesModelState()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
ViewDataDictionary viewData = GetViewDataWithErrors();
|
|||
|
viewData["foo"] = selectList;
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(viewData);
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo");
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select class=""input-validation-error"" id=""foo"" name=""foo""><option>Alpha</option>
|
|||
|
<option selected=""selected"">Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListUsesViewDataSelectListNoOptionLabel()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(GetViewDataWithSelectList());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo");
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" name=""foo""><option value=""A"">Alpha</option>
|
|||
|
<option value=""B"">Bravo</option>
|
|||
|
<option selected=""selected"" value=""C"">Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListWithDotReplacementForId()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(GetViewDataWithSelectList());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo.bar");
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo_bar"" name=""foo.bar""><option value=""A"">Alpha</option>
|
|||
|
<option value=""B"">Bravo</option>
|
|||
|
<option selected=""selected"" value=""C"">Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListWithIEnumerableSelectListItem()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
ViewDataDictionary vdd = new ViewDataDictionary { { "foo", MultiSelectListTest.GetSampleIEnumerableObjects() } };
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(vdd);
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo");
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" name=""foo""><option value=""123456789"">John</option>
|
|||
|
<option value=""987654321"">Jane</option>
|
|||
|
<option selected=""selected"" value=""111111111"">Joe</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListWithIEnumerableSelectListItemSelectsDefaultFromViewData()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
ViewDataDictionary vdd = new ViewDataDictionary { { "foo", "123456789" } };
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(vdd);
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo", MultiSelectListTest.GetSampleIEnumerableObjects());
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" name=""foo""><option selected=""selected"" value=""123456789"">John</option>
|
|||
|
<option value=""987654321"">Jane</option>
|
|||
|
<option value=""111111111"">Joe</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListWithListOfSelectListItemSelectsDefaultFromViewData()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
ViewDataDictionary vdd = new ViewDataDictionary { { "foo", "123456789" } };
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(vdd);
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo", MultiSelectListTest.GetSampleListObjects());
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" name=""foo""><option selected=""selected"" value=""123456789"">John</option>
|
|||
|
<option value=""987654321"">Jane</option>
|
|||
|
<option value=""111111111"">Joe</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListWithListOfSelectListItem()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
ViewDataDictionary vdd = new ViewDataDictionary { { "foo", MultiSelectListTest.GetSampleListObjects() } };
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(vdd);
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo");
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" name=""foo""><option value=""123456789"">John</option>
|
|||
|
<option value=""987654321"">Jane</option>
|
|||
|
<option selected=""selected"" value=""111111111"">Joe</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListWithNullViewDataValueThrows()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary());
|
|||
|
|
|||
|
// Act
|
|||
|
Assert.Throws<InvalidOperationException>(
|
|||
|
delegate { helper.DropDownList("foo", (string)null /* optionLabel */); },
|
|||
|
"There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'foo'.");
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListWithWrongViewDataTypeValueThrows()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary { { "foo", 123 } });
|
|||
|
|
|||
|
// Act
|
|||
|
Assert.Throws<InvalidOperationException>(
|
|||
|
delegate { helper.DropDownList("foo", (string)null /* optionLabel */); },
|
|||
|
"The ViewData item that has the key 'foo' is of type 'System.Int32' but must be of type 'IEnumerable<SelectListItem>'.");
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListWithPrefix()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary());
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo", selectList, HtmlHelperTest.AttributesObjectDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazObjValue"" id=""MyPrefix_foo"" name=""MyPrefix.foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListWithPrefixAndEmptyName()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary());
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("", selectList, HtmlHelperTest.AttributesObjectDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazObjValue"" id=""MyPrefix"" name=""MyPrefix""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListWithPrefixAndNullSelectListUsesViewData()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper();
|
|||
|
helper.ViewData["foo"] = new MultiSelectList(MultiSelectListTest.GetSampleStrings(), new[] { "Charlie" });
|
|||
|
helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownList("foo");
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""MyPrefix_foo"" name=""MyPrefix.foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option selected=""selected"">Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
// DropDownListFor
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListForWithNullExpressionThrows()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<object> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<object>());
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleAnonymousObjects(), "Letter", "FullWord", "C");
|
|||
|
|
|||
|
// Act & Assert
|
|||
|
Assert.ThrowsArgumentNull(
|
|||
|
() => helper.DropDownListFor<object, object>(null /* expression */, selectList),
|
|||
|
"expression"
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListForUsesExplicitValueIfNotProvidedInViewData()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<FooModel>());
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleAnonymousObjects(), "Letter", "FullWord", "C");
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownListFor(m => m.foo, selectList, (string)null /* optionLabel */);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" name=""foo""><option value=""A"">Alpha</option>
|
|||
|
<option value=""B"">Bravo</option>
|
|||
|
<option selected=""selected"" value=""C"">Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListForUsesExplicitValueIfNotProvidedInViewData_Unobtrusive()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<FooModel>());
|
|||
|
helper.ViewContext.ClientValidationEnabled = true;
|
|||
|
helper.ViewContext.UnobtrusiveJavaScriptEnabled = true;
|
|||
|
helper.ViewContext.FormContext = new FormContext();
|
|||
|
helper.ClientValidationRuleFactory = (name, metadata) => new[] { new ModelClientValidationRule { ValidationType = "type", ErrorMessage = "error" } };
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleAnonymousObjects(), "Letter", "FullWord", "C");
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownListFor(m => m.foo, selectList, (string)null /* optionLabel */);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select data-val=""true"" data-val-type=""error"" id=""foo"" name=""foo""><option value=""A"">Alpha</option>
|
|||
|
<option value=""B"">Bravo</option>
|
|||
|
<option selected=""selected"" value=""C"">Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListForWithEnumerableModel_Unobtrusive()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<IEnumerable<RequiredModel>> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<IEnumerable<RequiredModel>>());
|
|||
|
helper.ViewContext.ClientValidationEnabled = true;
|
|||
|
helper.ViewContext.UnobtrusiveJavaScriptEnabled = true;
|
|||
|
helper.ViewContext.FormContext = new FormContext();
|
|||
|
helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
|
|||
|
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleAnonymousObjects(), "Letter", "FullWord", "C");
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownListFor(m => m.ElementAt(0).foo, selectList);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select data-val=""true"" data-val-required=""The foo field is required."" id=""MyPrefix_foo"" name=""MyPrefix.foo""><option value=""A"">Alpha</option>
|
|||
|
<option value=""B"">Bravo</option>
|
|||
|
<option selected=""selected"" value=""C"">Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListForUsesViewDataDefaultValue()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(_dropDownListViewData);
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings(), "Charlie");
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownListFor(m => m.foo, selectList, (string)null /* optionLabel */);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" name=""foo""><option>Alpha</option>
|
|||
|
<option selected=""selected"">Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListForUsesViewDataDefaultValueNoOptionLabel()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(_dropDownListViewData);
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings(), "Charlie");
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownListFor(m => m.foo, selectList);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" name=""foo""><option>Alpha</option>
|
|||
|
<option selected=""selected"">Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListForWithAttributesDictionary()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<FooModel>());
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownListFor(m => m.foo, selectList, null /* optionLabel */, HtmlHelperTest.AttributesDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazValue"" id=""foo"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListForWithErrors()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooBarModel> helper = MvcHelper.GetHtmlHelper(GetViewDataWithErrors());
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings(), new[] { "Charlie" });
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownListFor(m => m.foo, selectList, null /* optionLabel */, HtmlHelperTest.AttributesObjectDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazObjValue"" class=""input-validation-error"" id=""foo"" name=""foo""><option>Alpha</option>
|
|||
|
<option selected=""selected"">Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListForWithErrorsAndCustomClass()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooBarModel> helper = MvcHelper.GetHtmlHelper(GetViewDataWithErrors());
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownListFor(m => m.foo, selectList, null /* optionLabel */, new { @class = "foo-class" });
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select class=""input-validation-error foo-class"" id=""foo"" name=""foo""><option>Alpha</option>
|
|||
|
<option selected=""selected"">Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListForWithObjectDictionary()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<FooModel>());
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownListFor(m => m.foo, selectList, null /* optionLabel */, HtmlHelperTest.AttributesObjectDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazObjValue"" id=""foo"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListForWithObjectDictionaryWithUnderscores()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<FooModel>());
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownListFor(m => m.foo, selectList, null /* optionLabel */, HtmlHelperTest.AttributesObjectUnderscoresDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select foo-baz=""BazObjValue"" id=""foo"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListForWithObjectDictionaryAndSelectListNoOptionLabel()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<FooModel>());
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownListFor(m => m.foo, selectList, HtmlHelperTest.AttributesObjectDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazObjValue"" id=""foo"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListForWithObjectDictionaryWithUnderscoresAndSelectListNoOptionLabel()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<FooModel>());
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownListFor(m => m.foo, selectList, HtmlHelperTest.AttributesObjectUnderscoresDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select foo-baz=""BazObjValue"" id=""foo"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListForWithObjectDictionaryAndEmptyOptionLabel()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<FooModel>());
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownListFor(m => m.foo, selectList, String.Empty /* optionLabel */, HtmlHelperTest.AttributesObjectDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazObjValue"" id=""foo"" name=""foo""><option value=""""></option>
|
|||
|
<option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListForWithObjectDictionaryAndTitle()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<FooModel>());
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownListFor(m => m.foo, selectList, "[Select Something]", HtmlHelperTest.AttributesObjectDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazObjValue"" id=""foo"" name=""foo""><option value="""">[Select Something]</option>
|
|||
|
<option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListForWithIEnumerableSelectListItemSelectsDefaultFromViewData()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
ViewDataDictionary<FooModel> vdd = new ViewDataDictionary<FooModel> { { "foo", "123456789" } };
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(vdd);
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownListFor(m => m.foo, MultiSelectListTest.GetSampleIEnumerableObjects());
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" name=""foo""><option selected=""selected"" value=""123456789"">John</option>
|
|||
|
<option value=""987654321"">Jane</option>
|
|||
|
<option value=""111111111"">Joe</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListForWithListOfSelectListItemSelectsDefaultFromViewData()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
ViewDataDictionary<FooModel> vdd = new ViewDataDictionary<FooModel> { { "foo", "123456789" } };
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(vdd);
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownListFor(m => m.foo, MultiSelectListTest.GetSampleListObjects());
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" name=""foo""><option selected=""selected"" value=""123456789"">John</option>
|
|||
|
<option value=""987654321"">Jane</option>
|
|||
|
<option value=""111111111"">Joe</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListForWithPrefix()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<FooModel>());
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownListFor(m => m.foo, selectList, HtmlHelperTest.AttributesObjectDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazObjValue"" id=""MyPrefix_foo"" name=""MyPrefix.foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListForWithPrefixAndEmptyName()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<FooModel>());
|
|||
|
SelectList selectList = new SelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownListFor(m => m, selectList, HtmlHelperTest.AttributesObjectDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazObjValue"" id=""MyPrefix"" name=""MyPrefix""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void DropDownListForWithPrefixAndIEnumerableSelectListItemSelectsDefaultFromViewData()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
ViewDataDictionary<FooModel> vdd = new ViewDataDictionary<FooModel> { { "foo", "123456789" } };
|
|||
|
vdd.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(vdd);
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.DropDownListFor(m => m.foo, MultiSelectListTest.GetSampleIEnumerableObjects());
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""MyPrefix_foo"" name=""MyPrefix.foo""><option selected=""selected"" value=""123456789"">John</option>
|
|||
|
<option value=""987654321"">Jane</option>
|
|||
|
<option value=""111111111"">Joe</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
// ListBox
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxUsesExplicitValueIfNotProvidedInViewData()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary());
|
|||
|
MultiSelectList selectList = new MultiSelectList(MultiSelectListTest.GetSampleAnonymousObjects(), "Letter", "FullWord", new[] { "A", "C" });
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBox("foo", selectList);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" multiple=""multiple"" name=""foo""><option selected=""selected"" value=""A"">Alpha</option>
|
|||
|
<option value=""B"">Bravo</option>
|
|||
|
<option selected=""selected"" value=""C"">Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxUsesExplicitValueIfNotProvidedInViewData_Unobtrusive()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary());
|
|||
|
helper.ViewContext.ClientValidationEnabled = true;
|
|||
|
helper.ViewContext.UnobtrusiveJavaScriptEnabled = true;
|
|||
|
helper.ViewContext.FormContext = new FormContext();
|
|||
|
helper.ClientValidationRuleFactory = (name, metadata) => new[] { new ModelClientValidationRule { ValidationType = "type", ErrorMessage = "error" } };
|
|||
|
MultiSelectList selectList = new MultiSelectList(MultiSelectListTest.GetSampleAnonymousObjects(), "Letter", "FullWord", new[] { "A", "C" });
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBox("foo", selectList);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select data-val=""true"" data-val-type=""error"" id=""foo"" multiple=""multiple"" name=""foo""><option selected=""selected"" value=""A"">Alpha</option>
|
|||
|
<option value=""B"">Bravo</option>
|
|||
|
<option selected=""selected"" value=""C"">Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxUsesViewDataDefaultValue()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(_listBoxViewData);
|
|||
|
MultiSelectList selectList = new MultiSelectList(MultiSelectListTest.GetSampleStrings(), new[] { "Charlie" });
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBox("foo", selectList);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" multiple=""multiple"" name=""foo""><option>Alpha</option>
|
|||
|
<option selected=""selected"">Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxWithErrors()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
ViewDataDictionary viewData = GetViewDataWithErrors();
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(viewData);
|
|||
|
MultiSelectList list = new MultiSelectList(MultiSelectListTest.GetSampleStrings(), new[] { "Charlie" });
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBox("foo", list);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select class=""input-validation-error"" id=""foo"" multiple=""multiple"" name=""foo""><option>Alpha</option>
|
|||
|
<option selected=""selected"">Bravo</option>
|
|||
|
<option selected=""selected"">Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxWithErrorsAndCustomClass()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
ViewDataDictionary viewData = GetViewDataWithErrors();
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(viewData);
|
|||
|
MultiSelectList selectList = new MultiSelectList(MultiSelectListTest.GetSampleStrings(), new[] { "Charlie" });
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBox("foo", selectList, new { @class = "foo-class" });
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select class=""input-validation-error foo-class"" id=""foo"" multiple=""multiple"" name=""foo""><option>Alpha</option>
|
|||
|
<option selected=""selected"">Bravo</option>
|
|||
|
<option selected=""selected"">Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxWithNameOnly()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper();
|
|||
|
helper.ViewData["foo"] = new MultiSelectList(MultiSelectListTest.GetSampleStrings(), new[] { "Charlie" });
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBox("foo");
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" multiple=""multiple"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option selected=""selected"">Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxWithAttributesDictionary()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
ViewDataDictionary viewData = new ViewDataDictionary();
|
|||
|
MultiSelectList selectList = new MultiSelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
//viewData["foo"] = selectList;
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(viewData);
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBox("foo", selectList, HtmlHelperTest.AttributesDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazValue"" id=""foo"" multiple=""multiple"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxWithAttributesDictionaryAndMultiSelectList()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary());
|
|||
|
MultiSelectList selectList = new MultiSelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBox("foo", selectList, HtmlHelperTest.AttributesDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazValue"" id=""foo"" multiple=""multiple"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxWithAttributesDictionaryOverridesName()
|
|||
|
{
|
|||
|
// DevDiv Bugs #217602:
|
|||
|
// SelectInternal() should override the user-provided 'name' attribute
|
|||
|
|
|||
|
// Arrange
|
|||
|
ViewDataDictionary viewData = new ViewDataDictionary();
|
|||
|
MultiSelectList selectList = new MultiSelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(viewData);
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBox("foo", selectList, new { myAttr = "myValue", name = "theName" });
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" multiple=""multiple"" myAttr=""myValue"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxWithEmptyNameThrows()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary());
|
|||
|
|
|||
|
// Act & Assert
|
|||
|
Assert.ThrowsArgumentNullOrEmpty(
|
|||
|
delegate { helper.ListBox(String.Empty, (MultiSelectList)null /* selectList */); },
|
|||
|
"name");
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxWithNullNameThrows()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary());
|
|||
|
|
|||
|
// Act & Assert
|
|||
|
Assert.ThrowsArgumentNullOrEmpty(
|
|||
|
delegate { helper.ListBox(null /* name */, (MultiSelectList)null /* selectList */); },
|
|||
|
"name");
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxWithNullSelectListUsesViewData()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper();
|
|||
|
helper.ViewData["foo"] = new MultiSelectList(MultiSelectListTest.GetSampleStrings(), new[] { "Charlie" });
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBox("foo", null);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" multiple=""multiple"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option selected=""selected"">Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxWithObjectDictionary()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary());
|
|||
|
MultiSelectList selectList = new MultiSelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBox("foo", selectList, HtmlHelperTest.AttributesObjectDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazObjValue"" id=""foo"" multiple=""multiple"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxWithObjectDictionaryWithUnderscores()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary());
|
|||
|
MultiSelectList selectList = new MultiSelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBox("foo", selectList, HtmlHelperTest.AttributesObjectUnderscoresDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select foo-baz=""BazObjValue"" id=""foo"" multiple=""multiple"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxWithIEnumerableSelectListItem()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
ViewDataDictionary vdd = new ViewDataDictionary { { "foo", MultiSelectListTest.GetSampleIEnumerableObjects() } };
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(vdd);
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBox("foo");
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" multiple=""multiple"" name=""foo""><option value=""123456789"">John</option>
|
|||
|
<option value=""987654321"">Jane</option>
|
|||
|
<option selected=""selected"" value=""111111111"">Joe</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxThrowsWhenExpressionDoesNotEvaluateToIEnumerable()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
ViewDataDictionary vdd = new ViewDataDictionary { { "foo", 123456789 } };
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(vdd);
|
|||
|
|
|||
|
// Act & Assert
|
|||
|
Assert.Throws<InvalidOperationException>(
|
|||
|
() => helper.ListBox("foo", MultiSelectListTest.GetSampleIEnumerableObjects()),
|
|||
|
@"The parameter 'expression' must evaluate to an IEnumerable when multiple selection is allowed."
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxThrowsWhenExpressionEvaluatesToString()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
ViewDataDictionary vdd = new ViewDataDictionary { { "foo", "123456789" } };
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(vdd);
|
|||
|
|
|||
|
// Act & Assert
|
|||
|
Assert.Throws<InvalidOperationException>(
|
|||
|
() => helper.ListBox("foo", MultiSelectListTest.GetSampleIEnumerableObjects()),
|
|||
|
@"The parameter 'expression' must evaluate to an IEnumerable when multiple selection is allowed."
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxWithListOfSelectListItemSelectsDefaultFromViewData()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
ViewDataDictionary vdd = new ViewDataDictionary { { "foo", new string[] { "123456789", "111111111" } } };
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(vdd);
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBox("foo", MultiSelectListTest.GetSampleListObjects());
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" multiple=""multiple"" name=""foo""><option selected=""selected"" value=""123456789"">John</option>
|
|||
|
<option value=""987654321"">Jane</option>
|
|||
|
<option selected=""selected"" value=""111111111"">Joe</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxWithListOfSelectListItem()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
ViewDataDictionary vdd = new ViewDataDictionary { { "foo", MultiSelectListTest.GetSampleListObjects() } };
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(vdd);
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBox("foo");
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" multiple=""multiple"" name=""foo""><option value=""123456789"">John</option>
|
|||
|
<option value=""987654321"">Jane</option>
|
|||
|
<option selected=""selected"" value=""111111111"">Joe</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxWithPrefix()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary());
|
|||
|
MultiSelectList selectList = new MultiSelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBox("foo", selectList, HtmlHelperTest.AttributesObjectDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazObjValue"" id=""MyPrefix_foo"" multiple=""multiple"" name=""MyPrefix.foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxWithPrefixAndEmptyName()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary());
|
|||
|
MultiSelectList selectList = new MultiSelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBox("", selectList, HtmlHelperTest.AttributesObjectDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazObjValue"" id=""MyPrefix"" multiple=""multiple"" name=""MyPrefix""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxWithPrefixAndNullSelectListUsesViewData()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper();
|
|||
|
helper.ViewData["foo"] = new MultiSelectList(MultiSelectListTest.GetSampleStrings(), new[] { "Charlie" });
|
|||
|
helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBox("foo");
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""MyPrefix_foo"" multiple=""multiple"" name=""MyPrefix.foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option selected=""selected"">Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
// ListBoxFor
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxForWithNullExpressionThrows()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<FooModel>());
|
|||
|
|
|||
|
// Act & Assert
|
|||
|
Assert.ThrowsArgumentNull(
|
|||
|
() => helper.ListBoxFor<FooModel, object>(null, null),
|
|||
|
"expression");
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxForUsesExplicitValueIfNotProvidedInViewData()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<FooModel>());
|
|||
|
MultiSelectList selectList = new MultiSelectList(MultiSelectListTest.GetSampleAnonymousObjects(), "Letter", "FullWord", new[] { "A", "C" });
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBoxFor(m => m.foo, selectList);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" multiple=""multiple"" name=""foo""><option selected=""selected"" value=""A"">Alpha</option>
|
|||
|
<option value=""B"">Bravo</option>
|
|||
|
<option selected=""selected"" value=""C"">Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxForUsesExplicitValueIfNotProvidedInViewData_Unobtrusive()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<FooModel>());
|
|||
|
helper.ViewContext.ClientValidationEnabled = true;
|
|||
|
helper.ViewContext.UnobtrusiveJavaScriptEnabled = true;
|
|||
|
helper.ViewContext.FormContext = new FormContext();
|
|||
|
helper.ClientValidationRuleFactory = (name, metadata) => new[] { new ModelClientValidationRule { ValidationType = "type", ErrorMessage = "error" } };
|
|||
|
MultiSelectList selectList = new MultiSelectList(MultiSelectListTest.GetSampleAnonymousObjects(), "Letter", "FullWord", new[] { "A", "C" });
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBoxFor(m => m.foo, selectList);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select data-val=""true"" data-val-type=""error"" id=""foo"" multiple=""multiple"" name=""foo""><option selected=""selected"" value=""A"">Alpha</option>
|
|||
|
<option value=""B"">Bravo</option>
|
|||
|
<option selected=""selected"" value=""C"">Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxForWithEnumerableModel_Unobtrusive()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<IEnumerable<RequiredModel>> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<IEnumerable<RequiredModel>>());
|
|||
|
helper.ViewContext.ClientValidationEnabled = true;
|
|||
|
helper.ViewContext.UnobtrusiveJavaScriptEnabled = true;
|
|||
|
helper.ViewContext.FormContext = new FormContext();
|
|||
|
helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
|
|||
|
|
|||
|
MultiSelectList selectList = new MultiSelectList(MultiSelectListTest.GetSampleAnonymousObjects(), "Letter", "FullWord", "C");
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBoxFor(m => m.ElementAt(0).foo, selectList);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select data-val=""true"" data-val-required=""The foo field is required."" id=""MyPrefix_foo"" multiple=""multiple"" name=""MyPrefix.foo""><option value=""A"">Alpha</option>
|
|||
|
<option value=""B"">Bravo</option>
|
|||
|
<option selected=""selected"" value=""C"">Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxForUsesViewDataDefaultValue()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(_listBoxViewData);
|
|||
|
MultiSelectList selectList = new MultiSelectList(MultiSelectListTest.GetSampleStrings(), new[] { "Charlie" });
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBoxFor(m => m.foo, selectList);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" multiple=""multiple"" name=""foo""><option>Alpha</option>
|
|||
|
<option selected=""selected"">Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxForWithErrors()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooBarModel> helper = MvcHelper.GetHtmlHelper(GetViewDataWithErrors());
|
|||
|
MultiSelectList list = new MultiSelectList(MultiSelectListTest.GetSampleStrings(), new[] { "Charlie" });
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBoxFor(m => m.foo, list);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select class=""input-validation-error"" id=""foo"" multiple=""multiple"" name=""foo""><option>Alpha</option>
|
|||
|
<option selected=""selected"">Bravo</option>
|
|||
|
<option selected=""selected"">Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxForWithErrorsAndCustomClass()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooBarModel> helper = MvcHelper.GetHtmlHelper(GetViewDataWithErrors());
|
|||
|
MultiSelectList selectList = new MultiSelectList(MultiSelectListTest.GetSampleStrings(), new[] { "Charlie" });
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBoxFor(m => m.foo, selectList, new { @class = "foo-class" });
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select class=""input-validation-error foo-class"" id=""foo"" multiple=""multiple"" name=""foo""><option>Alpha</option>
|
|||
|
<option selected=""selected"">Bravo</option>
|
|||
|
<option selected=""selected"">Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxForWithAttributesDictionary()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
MultiSelectList selectList = new MultiSelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<FooModel>());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBoxFor(m => m.foo, selectList, HtmlHelperTest.AttributesDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazValue"" id=""foo"" multiple=""multiple"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxForWithAttributesDictionaryOverridesName()
|
|||
|
{
|
|||
|
// DevDiv Bugs #217602:
|
|||
|
// SelectInternal() should override the user-provided 'name' attribute
|
|||
|
|
|||
|
// Arrange
|
|||
|
MultiSelectList selectList = new MultiSelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<FooModel>());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBoxFor(m => m.foo, selectList, new { myAttr = "myValue", name = "theName" });
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" multiple=""multiple"" myAttr=""myValue"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxForWithNullSelectListUsesViewData()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<FooModel>());
|
|||
|
helper.ViewContext.ViewData["foo"] = new MultiSelectList(MultiSelectListTest.GetSampleStrings(), new[] { "Charlie" });
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBoxFor(m => m.foo, null);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" multiple=""multiple"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option selected=""selected"">Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxForWithObjectDictionary()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<FooModel>());
|
|||
|
MultiSelectList selectList = new MultiSelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBoxFor(m => m.foo, selectList, HtmlHelperTest.AttributesObjectDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazObjValue"" id=""foo"" multiple=""multiple"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxForWithObjectDictionaryWithUnderscores()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<FooModel>());
|
|||
|
MultiSelectList selectList = new MultiSelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBoxFor(m => m.foo, selectList, HtmlHelperTest.AttributesObjectUnderscoresDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select foo-baz=""BazObjValue"" id=""foo"" multiple=""multiple"" name=""foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxForWithIEnumerableSelectListItem()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
ViewDataDictionary<FooModel> vdd = new ViewDataDictionary<FooModel> { { "foo", MultiSelectListTest.GetSampleIEnumerableObjects() } };
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(vdd);
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBoxFor(m => m.foo, null);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" multiple=""multiple"" name=""foo""><option value=""123456789"">John</option>
|
|||
|
<option value=""987654321"">Jane</option>
|
|||
|
<option selected=""selected"" value=""111111111"">Joe</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxForThrowsWhenExpressionDoesNotEvaluateToIEnumerable()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
ViewDataDictionary<NonIEnumerableModel> vdd = new ViewDataDictionary<NonIEnumerableModel> { { "foo", 123456789 } };
|
|||
|
HtmlHelper<NonIEnumerableModel> helper = MvcHelper.GetHtmlHelper(vdd);
|
|||
|
|
|||
|
// Act & Assert
|
|||
|
Assert.Throws<InvalidOperationException>(
|
|||
|
() => helper.ListBoxFor(m => m.foo, MultiSelectListTest.GetSampleIEnumerableObjects()),
|
|||
|
@"The parameter 'expression' must evaluate to an IEnumerable when multiple selection is allowed."
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxForThrowsWhenExpressionEvaluatesToString()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
ViewDataDictionary<FooModel> vdd = new ViewDataDictionary<FooModel> { { "foo", "123456789" } };
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(vdd);
|
|||
|
|
|||
|
// Act & Assert
|
|||
|
Assert.Throws<InvalidOperationException>(
|
|||
|
() => helper.ListBoxFor(m => m.foo, MultiSelectListTest.GetSampleIEnumerableObjects()),
|
|||
|
@"The parameter 'expression' must evaluate to an IEnumerable when multiple selection is allowed."
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxForWithListOfSelectListItemSelectsDefaultFromViewData()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
ViewDataDictionary<FooModel> vdd = new ViewDataDictionary<FooModel> { { "foo", new string[] { "123456789", "111111111" } } };
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(vdd);
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBoxFor(m => m.foo, MultiSelectListTest.GetSampleListObjects());
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" multiple=""multiple"" name=""foo""><option selected=""selected"" value=""123456789"">John</option>
|
|||
|
<option value=""987654321"">Jane</option>
|
|||
|
<option selected=""selected"" value=""111111111"">Joe</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxForWithListOfSelectListItem()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
ViewDataDictionary<FooModel> vdd = new ViewDataDictionary<FooModel> { { "foo", MultiSelectListTest.GetSampleListObjects() } };
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(vdd);
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBoxFor(m => m.foo, null);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""foo"" multiple=""multiple"" name=""foo""><option value=""123456789"">John</option>
|
|||
|
<option value=""987654321"">Jane</option>
|
|||
|
<option selected=""selected"" value=""111111111"">Joe</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxForWithPrefix()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(new ViewDataDictionary<FooModel>());
|
|||
|
MultiSelectList selectList = new MultiSelectList(MultiSelectListTest.GetSampleStrings());
|
|||
|
helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBoxFor(m => m.foo, selectList, HtmlHelperTest.AttributesObjectDictionary);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select baz=""BazObjValue"" id=""MyPrefix_foo"" multiple=""multiple"" name=""MyPrefix.foo""><option>Alpha</option>
|
|||
|
<option>Bravo</option>
|
|||
|
<option>Charlie</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ListBoxForWithPrefixAndListOfSelectListItemSelectsDefaultFromViewData()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
ViewDataDictionary<FooModel> vdd = new ViewDataDictionary<FooModel> { { "foo", new string[] { "123456789", "111111111" } } };
|
|||
|
HtmlHelper<FooModel> helper = MvcHelper.GetHtmlHelper(vdd);
|
|||
|
helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
|
|||
|
|
|||
|
// Act
|
|||
|
MvcHtmlString html = helper.ListBoxFor(m => m.foo, MultiSelectListTest.GetSampleListObjects());
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(
|
|||
|
@"<select id=""MyPrefix_foo"" multiple=""multiple"" name=""MyPrefix.foo""><option selected=""selected"" value=""123456789"">John</option>
|
|||
|
<option value=""987654321"">Jane</option>
|
|||
|
<option selected=""selected"" value=""111111111"">Joe</option>
|
|||
|
</select>",
|
|||
|
html.ToHtmlString());
|
|||
|
}
|
|||
|
|
|||
|
// Culture tests
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void SelectHelpersUseCurrentCultureToConvertValues()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
HtmlHelper defaultValueHelper = MvcHelper.GetHtmlHelper(new ViewDataDictionary
|
|||
|
{
|
|||
|
{ "foo", new[] { new DateTime(1900, 1, 1, 0, 0, 1) } },
|
|||
|
{ "bar", new DateTime(1900, 1, 1, 0, 0, 1) }
|
|||
|
});
|
|||
|
HtmlHelper helper = MvcHelper.GetHtmlHelper();
|
|||
|
SelectList selectList = new SelectList(GetSampleCultureAnonymousObjects(), "Date", "FullWord", new DateTime(1900, 1, 1, 0, 0, 0));
|
|||
|
|
|||
|
var tests = new[]
|
|||
|
{
|
|||
|
// DropDownList(name, selectList, optionLabel)
|
|||
|
new
|
|||
|
{
|
|||
|
Html = @"<select id=""foo"" name=""foo""><option selected=""selected"" value=""1900/01/01 12:00:00 AM"">Alpha</option>
|
|||
|
<option value=""1900/01/01 12:00:01 AM"">Bravo</option>
|
|||
|
<option value=""1900/01/01 12:00:02 AM"">Charlie</option>
|
|||
|
</select>",
|
|||
|
Action = new Func<MvcHtmlString>(() => helper.DropDownList("foo", selectList, (string)null))
|
|||
|
},
|
|||
|
// DropDownList(name, selectList, optionLabel) (With default value selected from ViewData)
|
|||
|
new
|
|||
|
{
|
|||
|
Html = @"<select id=""bar"" name=""bar""><option value=""1900/01/01 12:00:00 AM"">Alpha</option>
|
|||
|
<option selected=""selected"" value=""1900/01/01 12:00:01 AM"">Bravo</option>
|
|||
|
<option value=""1900/01/01 12:00:02 AM"">Charlie</option>
|
|||
|
</select>",
|
|||
|
Action = new Func<MvcHtmlString>(() => defaultValueHelper.DropDownList("bar", selectList, (string)null))
|
|||
|
},
|
|||
|
// ListBox(name, selectList)
|
|||
|
new
|
|||
|
{
|
|||
|
Html = @"<select id=""foo"" multiple=""multiple"" name=""foo""><option selected=""selected"" value=""1900/01/01 12:00:00 AM"">Alpha</option>
|
|||
|
<option value=""1900/01/01 12:00:01 AM"">Bravo</option>
|
|||
|
<option value=""1900/01/01 12:00:02 AM"">Charlie</option>
|
|||
|
</select>",
|
|||
|
Action = new Func<MvcHtmlString>(() => helper.ListBox("foo", selectList))
|
|||
|
},
|
|||
|
// ListBox(name, selectList) (With default value selected from ViewData)
|
|||
|
new
|
|||
|
{
|
|||
|
Html = @"<select id=""foo"" multiple=""multiple"" name=""foo""><option value=""1900/01/01 12:00:00 AM"">Alpha</option>
|
|||
|
<option selected=""selected"" value=""1900/01/01 12:00:01 AM"">Bravo</option>
|
|||
|
<option value=""1900/01/01 12:00:02 AM"">Charlie</option>
|
|||
|
</select>",
|
|||
|
Action = new Func<MvcHtmlString>(() => defaultValueHelper.ListBox("foo", selectList))
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
// Act && Assert
|
|||
|
using (HtmlHelperTest.ReplaceCulture("en-ZA", "en-US"))
|
|||
|
{
|
|||
|
foreach (var test in tests)
|
|||
|
{
|
|||
|
Assert.Equal(test.Html, test.Action().ToHtmlString());
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// Helpers
|
|||
|
|
|||
|
private class FooModel
|
|||
|
{
|
|||
|
public string foo { get; set; }
|
|||
|
}
|
|||
|
|
|||
|
private class FooBarModel : FooModel
|
|||
|
{
|
|||
|
public string bar { get; set; }
|
|||
|
}
|
|||
|
|
|||
|
private class NonIEnumerableModel
|
|||
|
{
|
|||
|
public int foo { get; set; }
|
|||
|
}
|
|||
|
|
|||
|
private static ViewDataDictionary<FooBarModel> GetViewDataWithErrors()
|
|||
|
{
|
|||
|
ViewDataDictionary<FooBarModel> viewData = new ViewDataDictionary<FooBarModel> { { "foo", "ViewDataFoo" } };
|
|||
|
viewData.Model = new FooBarModel { foo = "ViewItemFoo", bar = "ViewItemBar" };
|
|||
|
|
|||
|
ModelState modelStateFoo = new ModelState();
|
|||
|
modelStateFoo.Errors.Add(new ModelError("foo error 1"));
|
|||
|
modelStateFoo.Errors.Add(new ModelError("foo error 2"));
|
|||
|
viewData.ModelState["foo"] = modelStateFoo;
|
|||
|
modelStateFoo.Value = new ValueProviderResult(new string[] { "Bravo", "Charlie" }, "Bravo", CultureInfo.InvariantCulture);
|
|||
|
|
|||
|
return viewData;
|
|||
|
}
|
|||
|
|
|||
|
internal static IEnumerable GetSampleCultureAnonymousObjects()
|
|||
|
{
|
|||
|
return new[]
|
|||
|
{
|
|||
|
new { Date = new DateTime(1900, 1, 1, 0, 0, 0), FullWord = "Alpha" },
|
|||
|
new { Date = new DateTime(1900, 1, 1, 0, 0, 1), FullWord = "Bravo" },
|
|||
|
new { Date = new DateTime(1900, 1, 1, 0, 0, 2), FullWord = "Charlie" }
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
private class RequiredModel
|
|||
|
{
|
|||
|
[Required]
|
|||
|
public string foo { get; set; }
|
|||
|
}
|
|||
|
}
|
|||
|
}
|