Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

310 lines
11 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.Linq;
using Xunit;
using Assert = Microsoft.TestCommon.AssertEx;
namespace System.Web.Mvc.Test
{
public class MultiSelectListTest
{
[Fact]
public void Constructor1SetsProperties()
{
// Arrange
IEnumerable items = new object[0];
// Act
MultiSelectList multiSelect = new MultiSelectList(items);
// Assert
Assert.Same(items, multiSelect.Items);
Assert.Null(multiSelect.DataValueField);
Assert.Null(multiSelect.DataTextField);
Assert.Null(multiSelect.SelectedValues);
}
[Fact]
public void Constructor2SetsProperties()
{
// Arrange
IEnumerable items = new object[0];
IEnumerable selectedValues = new object[0];
// Act
MultiSelectList multiSelect = new MultiSelectList(items, selectedValues);
// Assert
Assert.Same(items, multiSelect.Items);
Assert.Null(multiSelect.DataValueField);
Assert.Null(multiSelect.DataTextField);
Assert.Same(selectedValues, multiSelect.SelectedValues);
}
[Fact]
public void Constructor3SetsProperties()
{
// Arrange
IEnumerable items = new object[0];
// Act
MultiSelectList multiSelect = new MultiSelectList(items, "SomeValueField", "SomeTextField");
// Assert
Assert.Same(items, multiSelect.Items);
Assert.Equal("SomeValueField", multiSelect.DataValueField);
Assert.Equal("SomeTextField", multiSelect.DataTextField);
Assert.Null(multiSelect.SelectedValues);
}
[Fact]
public void Constructor4SetsProperties()
{
// Arrange
IEnumerable items = new object[0];
IEnumerable selectedValues = new object[0];
// Act
MultiSelectList multiSelect = new MultiSelectList(items, "SomeValueField", "SomeTextField", selectedValues);
// Assert
Assert.Same(items, multiSelect.Items);
Assert.Equal("SomeValueField", multiSelect.DataValueField);
Assert.Equal("SomeTextField", multiSelect.DataTextField);
Assert.Same(selectedValues, multiSelect.SelectedValues);
}
[Fact]
public void ConstructorWithNullItemsThrows()
{
Assert.ThrowsArgumentNull(
delegate { new MultiSelectList(null /* items */, "dataValueField", "dataTextField", null /* selectedValues */); }, "items");
}
[Fact]
public void GetListItemsThrowsOnBindingFailure()
{
// Arrange
MultiSelectList multiSelect = new MultiSelectList(GetSampleFieldObjects(),
"Text", "Value", new string[] { "A", "C", "T" });
// Assert
Assert.ThrowsHttpException(
delegate { IList<SelectListItem> listItems = multiSelect.GetListItems(); }, "DataBinding: 'System.Web.Mvc.Test.MultiSelectListTest+Item' does not contain a property with the name 'Text'.", 500);
}
[Fact]
public void GetListItemsWithoutValueField()
{
// Arrange
MultiSelectList multiSelect = new MultiSelectList(GetSampleStrings());
// Act
IList<SelectListItem> listItems = multiSelect.GetListItems();
// Assert
Assert.Equal(3, listItems.Count);
Assert.Null(listItems[0].Value);
Assert.Equal("Alpha", listItems[0].Text);
Assert.False(listItems[0].Selected);
Assert.Null(listItems[1].Value);
Assert.Equal("Bravo", listItems[1].Text);
Assert.False(listItems[1].Selected);
Assert.Null(listItems[2].Value);
Assert.Equal("Charlie", listItems[2].Text);
Assert.False(listItems[2].Selected);
}
[Fact]
public void GetListItemsWithoutValueFieldWithSelections()
{
// Arrange
MultiSelectList multiSelect = new MultiSelectList(GetSampleStrings(), new string[] { "Alpha", "Charlie", "Tango" });
// Act
IList<SelectListItem> listItems = multiSelect.GetListItems();
// Assert
Assert.Equal(3, listItems.Count);
Assert.Null(listItems[0].Value);
Assert.Equal("Alpha", listItems[0].Text);
Assert.True(listItems[0].Selected);
Assert.Null(listItems[1].Value);
Assert.Equal("Bravo", listItems[1].Text);
Assert.False(listItems[1].Selected);
Assert.Null(listItems[2].Value);
Assert.Equal("Charlie", listItems[2].Text);
Assert.True(listItems[2].Selected);
}
[Fact]
public void GetListItemsWithValueField()
{
// Arrange
MultiSelectList multiSelect = new MultiSelectList(GetSampleAnonymousObjects(), "Letter", "FullWord");
// Act
IList<SelectListItem> listItems = multiSelect.GetListItems();
// Assert
Assert.Equal(3, listItems.Count);
Assert.Equal("A", listItems[0].Value);
Assert.Equal("Alpha", listItems[0].Text);
Assert.False(listItems[0].Selected);
Assert.Equal("B", listItems[1].Value);
Assert.Equal("Bravo", listItems[1].Text);
Assert.False(listItems[1].Selected);
Assert.Equal("C", listItems[2].Value);
Assert.Equal("Charlie", listItems[2].Text);
Assert.False(listItems[2].Selected);
}
[Fact]
public void GetListItemsWithValueFieldWithSelections()
{
// Arrange
MultiSelectList multiSelect = new MultiSelectList(GetSampleAnonymousObjects(),
"Letter", "FullWord", new string[] { "A", "C", "T" });
// Act
IList<SelectListItem> listItems = multiSelect.GetListItems();
// Assert
Assert.Equal(3, listItems.Count);
Assert.Equal("A", listItems[0].Value);
Assert.Equal("Alpha", listItems[0].Text);
Assert.True(listItems[0].Selected);
Assert.Equal("B", listItems[1].Value);
Assert.Equal("Bravo", listItems[1].Text);
Assert.False(listItems[1].Selected);
Assert.Equal("C", listItems[2].Value);
Assert.Equal("Charlie", listItems[2].Text);
Assert.True(listItems[2].Selected);
}
[Fact]
public void IEnumerableWithAnonymousObjectsAndTextValueFields()
{
// Arrange
MultiSelectList multiSelect = new MultiSelectList(GetSampleAnonymousObjects(),
"Letter", "FullWord", new string[] { "A", "C", "T" });
// Act
IEnumerator enumerator = multiSelect.GetEnumerator();
enumerator.MoveNext();
SelectListItem firstItem = enumerator.Current as SelectListItem;
SelectListItem lastItem = null;
while (enumerator.MoveNext())
{
lastItem = enumerator.Current as SelectListItem;
}
// Assert
Assert.True(firstItem != null);
Assert.Equal("Alpha", firstItem.Text);
Assert.Equal("A", firstItem.Value);
Assert.True(firstItem.Selected);
Assert.True(lastItem != null);
Assert.Equal("Charlie", lastItem.Text);
Assert.Equal("C", lastItem.Value);
Assert.True(lastItem.Selected);
}
internal static IEnumerable GetSampleAnonymousObjects()
{
return new[]
{
new { Letter = 'A', FullWord = "Alpha" },
new { Letter = 'B', FullWord = "Bravo" },
new { Letter = 'C', FullWord = "Charlie" }
};
}
internal static IEnumerable GetSampleFieldObjects()
{
return new[]
{
new Item { Text = "A", Value = "Alpha" },
new Item { Text = "B", Value = "Bravo" },
new Item { Text = "C", Value = "Charlie" }
};
}
internal static List<SelectListItem> GetSampleListObjects()
{
List<SelectListItem> list = new List<SelectListItem>();
string selectedSSN = "111111111";
foreach (Person person in GetSamplePeople())
{
list.Add(new SelectListItem
{
Text = person.FirstName,
Value = person.SSN,
Selected = String.Equals(person.SSN, selectedSSN)
});
}
return list;
}
internal static IEnumerable<SelectListItem> GetSampleIEnumerableObjects()
{
Person[] people = GetSamplePeople();
string selectedSSN = "111111111";
IEnumerable<SelectListItem> list = from person in people
select new SelectListItem
{
Text = person.FirstName,
Value = person.SSN,
Selected = String.Equals(person.SSN, selectedSSN)
};
return list;
}
internal static IEnumerable GetSampleStrings()
{
return new string[] { "Alpha", "Bravo", "Charlie" };
}
internal static Person[] GetSamplePeople()
{
return new Person[]
{
new Person
{
FirstName = "John",
SSN = "123456789"
},
new Person
{
FirstName = "Jane",
SSN = "987654321"
},
new Person
{
FirstName = "Joe",
SSN = "111111111"
}
};
}
internal class Item
{
public string Text;
public string Value;
}
internal class Person
{
public string FirstName { get; set; }
public string SSN { get; set; }
}
}
}