172 lines
6.7 KiB
C#
172 lines
6.7 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.Resources;
|
|||
|
using System.Web.Razor.Test.Framework;
|
|||
|
using Xunit;
|
|||
|
|
|||
|
namespace System.Web.Razor.Test.Parser.VB
|
|||
|
{
|
|||
|
public class VBSpecialKeywordsTest : VBHtmlCodeParserTestBase
|
|||
|
{
|
|||
|
[Fact]
|
|||
|
public void ParseInheritsStatementMarksInheritsSpanAsCanGrowIfMissingTrailingSpace()
|
|||
|
{
|
|||
|
ParseBlockTest("inherits",
|
|||
|
new DirectiveBlock(
|
|||
|
Factory.MetaCode("inherits")),
|
|||
|
new RazorError(
|
|||
|
RazorResources.ParseError_InheritsKeyword_Must_Be_Followed_By_TypeName,
|
|||
|
8, 0, 8));
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void InheritsBlockAcceptsMultipleGenericArguments()
|
|||
|
{
|
|||
|
ParseBlockTest("inherits Foo.Bar(Of Biz(Of Qux), String, Integer).Baz",
|
|||
|
new DirectiveBlock(
|
|||
|
Factory.MetaCode("inherits ").Accepts(AcceptedCharacters.None),
|
|||
|
Factory.Code("Foo.Bar(Of Biz(Of Qux), String, Integer).Baz")
|
|||
|
.AsBaseType("Foo.Bar(Of Biz(Of Qux), String, Integer).Baz")));
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void InheritsDirectiveSupportsVSTemplateTokens()
|
|||
|
{
|
|||
|
ParseBlockTest("@Inherits $rootnamespace$.MyBase",
|
|||
|
new DirectiveBlock(
|
|||
|
Factory.CodeTransition(),
|
|||
|
Factory.MetaCode("Inherits ")
|
|||
|
.Accepts(AcceptedCharacters.None),
|
|||
|
Factory.Code("$rootnamespace$.MyBase")
|
|||
|
.AsBaseType("$rootnamespace$.MyBase")));
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void InheritsBlockOutputsErrorIfInheritsNotFollowedByTypeButAcceptsEntireLineAsCode()
|
|||
|
{
|
|||
|
ParseBlockTest(@"inherits
|
|||
|
foo",
|
|||
|
new DirectiveBlock(
|
|||
|
Factory.MetaCode("inherits ").Accepts(AcceptedCharacters.None),
|
|||
|
Factory.Code("\r\n").AsBaseType(String.Empty)),
|
|||
|
new RazorError(
|
|||
|
RazorResources.ParseError_InheritsKeyword_Must_Be_Followed_By_TypeName,
|
|||
|
8, 0, 8));
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ParseBlockShouldSupportNamespaceImports()
|
|||
|
{
|
|||
|
ParseBlockTest("Imports Foo.Bar.Baz.Biz.Boz",
|
|||
|
new DirectiveBlock(
|
|||
|
Factory.MetaCode("Imports Foo.Bar.Baz.Biz.Boz")
|
|||
|
.With(new AddImportCodeGenerator(
|
|||
|
ns: " Foo.Bar.Baz.Biz.Boz",
|
|||
|
namespaceKeywordLength: SyntaxConstants.VB.ImportsKeywordLength))));
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ParseBlockShowsErrorIfNamespaceNotOnSameLineAsImportsKeyword()
|
|||
|
{
|
|||
|
ParseBlockTest(@"Imports
|
|||
|
Foo",
|
|||
|
new DirectiveBlock(
|
|||
|
Factory.MetaCode("Imports\r\n")
|
|||
|
.With(new AddImportCodeGenerator(
|
|||
|
ns: "\r\n",
|
|||
|
namespaceKeywordLength: SyntaxConstants.VB.ImportsKeywordLength))),
|
|||
|
new RazorError(
|
|||
|
RazorResources.ParseError_NamespaceOrTypeAliasExpected,
|
|||
|
7, 0, 7));
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ParseBlockShowsErrorIfTypeBeingAliasedNotOnSameLineAsImportsKeyword()
|
|||
|
{
|
|||
|
ParseBlockTest(@"Imports Foo =
|
|||
|
System.Bar",
|
|||
|
new DirectiveBlock(
|
|||
|
Factory.MetaCode("Imports Foo =\r\n")
|
|||
|
.With(new AddImportCodeGenerator(
|
|||
|
ns: " Foo =\r\n",
|
|||
|
namespaceKeywordLength: SyntaxConstants.VB.ImportsKeywordLength))));
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ParseBlockShouldSupportTypeAliases()
|
|||
|
{
|
|||
|
ParseBlockTest("Imports Foo = Bar.Baz.Biz.Boz",
|
|||
|
new DirectiveBlock(
|
|||
|
Factory.MetaCode("Imports Foo = Bar.Baz.Biz.Boz")
|
|||
|
.With(new AddImportCodeGenerator(
|
|||
|
ns: " Foo = Bar.Baz.Biz.Boz",
|
|||
|
namespaceKeywordLength: SyntaxConstants.VB.ImportsKeywordLength))));
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ParseBlockThrowsErrorIfOptionIsNotFollowedByStrictOrExplicit()
|
|||
|
{
|
|||
|
ParseBlockTest("Option FizzBuzz On",
|
|||
|
new DirectiveBlock(
|
|||
|
Factory.MetaCode("Option FizzBuzz On")
|
|||
|
.With(new SetVBOptionCodeGenerator(optionName: null, value: true))),
|
|||
|
new RazorError(
|
|||
|
String.Format(RazorResources.ParseError_UnknownOption, "FizzBuzz"),
|
|||
|
7, 0, 7));
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ParseBlockThrowsErrorIfOptionStrictIsNotFollowedByOnOrOff()
|
|||
|
{
|
|||
|
ParseBlockTest("Option Strict Yes",
|
|||
|
new DirectiveBlock(
|
|||
|
Factory.MetaCode("Option Strict Yes")
|
|||
|
.With(SetVBOptionCodeGenerator.Strict(true))),
|
|||
|
new RazorError(
|
|||
|
String.Format(
|
|||
|
RazorResources.ParseError_InvalidOptionValue,
|
|||
|
"Strict", "Yes"),
|
|||
|
14, 0, 14));
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ParseBlockReadsToAfterOnKeywordIfOptionStrictBlock()
|
|||
|
{
|
|||
|
ParseBlockTest("Option Strict On Foo Bar Baz",
|
|||
|
new DirectiveBlock(
|
|||
|
Factory.MetaCode("Option Strict On")
|
|||
|
.With(SetVBOptionCodeGenerator.Strict(true))));
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ParseBlockReadsToAfterOffKeywordIfOptionStrictBlock()
|
|||
|
{
|
|||
|
ParseBlockTest("Option Strict Off Foo Bar Baz",
|
|||
|
new DirectiveBlock(
|
|||
|
Factory.MetaCode("Option Strict Off")
|
|||
|
.With(SetVBOptionCodeGenerator.Strict(false))));
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ParseBlockReadsToAfterOnKeywordIfOptionExplicitBlock()
|
|||
|
{
|
|||
|
ParseBlockTest("Option Explicit On Foo Bar Baz",
|
|||
|
new DirectiveBlock(
|
|||
|
Factory.MetaCode("Option Explicit On")
|
|||
|
.With(SetVBOptionCodeGenerator.Explicit(true))));
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void ParseBlockReadsToAfterOffKeywordIfOptionExplicitBlock()
|
|||
|
{
|
|||
|
ParseBlockTest("Option Explicit Off Foo Bar Baz",
|
|||
|
new DirectiveBlock(
|
|||
|
Factory.MetaCode("Option Explicit Off")
|
|||
|
.With(SetVBOptionCodeGenerator.Explicit(false))));
|
|||
|
}
|
|||
|
}
|
|||
|
}
|