// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information. using Moq; using Xunit; using Assert = Microsoft.TestCommon.AssertEx; namespace System.Web.Mvc.Test { public class HandleErrorInfoTest { [Fact] public void ConstructorSetsProperties() { // Arrange Exception exception = new Exception(); string controller = "SomeController"; string action = "SomeAction"; // Act HandleErrorInfo viewData = new HandleErrorInfo(exception, controller, action); // Assert Assert.Same(exception, viewData.Exception); Assert.Equal(controller, viewData.ControllerName); Assert.Equal(action, viewData.ActionName); } [Fact] public void ConstructorWithEmptyActionThrows() { Assert.ThrowsArgumentNullOrEmpty( delegate { new HandleErrorInfo(new Exception(), "SomeController", String.Empty); }, "actionName"); } [Fact] public void ConstructorWithEmptyControllerThrows() { Assert.ThrowsArgumentNullOrEmpty( delegate { new HandleErrorInfo(new Exception(), String.Empty, "SomeAction"); }, "controllerName"); } [Fact] public void ConstructorWithNullActionThrows() { Assert.ThrowsArgumentNullOrEmpty( delegate { new HandleErrorInfo(new Exception(), "SomeController", null /* action */); }, "actionName"); } [Fact] public void ConstructorWithNullControllerThrows() { Assert.ThrowsArgumentNullOrEmpty( delegate { new HandleErrorInfo(new Exception(), null /* controller */, "SomeAction"); }, "controllerName"); } [Fact] public void ConstructorWithNullExceptionThrows() { Assert.ThrowsArgumentNull( delegate { new HandleErrorInfo(null /* exception */, "SomeController", "SomeAction"); }, "exception"); } [Fact] public void ErrorHandlingDoesNotFireIfCalledInChildAction() { // Arrange HandleErrorAttribute attr = new HandleErrorAttribute(); Mock context = new Mock(); context.Setup(c => c.IsChildAction).Returns(true); // Act attr.OnException(context.Object); // Assert Assert.IsType(context.Object.Result); } } }