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

232 lines
11 KiB
C#

// 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;
namespace System.Web.WebPages.Test
{
public class DisplayModesTest
{
[Fact]
public void DefaultInstanceHasDefaultModes()
{
// Act
IList<IDisplayMode> displayModes = DisplayModeProvider.Instance.Modes;
// Assert
Assert.Equal(2, displayModes.Count);
Assert.IsType<DefaultDisplayMode>(displayModes[0]);
Assert.Equal(displayModes[0].DisplayModeId, DisplayModeProvider.MobileDisplayModeId);
Assert.IsType<DefaultDisplayMode>(displayModes[1]);
Assert.Equal(displayModes[1].DisplayModeId, DisplayModeProvider.DefaultDisplayModeId);
}
[Fact]
public void GetDisplayInfoForVirtualPathReturnsDisplayInfoFromFirstDisplayModeToHandleRequest()
{
// Arrange
var displayModeProvider = new DisplayModeProvider();
displayModeProvider.Modes.Clear();
var displayMode1 = new Mock<IDisplayMode>(MockBehavior.Strict);
displayMode1.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(false);
displayModeProvider.Modes.Add(displayMode1.Object);
var displayMode2 = new Mock<IDisplayMode>(MockBehavior.Strict);
displayMode2.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(false);
displayModeProvider.Modes.Add(displayMode2.Object);
var displayMode3 = new Mock<IDisplayMode>(MockBehavior.Strict);
displayMode3.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(true);
displayModeProvider.Modes.Add(displayMode3.Object);
Mock<HttpContextBase> httpContext = new Mock<HttpContextBase>(MockBehavior.Strict);
var expected = new DisplayInfo("Foo", displayMode3.Object);
Func<string, bool> fileExists = path => true;
displayMode3.Setup(d => d.GetDisplayInfo(httpContext.Object, "path", fileExists)).Returns(expected);
// Act
DisplayInfo result = displayModeProvider.GetDisplayInfoForVirtualPath("path", httpContext.Object, fileExists, currentDisplayMode: null);
// Assert
Assert.Same(expected, result);
}
[Fact]
public void GetDisplayInfoForVirtualPathWithConsistentDisplayModeBeginsSearchAtCurrentDisplayMode()
{
// Arrange
Mock<HttpContextBase> httpContext = new Mock<HttpContextBase>(MockBehavior.Strict);
var displayModeProvider = new DisplayModeProvider();
displayModeProvider.Modes.Clear();
var displayMode1 = new Mock<IDisplayMode>(MockBehavior.Strict);
displayMode1.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(true);
displayModeProvider.Modes.Add(displayMode1.Object);
var displayMode2 = new Mock<IDisplayMode>(MockBehavior.Strict);
displayMode2.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(false);
displayModeProvider.Modes.Add(displayMode2.Object);
var displayMode3 = new Mock<IDisplayMode>(MockBehavior.Strict);
displayMode3.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(true);
displayModeProvider.Modes.Add(displayMode3.Object);
var displayInfo = new DisplayInfo("Foo", displayMode3.Object);
Func<string, bool> fileExists = path => true;
displayMode3.Setup(d => d.GetDisplayInfo(httpContext.Object, "path", fileExists)).Returns(displayInfo);
// Act
DisplayInfo result = displayModeProvider.GetDisplayInfoForVirtualPath("path", httpContext.Object, fileExists, currentDisplayMode: displayMode2.Object,
requireConsistentDisplayMode: true);
// Assert
Assert.Same(displayInfo, result);
}
[Fact]
public void GetDisplayInfoForVirtualPathWithoutConsistentDisplayModeIgnoresCurrentDisplayMode()
{
// Arrange
Mock<HttpContextBase> httpContext = new Mock<HttpContextBase>(MockBehavior.Strict);
var displayModeProvider = new DisplayModeProvider();
displayModeProvider.Modes.Clear();
var displayMode1 = new Mock<IDisplayMode>(MockBehavior.Strict);
displayMode1.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(true);
displayModeProvider.Modes.Add(displayMode1.Object);
var displayMode2 = new Mock<IDisplayMode>(MockBehavior.Strict);
displayMode2.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(false);
displayModeProvider.Modes.Add(displayMode2.Object);
var displayMode3 = new Mock<IDisplayMode>(MockBehavior.Strict);
displayMode3.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(true);
displayModeProvider.Modes.Add(displayMode3.Object);
var displayInfo = new DisplayInfo("Foo", displayMode3.Object);
Func<string, bool> fileExists = path => true;
displayMode1.Setup(d => d.GetDisplayInfo(httpContext.Object, "path", fileExists)).Returns(displayInfo);
// Act
DisplayInfo result = displayModeProvider.GetDisplayInfoForVirtualPath("path", httpContext.Object, fileExists, currentDisplayMode: displayMode1.Object,
requireConsistentDisplayMode: false);
// Assert
Assert.Same(displayInfo, result);
}
[Fact]
public void GetDisplayModesForRequestReturnsNullIfNoDisplayModesHandleRequest()
{
// Arrange
Mock<HttpContextBase> httpContext = new Mock<HttpContextBase>(MockBehavior.Strict);
var displayModeProvider = new DisplayModeProvider();
displayModeProvider.Modes.Clear();
var displayMode1 = new Mock<IDisplayMode>(MockBehavior.Strict);
displayMode1.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(false);
displayModeProvider.Modes.Add(displayMode1.Object);
var displayMode2 = new Mock<IDisplayMode>(MockBehavior.Strict);
displayMode2.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(false);
displayModeProvider.Modes.Add(displayMode2.Object);
var displayMode3 = new Mock<IDisplayMode>(MockBehavior.Strict);
displayMode3.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(false);
displayModeProvider.Modes.Add(displayMode3.Object);
// Act
DisplayInfo displayModeForRequest = displayModeProvider.GetDisplayInfoForVirtualPath("path", httpContext.Object, path => false, currentDisplayMode: null);
// Assert
Assert.Null(displayModeForRequest);
}
[Fact]
public void GetAvailableDisplayModesForContextWithRestrictingPageElements()
{
// Arrange
Mock<HttpContextBase> httpContext = new Mock<HttpContextBase>(MockBehavior.Strict);
var displayModeProvider = new DisplayModeProvider();
displayModeProvider.Modes.Clear();
var displayMode1 = new Mock<IDisplayMode>(MockBehavior.Strict);
displayMode1.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(true);
displayModeProvider.Modes.Add(displayMode1.Object);
var displayMode2 = new Mock<IDisplayMode>(MockBehavior.Strict);
displayMode2.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(false);
displayModeProvider.Modes.Add(displayMode2.Object);
var displayMode3 = new Mock<IDisplayMode>(MockBehavior.Strict);
displayMode3.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(true);
displayModeProvider.Modes.Add(displayMode3.Object);
// Act
var availableDisplayModes = displayModeProvider.GetAvailableDisplayModesForContext(httpContext.Object, displayMode2.Object, requireConsistentDisplayMode: true).ToList();
// Assert
Assert.Equal(1, availableDisplayModes.Count);
Assert.Equal(displayMode3.Object, availableDisplayModes[0]);
}
[Fact]
public void GetAvailableDisplayModesForContextWithoutRestrictingPageElements()
{
// Arrange
Mock<HttpContextBase> httpContext = new Mock<HttpContextBase>(MockBehavior.Strict);
var displayModeProvider = new DisplayModeProvider();
displayModeProvider.Modes.Clear();
var displayMode1 = new Mock<IDisplayMode>(MockBehavior.Strict);
displayMode1.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(true);
displayModeProvider.Modes.Add(displayMode1.Object);
var displayMode2 = new Mock<IDisplayMode>(MockBehavior.Strict);
displayMode2.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(false);
displayModeProvider.Modes.Add(displayMode2.Object);
var displayMode3 = new Mock<IDisplayMode>(MockBehavior.Strict);
displayMode3.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(true);
displayModeProvider.Modes.Add(displayMode3.Object);
// Act
var availableDisplayModes = displayModeProvider.GetAvailableDisplayModesForContext(httpContext.Object, displayMode2.Object, requireConsistentDisplayMode: false).ToList();
// Assert
Assert.Equal(2, availableDisplayModes.Count);
Assert.Same(displayMode1.Object, availableDisplayModes[0]);
Assert.Same(displayMode3.Object, availableDisplayModes[1]);
}
[Fact]
public void GetAvailableDisplayModesReturnsOnlyModesThatCanHandleContext()
{
// Arrange
Mock<HttpContextBase> httpContext = new Mock<HttpContextBase>(MockBehavior.Strict);
var displayModeProvider = new DisplayModeProvider();
displayModeProvider.Modes.Clear();
var displayMode1 = new Mock<IDisplayMode>(MockBehavior.Strict);
displayMode1.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(false);
displayModeProvider.Modes.Add(displayMode1.Object);
var displayMode2 = new Mock<IDisplayMode>(MockBehavior.Strict);
displayMode2.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(true);
displayModeProvider.Modes.Add(displayMode2.Object);
var displayMode3 = new Mock<IDisplayMode>(MockBehavior.Strict);
displayMode3.Setup(d => d.CanHandleContext(It.IsAny<HttpContextBase>())).Returns(false);
displayModeProvider.Modes.Add(displayMode3.Object);
// Act
var availableDisplayModes = displayModeProvider.GetAvailableDisplayModesForContext(httpContext.Object, displayMode1.Object, requireConsistentDisplayMode: false).ToList();
// Assert
Assert.Equal(1, availableDisplayModes.Count);
Assert.Equal(displayMode2.Object, availableDisplayModes[0]);
}
}
}