// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information. using System.Collections.Generic; using System.Linq; using Moq; using Xunit; using Assert = Microsoft.TestCommon.AssertEx; namespace System.Web.Mvc.Test { public class ValueProviderFactoryCollectionTest { [Fact] public void ListWrappingConstructor() { // Arrange List list = new List() { new FormValueProviderFactory() }; // Act ValueProviderFactoryCollection collection = new ValueProviderFactoryCollection(list); // Assert Assert.Equal(list, collection.ToList()); } [Fact] public void ListWrappingConstructorThrowsIfListIsNull() { // Act & Assert Assert.ThrowsArgumentNull( delegate { new ValueProviderFactoryCollection(null, null); }, "list"); } [Fact] public void DefaultConstructor() { // Act ValueProviderFactoryCollection collection = new ValueProviderFactoryCollection(); // Assert Assert.Empty(collection); } [Fact] public void AddNullValueProviderFactoryThrows() { // Arrange ValueProviderFactoryCollection collection = new ValueProviderFactoryCollection(); // Act & Assert Assert.ThrowsArgumentNull( delegate { collection.Add(null); }, "item"); } [Fact] public void GetValueProvider() { // Arrange ControllerContext controllerContext = new ControllerContext(); IValueProvider[] expectedValueProviders = new[] { new Mock().Object, new Mock().Object }; Mock mockFactory1 = new Mock(); mockFactory1.Setup(o => o.GetValueProvider(controllerContext)).Returns(expectedValueProviders[0]); Mock mockFactory2 = new Mock(); mockFactory2.Setup(o => o.GetValueProvider(controllerContext)).Returns(expectedValueProviders[1]); ValueProviderFactoryCollection factories = new ValueProviderFactoryCollection() { mockFactory1.Object, mockFactory2.Object }; // Act ValueProviderCollection valueProviders = (ValueProviderCollection)factories.GetValueProvider(controllerContext); // Assert Assert.Equal(expectedValueProviders, valueProviders.ToArray()); } [Fact] public void GetValueProviderDelegatesToResolver() { //Arrange ControllerContext controllerContext = new ControllerContext(); IValueProvider[] expectedValueProviders = new[] { new Mock().Object, new Mock().Object }; Mock mockFactory1 = new Mock(); mockFactory1.Setup(o => o.GetValueProvider(controllerContext)).Returns(expectedValueProviders[0]); Mock mockFactory2 = new Mock(); mockFactory2.Setup(o => o.GetValueProvider(controllerContext)).Returns(expectedValueProviders[1]); Resolver> resolver = new Resolver> { Current = new[] { mockFactory1.Object, mockFactory2.Object } }; ValueProviderFactoryCollection factories = new ValueProviderFactoryCollection(resolver); // Act ValueProviderCollection valueProviders = (ValueProviderCollection)factories.GetValueProvider(controllerContext); // Assert Assert.Equal(expectedValueProviders, valueProviders.ToArray()); } [Fact] public void SetItem() { // Arrange ValueProviderFactoryCollection collection = new ValueProviderFactoryCollection(); collection.Add(new Mock().Object); ValueProviderFactory newFactory = new Mock().Object; // Act collection[0] = newFactory; // Assert Assert.Single(collection); Assert.Equal(newFactory, collection[0]); } [Fact] public void SetNullValueProviderFactoryThrows() { // Arrange ValueProviderFactoryCollection collection = new ValueProviderFactoryCollection(); collection.Add(new Mock().Object); // Act & Assert Assert.ThrowsArgumentNull( delegate { collection[0] = null; }, "item"); } } }