aspnetcore/test/Microsoft.AspNet.Mvc.Core.Test/ViewEngineDescriptorExtensi...

211 lines
7.1 KiB
C#

// Copyright (c) .NET Foundation. 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.Linq;
using Microsoft.AspNet.Mvc.Rendering;
using Moq;
using Xunit;
namespace Microsoft.AspNet.Mvc
{
public class ViewEngineDescriptorExtensionsTest
{
[Theory]
[InlineData(-1)]
[InlineData(5)]
public void Insert_WithType_ThrowsIfIndexIsOutOfBounds(int index)
{
// Arrange
var collection = new List<ViewEngineDescriptor>
{
new ViewEngineDescriptor(Mock.Of<IViewEngine>()),
new ViewEngineDescriptor(Mock.Of<IViewEngine>())
};
// Act & Assert
Assert.Throws<ArgumentOutOfRangeException>("index", () => collection.Insert(index, typeof(IViewEngine)));
}
[Theory]
[InlineData(-2)]
[InlineData(3)]
public void Insert_WithInstance_ThrowsIfIndexIsOutOfBounds(int index)
{
// Arrange
var collection = new List<ViewEngineDescriptor>
{
new ViewEngineDescriptor(Mock.Of<IViewEngine>()),
new ViewEngineDescriptor(Mock.Of<IViewEngine>())
};
var viewEngine = Mock.Of<IViewEngine>();
// Act & Assert
Assert.Throws<ArgumentOutOfRangeException>("index", () => collection.Insert(index, viewEngine));
}
[InlineData]
public void ViewEngineDescriptors_AddsTypesAndInstances()
{
// Arrange
var viewEngine = Mock.Of<IViewEngine>();
var type = typeof(TestViewEngine);
var collection = new List<ViewEngineDescriptor>();
// Act
collection.Add(viewEngine);
collection.Insert(0, type);
// Assert
Assert.Equal(2, collection.Count);
Assert.IsType<TestViewEngine>(collection[0].ViewEngine);
Assert.Same(viewEngine, collection[0].ViewEngineType);
}
[Fact]
public void InputviewEngines_InstanceOf_ThrowsInvalidOperationExceptionIfMoreThanOnceInstance()
{
// Arrange
var viewEngines = new MvcOptions().ViewEngines;
viewEngines.Add(new TestViewEngine());
viewEngines.Add(Mock.Of<IViewEngine>());
viewEngines.Add(new TestViewEngine());
// Act & Assert
Assert.Throws<InvalidOperationException>(() => viewEngines.InstanceOf<TestViewEngine>());
}
[Fact]
public void InputviewEngines_InstanceOf_ThrowsInvalidOperationExceptionIfNoInstance()
{
// Arrange
var viewEngines = new MvcOptions().ViewEngines;
viewEngines.Add(Mock.Of<IViewEngine>());
viewEngines.Add(typeof(TestViewEngine));
// Act & Assert
Assert.Throws<InvalidOperationException>(() => viewEngines.InstanceOf<TestViewEngine>());
}
[Fact]
public void InputviewEngines_InstanceOf_ReturnsInstanceOfIInputFormatterIfOneExists()
{
// Arrange
var viewEngines = new MvcOptions().ViewEngines;
viewEngines.Add(Mock.Of<IViewEngine>());
var testEngine = new TestViewEngine();
viewEngines.Add(testEngine);
viewEngines.Add(typeof(TestViewEngine));
// Act
var formatter = viewEngines.InstanceOf<TestViewEngine>();
// Assert
Assert.NotNull(formatter);
Assert.IsType<TestViewEngine>(formatter);
Assert.Same(testEngine, formatter);
}
[Fact]
public void InputviewEngines_InstanceOfOrDefault_ThrowsInvalidOperationExceptionIfMoreThanOnceInstance()
{
// Arrange
var viewEngines = new MvcOptions().ViewEngines;
viewEngines.Add(new TestViewEngine());
viewEngines.Add(Mock.Of<IViewEngine>());
viewEngines.Add(new TestViewEngine());
// Act & Assert
Assert.Throws<InvalidOperationException>(() => viewEngines.InstanceOfOrDefault<TestViewEngine>());
}
[Fact]
public void InputviewEngines_InstanceOfOrDefault_ReturnsNullIfNoInstance()
{
// Arrange
var viewEngines = new MvcOptions().ViewEngines;
viewEngines.Add(Mock.Of<IViewEngine>());
viewEngines.Add(typeof(TestViewEngine));
// Act
var formatter = viewEngines.InstanceOfOrDefault<TestViewEngine>();
// Assert
Assert.Null(formatter);
}
[Fact]
public void InputviewEngines_InstanceOfOrDefault_ReturnsInstanceOfIInputFormatterIfOneExists()
{
// Arrange
var viewEngines = new MvcOptions().ViewEngines;
viewEngines.Add(Mock.Of<IViewEngine>());
viewEngines.Add(typeof(TestViewEngine));
var testEngine = new TestViewEngine();
viewEngines.Add(testEngine);
// Act
var formatter = viewEngines.InstanceOfOrDefault<TestViewEngine>();
// Assert
Assert.NotNull(formatter);
Assert.IsType<TestViewEngine>(formatter);
Assert.Same(testEngine, formatter);
}
[Fact]
public void InputviewEngines_InstancesOf_ReturnsEmptyCollectionIfNoneExist()
{
// Arrange
var viewEngines = new MvcOptions().ViewEngines;
viewEngines.Add(Mock.Of<IViewEngine>());
viewEngines.Add(typeof(TestViewEngine));
// Act
var result = viewEngines.InstancesOf<TestViewEngine>();
// Assert
Assert.Empty(result);
}
[Fact]
public void InputviewEngines_InstancesOf_ReturnsNonEmptyCollectionIfSomeExist()
{
// Arrange
var viewEngines = new MvcOptions().ViewEngines;
viewEngines.Add(typeof(TestViewEngine));
var viewEngine1 = new TestViewEngine();
var viewEngine2 = Mock.Of<IViewEngine>();
var viewEngine3 = new TestViewEngine();
var viewEngine4 = Mock.Of<IViewEngine>();
viewEngines.Add(viewEngine1);
viewEngines.Add(viewEngine2);
viewEngines.Add(viewEngine3);
viewEngines.Add(viewEngine4);
var expectedviewEngines = new List<TestViewEngine> { viewEngine1, viewEngine3 };
// Act
var result = viewEngines.InstancesOf<TestViewEngine>().ToList();
// Assert
Assert.NotEmpty(result);
Assert.Equal(result, expectedviewEngines);
}
private class TestViewEngine : IViewEngine
{
public ViewEngineResult FindPartialView(ActionContext context, string partialViewName)
{
throw new NotImplementedException();
}
public ViewEngineResult FindView(ActionContext context, string viewName)
{
throw new NotImplementedException();
}
}
}
}