a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
164 lines
6.9 KiB
C#
164 lines
6.9 KiB
C#
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
|
|
|
|
using System.Web.Razor.Generator;
|
|
using System.Web.Razor.Parser;
|
|
using System.Web.Razor.Parser.SyntaxTree;
|
|
using System.Web.Razor.Test.Framework;
|
|
using System.Web.Razor.Text;
|
|
using Xunit;
|
|
|
|
namespace System.Web.Razor.Test.Parser.CSharp
|
|
{
|
|
public class CSharpDirectivesTest : CsHtmlCodeParserTestBase
|
|
{
|
|
[Fact]
|
|
public void InheritsDirective()
|
|
{
|
|
ParseBlockTest("@inherits System.Web.WebPages.WebPage",
|
|
new DirectiveBlock(
|
|
Factory.CodeTransition(),
|
|
Factory.MetaCode(SyntaxConstants.CSharp.InheritsKeyword + " ")
|
|
.Accepts(AcceptedCharacters.None),
|
|
Factory.Code("System.Web.WebPages.WebPage")
|
|
.AsBaseType("System.Web.WebPages.WebPage")));
|
|
}
|
|
|
|
[Fact]
|
|
public void InheritsDirectiveSupportsArrays()
|
|
{
|
|
ParseBlockTest("@inherits string[[]][]",
|
|
new DirectiveBlock(
|
|
Factory.CodeTransition(),
|
|
Factory.MetaCode(SyntaxConstants.CSharp.InheritsKeyword + " ")
|
|
.Accepts(AcceptedCharacters.None),
|
|
Factory.Code("string[[]][]")
|
|
.AsBaseType("string[[]][]")));
|
|
}
|
|
|
|
[Fact]
|
|
public void InheritsDirectiveSupportsNestedGenerics()
|
|
{
|
|
ParseBlockTest("@inherits System.Web.Mvc.WebViewPage<IEnumerable<MvcApplication2.Models.RegisterModel>>",
|
|
new DirectiveBlock(
|
|
Factory.CodeTransition(),
|
|
Factory.MetaCode(SyntaxConstants.CSharp.InheritsKeyword + " ")
|
|
.Accepts(AcceptedCharacters.None),
|
|
Factory.Code("System.Web.Mvc.WebViewPage<IEnumerable<MvcApplication2.Models.RegisterModel>>")
|
|
.AsBaseType("System.Web.Mvc.WebViewPage<IEnumerable<MvcApplication2.Models.RegisterModel>>")));
|
|
}
|
|
|
|
[Fact]
|
|
public void InheritsDirectiveSupportsTypeKeywords()
|
|
{
|
|
ParseBlockTest("@inherits string",
|
|
new DirectiveBlock(
|
|
Factory.CodeTransition(),
|
|
Factory.MetaCode(SyntaxConstants.CSharp.InheritsKeyword + " ")
|
|
.Accepts(AcceptedCharacters.None),
|
|
Factory.Code("string")
|
|
.AsBaseType("string")));
|
|
}
|
|
|
|
[Fact]
|
|
public void InheritsDirectiveSupportsVSTemplateTokens()
|
|
{
|
|
ParseBlockTest("@inherits $rootnamespace$.MyBase",
|
|
new DirectiveBlock(
|
|
Factory.CodeTransition(),
|
|
Factory.MetaCode(SyntaxConstants.CSharp.InheritsKeyword + " ")
|
|
.Accepts(AcceptedCharacters.None),
|
|
Factory.Code("$rootnamespace$.MyBase")
|
|
.AsBaseType("$rootnamespace$.MyBase")));
|
|
}
|
|
|
|
[Fact]
|
|
public void SessionStateDirectiveWorks()
|
|
{
|
|
ParseBlockTest("@sessionstate InProc",
|
|
new DirectiveBlock(
|
|
Factory.CodeTransition(),
|
|
Factory.MetaCode(SyntaxConstants.CSharp.SessionStateKeyword + " ")
|
|
.Accepts(AcceptedCharacters.None),
|
|
Factory.Code("InProc")
|
|
.AsRazorDirectiveAttribute("sessionstate", "InProc")
|
|
));
|
|
}
|
|
|
|
[Fact]
|
|
public void SessionStateDirectiveParsesInvalidSessionValue()
|
|
{
|
|
ParseBlockTest("@sessionstate Blah",
|
|
new DirectiveBlock(
|
|
Factory.CodeTransition(),
|
|
Factory.MetaCode(SyntaxConstants.CSharp.SessionStateKeyword + " ")
|
|
.Accepts(AcceptedCharacters.None),
|
|
Factory.Code("Blah")
|
|
.AsRazorDirectiveAttribute("sessionstate", "Blah")
|
|
));
|
|
}
|
|
|
|
[Fact]
|
|
public void FunctionsDirective()
|
|
{
|
|
ParseBlockTest("@functions { foo(); bar(); }",
|
|
new FunctionsBlock(
|
|
Factory.CodeTransition(),
|
|
Factory.MetaCode(SyntaxConstants.CSharp.FunctionsKeyword + " {")
|
|
.Accepts(AcceptedCharacters.None),
|
|
Factory.Code(" foo(); bar(); ")
|
|
.AsFunctionsBody(),
|
|
Factory.MetaCode("}")
|
|
.Accepts(AcceptedCharacters.None)));
|
|
}
|
|
|
|
[Fact]
|
|
public void EmptyFunctionsDirective()
|
|
{
|
|
ParseBlockTest("@functions { }",
|
|
new FunctionsBlock(
|
|
Factory.CodeTransition(),
|
|
Factory.MetaCode(SyntaxConstants.CSharp.FunctionsKeyword + " {")
|
|
.Accepts(AcceptedCharacters.None),
|
|
Factory.Code(" ")
|
|
.AsFunctionsBody(),
|
|
Factory.MetaCode("}")
|
|
.Accepts(AcceptedCharacters.None)));
|
|
}
|
|
|
|
[Fact]
|
|
public void SectionDirective()
|
|
{
|
|
ParseBlockTest("@section Header { <p>F{o}o</p> }",
|
|
new SectionBlock(new SectionCodeGenerator("Header"),
|
|
Factory.CodeTransition(),
|
|
Factory.MetaCode("section Header {")
|
|
.AutoCompleteWith(null, atEndOfSpan: true)
|
|
.Accepts(AcceptedCharacters.Any),
|
|
new MarkupBlock(
|
|
Factory.Markup(" <p>F", "{", "o", "}", "o", "</p> ")),
|
|
Factory.MetaCode("}")
|
|
.Accepts(AcceptedCharacters.None)));
|
|
}
|
|
|
|
[Fact]
|
|
public void HelperDirective()
|
|
{
|
|
ParseBlockTest("@helper Strong(string value) { foo(); }",
|
|
new HelperBlock(new HelperCodeGenerator(new LocationTagged<string>("Strong(string value) {", new SourceLocation(8, 0, 8)), headerComplete: true),
|
|
Factory.CodeTransition(),
|
|
Factory.MetaCode("helper ")
|
|
.Accepts(AcceptedCharacters.None),
|
|
Factory.Code("Strong(string value) {")
|
|
.Hidden()
|
|
.Accepts(AcceptedCharacters.None),
|
|
new StatementBlock(
|
|
Factory.Code(" foo(); ")
|
|
.AsStatement()
|
|
.With(new StatementCodeGenerator())),
|
|
Factory.Code("}")
|
|
.Hidden()
|
|
.Accepts(AcceptedCharacters.None)));
|
|
}
|
|
}
|
|
}
|