1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
|
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
using Moq;
using Xunit;
namespace System.Web.Mvc.Test
{
public class BuildManagerViewEngineTest
{
[Fact]
public void BuildManagerProperty()
{
// Arrange
var engine = new TestableBuildManagerViewEngine();
var buildManagerMock = new MockBuildManager(expectedVirtualPath: null, compiledType: null);
// Act
engine.BuildManager = buildManagerMock;
// Assert
Assert.Same(engine.BuildManager, buildManagerMock);
}
[Fact]
public void FileExistsReturnsTrueForExistingPath()
{
// Arrange
var engine = new TestableBuildManagerViewEngine();
var buildManagerMock = new MockBuildManager("some path", typeof(object));
engine.BuildManager = buildManagerMock;
// Act
bool result = engine.FileExists("some path");
// Assert
Assert.True(result);
}
[Fact]
public void FileExistsReturnsFalseWhenBuildManagerFileExistsReturnsFalse()
{
// Arrange
var engine = new TestableBuildManagerViewEngine();
var buildManagerMock = new MockBuildManager("some path", false);
engine.BuildManager = buildManagerMock;
// Act
bool result = engine.FileExists("some path");
// Assert
Assert.False(result);
}
[Fact]
public void ViewPageActivatorConsultsSetActivatorResolver()
{
// Arrange
Mock<IViewPageActivator> activator = new Mock<IViewPageActivator>();
// Act
TestableBuildManagerViewEngine engine = new TestableBuildManagerViewEngine(activator.Object);
//Assert
Assert.Equal(activator.Object, engine.ViewPageActivator);
}
[Fact]
public void ViewPageActivatorDelegatesToActivatorResolver()
{
// Arrange
var activator = new Mock<IViewPageActivator>();
var activatorResolver = new Resolver<IViewPageActivator> { Current = activator.Object };
// Act
TestableBuildManagerViewEngine engine = new TestableBuildManagerViewEngine(activatorResolver: activatorResolver);
// Assert
Assert.Equal(activator.Object, engine.ViewPageActivator);
}
[Fact]
public void ViewPageActivatorDelegatesToDependencyResolverWhenActivatorResolverIsNull()
{
// Arrange
var viewInstance = new object();
var controllerContext = new ControllerContext();
var buildManager = new MockBuildManager("view path", typeof(object));
var dependencyResolver = new Mock<IDependencyResolver>(MockBehavior.Strict);
dependencyResolver.Setup(dr => dr.GetService(typeof(object))).Returns(viewInstance).Verifiable();
// Act
TestableBuildManagerViewEngine engine = new TestableBuildManagerViewEngine(dependencyResolver: dependencyResolver.Object);
engine.ViewPageActivator.Create(controllerContext, typeof(object));
// Assert
dependencyResolver.Verify();
}
[Fact]
public void ViewPageActivatorDelegatesToActivatorCreateInstanceWhenDependencyResolverReturnsNull()
{
// Arrange
var controllerContext = new ControllerContext();
var buildManager = new MockBuildManager("view path", typeof(NoParameterlessCtor));
var dependencyResolver = new Mock<IDependencyResolver>();
var engine = new TestableBuildManagerViewEngine(dependencyResolver: dependencyResolver.Object);
// Act
MissingMethodException ex = Assert.Throws<MissingMethodException>( // Depend on the fact that Activator.CreateInstance cannot create an object without a parameterless ctor
() => engine.ViewPageActivator.Create(controllerContext, typeof(NoParameterlessCtor))
);
// Assert
Assert.Contains("System.Activator.CreateInstance(", ex.StackTrace);
}
[Fact]
public void ActivatorResolverAndDependencyResolverAreNeverCalledWhenViewPageActivatorIsPassedInContstructor()
{
// Arrange
var controllerContext = new ControllerContext();
var expectedController = new Goodcontroller();
Mock<IViewPageActivator> activator = new Mock<IViewPageActivator>();
var resolverActivator = new Mock<IViewPageActivator>(MockBehavior.Strict);
var activatorResolver = new Resolver<IViewPageActivator> { Current = resolverActivator.Object };
var dependencyResolver = new Mock<IDependencyResolver>(MockBehavior.Strict);
//Act
var engine = new TestableBuildManagerViewEngine(activator.Object, activatorResolver, dependencyResolver.Object);
//Assert
Assert.Same(activator.Object, engine.ViewPageActivator);
}
private class NoParameterlessCtor
{
public NoParameterlessCtor(int x)
{
}
}
private class TestableBuildManagerViewEngine : BuildManagerViewEngine
{
public TestableBuildManagerViewEngine()
: base()
{
}
public TestableBuildManagerViewEngine(IViewPageActivator viewPageActivator)
: base(viewPageActivator)
{
}
public TestableBuildManagerViewEngine(IViewPageActivator viewPageActivator = null, IResolver<IViewPageActivator> activatorResolver = null, IDependencyResolver dependencyResolver = null)
: base(viewPageActivator, activatorResolver, dependencyResolver)
{
}
public new IViewPageActivator ViewPageActivator
{
get { return base.ViewPageActivator; }
}
protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath)
{
throw new NotImplementedException();
}
protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
{
throw new NotImplementedException();
}
public bool FileExists(string virtualPath)
{
return base.FileExists(null, virtualPath);
}
}
}
}
|