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

142 lines
6.1 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 CSharpExplicitExpressionTest : CsHtmlCodeParserTestBase
{
[Fact]
public void ParseBlockShouldOutputZeroLengthCodeSpanIfExplicitExpressionIsEmpty()
{
ParseBlockTest("@()",
new ExpressionBlock(
Factory.CodeTransition(),
Factory.MetaCode("(").Accepts(AcceptedCharacters.None),
Factory.EmptyCSharp().AsExpression(),
Factory.MetaCode(")").Accepts(AcceptedCharacters.None)
));
}
[Fact]
public void ParseBlockShouldOutputZeroLengthCodeSpanIfEOFOccursAfterStartOfExplicitExpression()
{
ParseBlockTest("@(",
new ExpressionBlock(
Factory.CodeTransition(),
Factory.MetaCode("(").Accepts(AcceptedCharacters.None),
Factory.EmptyCSharp().AsExpression()
),
new RazorError(
String.Format(RazorResources.ParseError_Expected_EndOfBlock_Before_EOF,
RazorResources.BlockName_ExplicitExpression,
")", "("),
new SourceLocation(1, 0, 1)));
}
[Fact]
public void ParseBlockShouldAcceptEscapedQuoteInNonVerbatimStrings()
{
ParseBlockTest("@(\"\\\"\")",
new ExpressionBlock(
Factory.CodeTransition(),
Factory.MetaCode("(").Accepts(AcceptedCharacters.None),
Factory.Code("\"\\\"\"").AsExpression(),
Factory.MetaCode(")").Accepts(AcceptedCharacters.None)
));
}
[Fact]
public void ParseBlockShouldAcceptEscapedQuoteInVerbatimStrings()
{
ParseBlockTest("@(@\"\"\"\")",
new ExpressionBlock(
Factory.CodeTransition(),
Factory.MetaCode("(").Accepts(AcceptedCharacters.None),
Factory.Code("@\"\"\"\"").AsExpression(),
Factory.MetaCode(")").Accepts(AcceptedCharacters.None)
));
}
[Fact]
public void ParseBlockShouldAcceptMultipleRepeatedEscapedQuoteInVerbatimStrings()
{
ParseBlockTest("@(@\"\"\"\"\"\")",
new ExpressionBlock(
Factory.CodeTransition(),
Factory.MetaCode("(").Accepts(AcceptedCharacters.None),
Factory.Code("@\"\"\"\"\"\"").AsExpression(),
Factory.MetaCode(")").Accepts(AcceptedCharacters.None)
));
}
[Fact]
public void ParseBlockShouldAcceptMultiLineVerbatimStrings()
{
ParseBlockTest(@"@(@""
Foo
Bar
Baz
"")",
new ExpressionBlock(
Factory.CodeTransition(),
Factory.MetaCode("(").Accepts(AcceptedCharacters.None),
Factory.Code("@\"\r\nFoo\r\nBar\r\nBaz\r\n\"").AsExpression(),
Factory.MetaCode(")").Accepts(AcceptedCharacters.None)
));
}
[Fact]
public void ParseBlockShouldAcceptMultipleEscapedQuotesInNonVerbatimStrings()
{
ParseBlockTest("@(\"\\\"hello, world\\\"\")",
new ExpressionBlock(
Factory.CodeTransition(),
Factory.MetaCode("(").Accepts(AcceptedCharacters.None),
Factory.Code("\"\\\"hello, world\\\"\"").AsExpression(),
Factory.MetaCode(")").Accepts(AcceptedCharacters.None)
));
}
[Fact]
public void ParseBlockShouldAcceptMultipleEscapedQuotesInVerbatimStrings()
{
ParseBlockTest("@(@\"\"\"hello, world\"\"\")",
new ExpressionBlock(
Factory.CodeTransition(),
Factory.MetaCode("(").Accepts(AcceptedCharacters.None),
Factory.Code("@\"\"\"hello, world\"\"\"").AsExpression(),
Factory.MetaCode(")").Accepts(AcceptedCharacters.None)
));
}
[Fact]
public void ParseBlockShouldAcceptConsecutiveEscapedQuotesInNonVerbatimStrings()
{
ParseBlockTest("@(\"\\\"\\\"\")",
new ExpressionBlock(
Factory.CodeTransition(),
Factory.MetaCode("(").Accepts(AcceptedCharacters.None),
Factory.Code("\"\\\"\\\"\"").AsExpression(),
Factory.MetaCode(")").Accepts(AcceptedCharacters.None)
));
}
[Fact]
public void ParseBlockShouldAcceptConsecutiveEscapedQuotesInVerbatimStrings()
{
ParseBlockTest("@(@\"\"\"\"\"\")",
new ExpressionBlock(
Factory.CodeTransition(),
Factory.MetaCode("(").Accepts(AcceptedCharacters.None),
Factory.Code("@\"\"\"\"\"\"").AsExpression(),
Factory.MetaCode(")").Accepts(AcceptedCharacters.None)
));
}
}
}