268 lines
8.0 KiB
C#
268 lines
8.0 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.IO;
|
|
using System.Text;
|
|
using Microsoft.AspNetCore.Razor.Language;
|
|
using Xunit;
|
|
|
|
namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure
|
|
{
|
|
public class PageDirectiveFeatureTest
|
|
{
|
|
[Fact]
|
|
public void TryGetPageDirective_FindsTemplate()
|
|
{
|
|
// Arrange
|
|
string template;
|
|
var projectItem = new TestRazorProjectItem(@"@page ""Some/Path/{value}""
|
|
The rest of the thing");
|
|
|
|
// Act & Assert
|
|
Assert.True(PageDirectiveFeature.TryGetPageDirective(projectItem, out template));
|
|
Assert.Equal("Some/Path/{value}", template);
|
|
}
|
|
|
|
[Fact]
|
|
public void TryGetPageDirective_NoNewLine()
|
|
{
|
|
// Arrange
|
|
string template;
|
|
var projectItem = new TestRazorProjectItem(@"@page ""Some/Path/{value}""");
|
|
|
|
// Act & Assert
|
|
Assert.True(PageDirectiveFeature.TryGetPageDirective(projectItem, out template));
|
|
Assert.Equal("Some/Path/{value}", template);
|
|
}
|
|
|
|
[Fact]
|
|
public void TryGetPageDirective_JunkBeforeDirective()
|
|
{
|
|
// Arrange
|
|
string template;
|
|
var projectItem = new TestRazorProjectItem(@"Not a directive @page ""Some/Path/{value}""");
|
|
|
|
// Act & Assert
|
|
Assert.False(PageDirectiveFeature.TryGetPageDirective(projectItem, out template));
|
|
Assert.Null(template);
|
|
}
|
|
|
|
[Fact]
|
|
public void TryGetPageDirective_MultipleQuotes()
|
|
{
|
|
// Arrange
|
|
string template;
|
|
var projectItem = new TestRazorProjectItem(@"@page """"template""""");
|
|
|
|
// Act & Assert
|
|
Assert.True(PageDirectiveFeature.TryGetPageDirective(projectItem, out template));
|
|
Assert.Equal(@"""template""", template);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(@"""Some/Path/{value}")]
|
|
[InlineData(@"Some/Path/{value}""")]
|
|
public void TryGetPageDirective_RequiresBothQuotes(string inTemplate)
|
|
{
|
|
// Arrange
|
|
string template;
|
|
var projectItem = new TestRazorProjectItem($@"@page {inTemplate}");
|
|
|
|
// Act & Assert
|
|
Assert.True(PageDirectiveFeature.TryGetPageDirective(projectItem, out template));
|
|
Assert.Equal(string.Empty, template);
|
|
}
|
|
|
|
|
|
[Fact]
|
|
public void TryGetPageDirective_NoQuotesAroundPath_IsNotTemplate()
|
|
{
|
|
// Arrange
|
|
string template;
|
|
var projectItem = new TestRazorProjectItem(@"@page Some/Path/{value}");
|
|
|
|
// Act & Assert
|
|
Assert.True(PageDirectiveFeature.TryGetPageDirective(projectItem, out template));
|
|
Assert.Equal(string.Empty, template);
|
|
}
|
|
|
|
[Fact]
|
|
public void TryGetPageDirective_WrongNewLine()
|
|
{
|
|
// Arrange
|
|
var wrongNewLine = Environment.NewLine == "\r\n" ? "\n" : "\r\n";
|
|
|
|
string template;
|
|
var projectItem = new TestRazorProjectItem($"@page \"Some/Path/{{value}}\" {wrongNewLine}");
|
|
|
|
// Act & Assert
|
|
Assert.True(PageDirectiveFeature.TryGetPageDirective(projectItem, out template));
|
|
Assert.Equal("Some/Path/{value}", template);
|
|
}
|
|
|
|
[Fact]
|
|
public void TryGetPageDirective_NewLineBeforeDirective()
|
|
{
|
|
// Arrange
|
|
string template;
|
|
var projectItem = new TestRazorProjectItem("\n @page \"Some/Path/{value}\"");
|
|
|
|
// Act
|
|
Assert.True(PageDirectiveFeature.TryGetPageDirective(projectItem, out template));
|
|
Assert.Equal("Some/Path/{value}", template);
|
|
}
|
|
|
|
[Fact]
|
|
public void TryGetPageDirective_WhitespaceBeforeDirective()
|
|
{
|
|
// Arrange
|
|
string template;
|
|
var projectItem = new TestRazorProjectItem(@" @page ""Some/Path/{value}""
|
|
");
|
|
|
|
// Act & Assert
|
|
Assert.True(PageDirectiveFeature.TryGetPageDirective(projectItem, out template));
|
|
Assert.Equal("Some/Path/{value}", template);
|
|
}
|
|
|
|
[Fact(Skip = "Re-evaluate this scenario after we use Razor to parse this stuff")]
|
|
public void TryGetPageDirective_JunkBeforeNewline()
|
|
{
|
|
// Arrange
|
|
string template;
|
|
var projectItem = new TestRazorProjectItem(@"@page ""Some/Path/{value}"" things that are not the path
|
|
a new line");
|
|
|
|
// Act & Assert
|
|
Assert.True(PageDirectiveFeature.TryGetPageDirective(projectItem, out template));
|
|
Assert.Empty(template);
|
|
}
|
|
|
|
[Fact]
|
|
public void TryGetPageDirective_Directive_WithoutPathOrContent()
|
|
{
|
|
// Arrange
|
|
string template;
|
|
var projectItem = new TestRazorProjectItem(@"@page");
|
|
|
|
// Act & Assert
|
|
Assert.True(PageDirectiveFeature.TryGetPageDirective(projectItem, out template));
|
|
Assert.Empty(template);
|
|
}
|
|
|
|
[Fact]
|
|
public void TryGetPageDirective_DirectiveWithContent_WithoutPath()
|
|
{
|
|
// Arrange
|
|
string template;
|
|
var projectItem = new TestRazorProjectItem(@"@page
|
|
Non-path things");
|
|
|
|
// Act & Assert
|
|
Assert.True(PageDirectiveFeature.TryGetPageDirective(projectItem, out template));
|
|
Assert.Empty(template);
|
|
}
|
|
|
|
[Fact]
|
|
public void TryGetPageDirective_NoDirective()
|
|
{
|
|
// Arrange
|
|
string template;
|
|
var projectItem = new TestRazorProjectItem(@"This is junk
|
|
Nobody will use it");
|
|
|
|
// Act & Assert
|
|
Assert.False(PageDirectiveFeature.TryGetPageDirective(projectItem, out template));
|
|
Assert.Null(template);
|
|
}
|
|
|
|
[Fact]
|
|
public void TryGetPageDirective_EmptyStream()
|
|
{
|
|
// Arrange
|
|
string template;
|
|
var projectItem = new TestRazorProjectItem(string.Empty);
|
|
|
|
// Act
|
|
Assert.False(PageDirectiveFeature.TryGetPageDirective(projectItem, out template));
|
|
Assert.Null(template);
|
|
}
|
|
|
|
[Fact]
|
|
public void TryGetPageDirective_NullProject()
|
|
{
|
|
// Arrange
|
|
string template;
|
|
|
|
// Act & Assert
|
|
Assert.Throws<ArgumentNullException>(() => PageDirectiveFeature.TryGetPageDirective(projectItem: null, template: out template));
|
|
}
|
|
|
|
[Fact]
|
|
public void TryGetPageDirective_NullStream()
|
|
{
|
|
// Arrange
|
|
string template;
|
|
var projectItem = new TestRazorProjectItem(content: null);
|
|
|
|
// Act & Assert
|
|
Assert.Throws<ArgumentNullException>(() => PageDirectiveFeature.TryGetPageDirective(projectItem, out template));
|
|
}
|
|
}
|
|
|
|
public class TestRazorProjectItem : RazorProjectItem
|
|
{
|
|
private string _content;
|
|
|
|
public TestRazorProjectItem(string content)
|
|
{
|
|
_content = content;
|
|
}
|
|
|
|
public override string BasePath
|
|
{
|
|
get
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
|
|
public override bool Exists
|
|
{
|
|
get
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
|
|
public override string Path
|
|
{
|
|
get
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
|
|
public override string PhysicalPath
|
|
{
|
|
get
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
|
|
public override Stream Read()
|
|
{
|
|
if (_content == null)
|
|
{
|
|
return null;
|
|
}
|
|
else
|
|
{
|
|
return new MemoryStream(Encoding.UTF8.GetBytes(_content));
|
|
}
|
|
}
|
|
}
|
|
}
|