87 lines
3.0 KiB
C#
87 lines
3.0 KiB
C#
|
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
|
|||
|
|
|||
|
using System.Web.Razor.Editor;
|
|||
|
using System.Web.Razor.Generator;
|
|||
|
using System.Web.Razor.Parser;
|
|||
|
using System.Web.Razor.Parser.SyntaxTree;
|
|||
|
using System.Web.Razor.Test.Framework;
|
|||
|
using Xunit;
|
|||
|
using Xunit.Extensions;
|
|||
|
|
|||
|
namespace System.Web.Razor.Test.Parser.CSharp
|
|||
|
{
|
|||
|
public class CSharpLayoutDirectiveTest : CsHtmlCodeParserTestBase
|
|||
|
{
|
|||
|
[Theory]
|
|||
|
[InlineData("Layout")]
|
|||
|
[InlineData("LAYOUT")]
|
|||
|
[InlineData("layOut")]
|
|||
|
[InlineData("LayOut")]
|
|||
|
private void LayoutKeywordIsCaseSensitive(string word)
|
|||
|
{
|
|||
|
ParseBlockTest(word,
|
|||
|
new ExpressionBlock(
|
|||
|
Factory.Code(word)
|
|||
|
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
|||
|
.Accepts(AcceptedCharacters.NonWhiteSpace)
|
|||
|
));
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void LayoutDirectiveAcceptsAllTextToEndOfLine()
|
|||
|
{
|
|||
|
ParseBlockTest(@"@layout Foo Bar Baz",
|
|||
|
new DirectiveBlock(
|
|||
|
Factory.CodeTransition(),
|
|||
|
Factory.MetaCode("layout ").Accepts(AcceptedCharacters.None),
|
|||
|
Factory.MetaCode("Foo Bar Baz")
|
|||
|
.With(new SetLayoutCodeGenerator("Foo Bar Baz"))
|
|||
|
.WithEditorHints(EditorHints.VirtualPath | EditorHints.LayoutPage)
|
|||
|
)
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void LayoutDirectiveAcceptsAnyIfNoWhitespaceFollowingLayoutKeyword()
|
|||
|
{
|
|||
|
ParseBlockTest(@"@layout",
|
|||
|
new DirectiveBlock(
|
|||
|
Factory.CodeTransition(),
|
|||
|
Factory.MetaCode("layout")
|
|||
|
)
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void LayoutDirectiveOutputsMarkerSpanIfAnyWhitespaceAfterLayoutKeyword()
|
|||
|
{
|
|||
|
ParseBlockTest(@"@layout ",
|
|||
|
new DirectiveBlock(
|
|||
|
Factory.CodeTransition(),
|
|||
|
Factory.MetaCode("layout ").Accepts(AcceptedCharacters.None),
|
|||
|
Factory.EmptyCSharp()
|
|||
|
.AsMetaCode()
|
|||
|
.With(new SetLayoutCodeGenerator(String.Empty))
|
|||
|
.WithEditorHints(EditorHints.VirtualPath | EditorHints.LayoutPage)
|
|||
|
)
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void LayoutDirectiveAcceptsTrailingNewlineButDoesNotIncludeItInLayoutPath()
|
|||
|
{
|
|||
|
ParseBlockTest(@"@layout Foo
|
|||
|
",
|
|||
|
new DirectiveBlock(
|
|||
|
Factory.CodeTransition(),
|
|||
|
Factory.MetaCode("layout ").Accepts(AcceptedCharacters.None),
|
|||
|
Factory.MetaCode("Foo\r\n")
|
|||
|
.With(new SetLayoutCodeGenerator("Foo"))
|
|||
|
.Accepts(AcceptedCharacters.None)
|
|||
|
.WithEditorHints(EditorHints.VirtualPath | EditorHints.LayoutPage)
|
|||
|
)
|
|||
|
);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|