a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
192 lines
7.3 KiB
C#
192 lines
7.3 KiB
C#
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
|
|
|
|
using System.IO;
|
|
using System.Text;
|
|
using System.Web.WebPages.Instrumentation;
|
|
using Moq;
|
|
using Xunit;
|
|
|
|
namespace System.Web.WebPages.Test
|
|
{
|
|
public class WebPageExecutingBaseTest
|
|
{
|
|
[Fact]
|
|
public void NormalizeLayoutPageUsesVirtualPathFactoryManagerToDetermineIfLayoutFileExists()
|
|
{
|
|
// Arrange
|
|
var layoutPagePath = "~/sitelayout.cshtml";
|
|
var layoutPage = Utils.CreatePage(null, layoutPagePath);
|
|
var page = Utils.CreatePage(null);
|
|
var objectFactory = new Mock<IVirtualPathFactory>();
|
|
objectFactory.Setup(c => c.Exists(It.Is<string>(p => p.Equals(layoutPagePath)))).Returns(true).Verifiable();
|
|
page.VirtualPathFactory = objectFactory.Object;
|
|
|
|
// Act
|
|
var path = page.NormalizeLayoutPagePath(layoutPage.VirtualPath);
|
|
|
|
// Assert
|
|
objectFactory.Verify();
|
|
Assert.Equal(path, layoutPage.VirtualPath);
|
|
}
|
|
|
|
[Fact]
|
|
public void NormalizeLayoutPageAcceptsRelativePathsToLayoutPage()
|
|
{
|
|
// Arrange
|
|
var page = Utils.CreatePage(null, "~/dir/default.cshtml");
|
|
var layoutPage = Utils.CreatePage(null, "~/layouts/sitelayout.cshtml");
|
|
var objectFactory = new HashVirtualPathFactory(page, layoutPage);
|
|
page.VirtualPathFactory = objectFactory;
|
|
|
|
// Act
|
|
var path = page.NormalizeLayoutPagePath(@"../layouts/sitelayout.cshtml");
|
|
|
|
// Assert
|
|
Assert.Equal(path, layoutPage.VirtualPath);
|
|
}
|
|
|
|
[Fact]
|
|
public void BeginContextSilentlyFailsIfInstrumentationIsNotAvailable()
|
|
{
|
|
// Arrange
|
|
bool called = false;
|
|
|
|
var pageMock = new Mock<WebPageExecutingBase>() { CallBase = true };
|
|
pageMock.Setup(p => p.Context).Returns(new Mock<HttpContextBase>().Object);
|
|
pageMock.Object.InstrumentationService.IsAvailable = false;
|
|
pageMock.Object.InstrumentationService.ExtractInstrumentationService = c =>
|
|
{
|
|
called = true;
|
|
return null;
|
|
};
|
|
|
|
// Act
|
|
pageMock.Object.BeginContext("~/dir/default.cshtml", 0, 1, true);
|
|
|
|
// Assert
|
|
Assert.False(called);
|
|
}
|
|
|
|
[Fact]
|
|
public void EndContextSilentlyFailsIfInstrumentationIsNotAvailable()
|
|
{
|
|
// Arrange
|
|
bool called = false;
|
|
|
|
var pageMock = new Mock<WebPageExecutingBase>() { CallBase = true };
|
|
pageMock.Setup(p => p.Context).Returns(new Mock<HttpContextBase>().Object);
|
|
pageMock.Object.InstrumentationService.IsAvailable = false;
|
|
pageMock.Object.InstrumentationService.ExtractInstrumentationService = c =>
|
|
{
|
|
called = true;
|
|
return null;
|
|
};
|
|
|
|
// Act
|
|
pageMock.Object.EndContext("~/dir/default.cshtml", 0, 1, true);
|
|
|
|
// Assert
|
|
Assert.False(called);
|
|
}
|
|
|
|
[Fact]
|
|
public void WriteAttributeToWritesAttributeNormallyIfNoValuesSpecified()
|
|
{
|
|
WriteAttributeTest(
|
|
name: "alt",
|
|
prefix: new PositionTagged<string>(" alt=\"", 42),
|
|
suffix: new PositionTagged<string>("\"", 24),
|
|
expected: " alt=\"\"");
|
|
}
|
|
|
|
[Fact]
|
|
public void WriteAttributeToWritesNothingIfSingleNullValueProvided()
|
|
{
|
|
WriteAttributeTest(
|
|
name: "alt",
|
|
prefix: new PositionTagged<string>(" alt=\"", 42),
|
|
suffix: new PositionTagged<string>("\"", 24),
|
|
values: new[] {
|
|
new AttributeValue(new PositionTagged<string>(String.Empty, 142), new PositionTagged<object>(null, 124), literal: true)
|
|
},
|
|
expected: "");
|
|
}
|
|
|
|
[Fact]
|
|
public void WriteAttributeToWritesNothingIfSingleFalseValueProvided()
|
|
{
|
|
WriteAttributeTest(
|
|
name: "alt",
|
|
prefix: new PositionTagged<string>(" alt=\"", 42),
|
|
suffix: new PositionTagged<string>("\"", 24),
|
|
values: new[] {
|
|
new AttributeValue(new PositionTagged<string>(String.Empty, 142), new PositionTagged<object>(false, 124), literal: true)
|
|
},
|
|
expected: "");
|
|
}
|
|
|
|
[Fact]
|
|
public void WriteAttributeToWritesGlobalPrefixIfSingleValueProvided()
|
|
{
|
|
WriteAttributeTest(
|
|
name: "alt",
|
|
prefix: new PositionTagged<string>(" alt=\"", 42),
|
|
suffix: new PositionTagged<string>("\"", 24),
|
|
values: new[] {
|
|
new AttributeValue(new PositionTagged<string>(" ", 142), new PositionTagged<object>("foo", 124), literal: true)
|
|
},
|
|
expected: " alt=\"foo\"");
|
|
}
|
|
|
|
[Fact]
|
|
public void WriteAttributeToWritesLocalPrefixForSecondValueProvided()
|
|
{
|
|
WriteAttributeTest(
|
|
name: "alt",
|
|
prefix: new PositionTagged<string>(" alt=\"", 42),
|
|
suffix: new PositionTagged<string>("\"", 24),
|
|
values: new[] {
|
|
new AttributeValue(new PositionTagged<string>(" ", 142), new PositionTagged<object>("foo", 124), literal: true),
|
|
new AttributeValue(new PositionTagged<string>("glorb", 142), new PositionTagged<object>("bar", 124), literal: true)
|
|
},
|
|
expected: " alt=\"fooglorbbar\"");
|
|
}
|
|
|
|
[Fact]
|
|
public void WriteAttributeToWritesGlobalPrefixOnlyIfSecondValueIsFirstNonNullOrFalse()
|
|
{
|
|
WriteAttributeTest(
|
|
name: "alt",
|
|
prefix: new PositionTagged<string>(" alt=\"", 42),
|
|
suffix: new PositionTagged<string>("\"", 24),
|
|
values: new[] {
|
|
new AttributeValue(new PositionTagged<string>(" ", 142), new PositionTagged<object>(null, 124), literal: true),
|
|
new AttributeValue(new PositionTagged<string>("glorb", 142), new PositionTagged<object>("bar", 124), literal: true)
|
|
},
|
|
expected: " alt=\"bar\"");
|
|
}
|
|
|
|
private void WriteAttributeTest(string name, PositionTagged<string> prefix, PositionTagged<string> suffix, string expected)
|
|
{
|
|
WriteAttributeTest(name, prefix, suffix, new AttributeValue[0], expected);
|
|
}
|
|
|
|
private void WriteAttributeTest(string name, PositionTagged<string> prefix, PositionTagged<string> suffix, AttributeValue[] values, string expected)
|
|
{
|
|
// Arrange
|
|
var pageMock = new Mock<WebPageExecutingBase>() { CallBase = true };
|
|
pageMock.Setup(p => p.Context).Returns(new Mock<HttpContextBase>().Object);
|
|
pageMock.Object.InstrumentationService.IsAvailable = false;
|
|
|
|
StringBuilder written = new StringBuilder();
|
|
StringWriter writer = new StringWriter(written);
|
|
|
|
// Act
|
|
pageMock.Object.WriteAttributeTo(writer, name, prefix, suffix, values);
|
|
|
|
// Assert
|
|
Assert.Equal(expected, written.ToString());
|
|
}
|
|
}
|
|
}
|