121 lines
5.9 KiB
C#
121 lines
5.9 KiB
C#
|
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
|
|||
|
|
|||
|
using System.Web.Razor.Parser.SyntaxTree;
|
|||
|
using System.Web.Razor.Resources;
|
|||
|
using System.Web.Razor.Test.Framework;
|
|||
|
using System.Web.Razor.Text;
|
|||
|
using Xunit;
|
|||
|
|
|||
|
namespace System.Web.Razor.Test.Parser.CSharp
|
|||
|
{
|
|||
|
public class CSharpVerbatimBlockTest : CsHtmlCodeParserTestBase
|
|||
|
{
|
|||
|
private const string TestExtraKeyword = "model";
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void VerbatimBlock()
|
|||
|
{
|
|||
|
ParseBlockTest("@{ foo(); }",
|
|||
|
new StatementBlock(
|
|||
|
Factory.CodeTransition(),
|
|||
|
Factory.MetaCode("{")
|
|||
|
.Accepts(AcceptedCharacters.None),
|
|||
|
Factory.Code(" foo(); ")
|
|||
|
.AsStatement(),
|
|||
|
Factory.MetaCode("}")
|
|||
|
.Accepts(AcceptedCharacters.None)
|
|||
|
));
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void InnerImplicitExpressionWithOnlySingleAtOutputsZeroLengthCodeSpan()
|
|||
|
{
|
|||
|
ParseBlockTest(@"{@}",
|
|||
|
new StatementBlock(
|
|||
|
Factory.MetaCode("{").Accepts(AcceptedCharacters.None),
|
|||
|
Factory.EmptyCSharp().AsStatement(),
|
|||
|
new ExpressionBlock(
|
|||
|
Factory.CodeTransition(),
|
|||
|
Factory.EmptyCSharp().AsImplicitExpression(KeywordSet, acceptTrailingDot: true).Accepts(AcceptedCharacters.NonWhiteSpace)
|
|||
|
),
|
|||
|
Factory.EmptyCSharp().AsStatement(),
|
|||
|
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
|
|||
|
designTimeParser: true,
|
|||
|
expectedErrors: new[]
|
|||
|
{
|
|||
|
new RazorError(String.Format(RazorResources.ParseError_Unexpected_Character_At_Start_Of_CodeBlock_CS, "}"), new SourceLocation(2, 0, 2))
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void InnerImplicitExpressionDoesNotAcceptDotAfterAt()
|
|||
|
{
|
|||
|
ParseBlockTest(@"{@.}",
|
|||
|
new StatementBlock(
|
|||
|
Factory.MetaCode("{").Accepts(AcceptedCharacters.None),
|
|||
|
Factory.EmptyCSharp().AsStatement(),
|
|||
|
new ExpressionBlock(
|
|||
|
Factory.CodeTransition(),
|
|||
|
Factory.EmptyCSharp().AsImplicitExpression(KeywordSet, acceptTrailingDot: true).Accepts(AcceptedCharacters.NonWhiteSpace)
|
|||
|
),
|
|||
|
Factory.Code(".").AsStatement(),
|
|||
|
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
|
|||
|
designTimeParser: true,
|
|||
|
expectedErrors: new[]
|
|||
|
{
|
|||
|
new RazorError(String.Format(RazorResources.ParseError_Unexpected_Character_At_Start_Of_CodeBlock_CS, "."), new SourceLocation(2, 0, 2))
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void InnerImplicitExpressionWithOnlySingleAtAcceptsSingleSpaceOrNewlineAtDesignTime()
|
|||
|
{
|
|||
|
ParseBlockTest(@"{
|
|||
|
@
|
|||
|
}",
|
|||
|
new StatementBlock(
|
|||
|
Factory.MetaCode("{").Accepts(AcceptedCharacters.None),
|
|||
|
Factory.Code("\r\n ").AsStatement(),
|
|||
|
new ExpressionBlock(
|
|||
|
Factory.CodeTransition(),
|
|||
|
Factory.EmptyCSharp().AsImplicitExpression(KeywordSet, acceptTrailingDot: true).Accepts(AcceptedCharacters.NonWhiteSpace)
|
|||
|
),
|
|||
|
Factory.Code("\r\n").AsStatement(),
|
|||
|
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
|
|||
|
/* designTimeParser */ true,
|
|||
|
new RazorError(RazorResources.ParseError_Unexpected_WhiteSpace_At_Start_Of_CodeBlock_CS, 8, 1, 5));
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void InnerImplicitExpressionDoesNotAcceptTrailingNewlineInRunTimeMode()
|
|||
|
{
|
|||
|
ParseBlockTest(@"{@foo.
|
|||
|
}",
|
|||
|
new StatementBlock(
|
|||
|
Factory.MetaCode("{").Accepts(AcceptedCharacters.None),
|
|||
|
Factory.EmptyCSharp().AsStatement(),
|
|||
|
new ExpressionBlock(
|
|||
|
Factory.CodeTransition(),
|
|||
|
Factory.Code(@"foo.").AsImplicitExpression(KeywordSet, acceptTrailingDot: true).Accepts(AcceptedCharacters.NonWhiteSpace)),
|
|||
|
Factory.Code("\r\n").AsStatement(),
|
|||
|
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)));
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void InnerImplicitExpressionAcceptsTrailingNewlineInDesignTimeMode()
|
|||
|
{
|
|||
|
ParseBlockTest(@"{@foo.
|
|||
|
}",
|
|||
|
new StatementBlock(
|
|||
|
Factory.MetaCode("{").Accepts(AcceptedCharacters.None),
|
|||
|
Factory.EmptyCSharp().AsStatement(),
|
|||
|
new ExpressionBlock(
|
|||
|
Factory.CodeTransition(),
|
|||
|
Factory.Code(@"foo.").AsImplicitExpression(KeywordSet, acceptTrailingDot: true).Accepts(AcceptedCharacters.NonWhiteSpace)),
|
|||
|
Factory.Code("\r\n").AsStatement(),
|
|||
|
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
|
|||
|
designTimeParser: true);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|