From a92089d2f93c4eb44702485aced7312365daf34c Mon Sep 17 00:00:00 2001 From: Ajay Bhargav Baaskaran Date: Mon, 25 Jun 2018 13:33:38 -0700 Subject: [PATCH] Converted CSharpDirectivesTest to use baselines --- .../Legacy/AddTagHelperChunkGenerator.cs | 2 +- .../Legacy/DirectiveChunkGenerator.cs | 2 +- .../Legacy/RemoveTagHelperChunkGenerator.cs | 2 +- .../TagHelperPrefixDirectiveChunkGenerator.cs | 2 +- .../Legacy/CSharpCodeParserTest.cs | 215 +++ .../Legacy/CSharpDirectivesTest.cs | 1335 ++--------------- ...sDirectiveAutoCompleteAtEOF.syntaxtree.txt | 2 +- ...veAutoCompleteAtStartOfFile.syntaxtree.txt | 2 +- ...nDirectiveAutoCompleteAtEOF.syntaxtree.txt | 2 +- ...veAutoCompleteAtStartOfFile.syntaxtree.txt | 2 +- ...iresDoubleQuotesAroundValue.syntaxtree.txt | 10 + ...InvalidLookupText_AddsError.syntaxtree.txt | 9 + ...erDirective_NoValue_Invalid.syntaxtree.txt | 9 + ...lperDirective_RequiresValue.syntaxtree.txt | 9 + ...tive_SingleQuotes_AddsError.syntaxtree.txt | 9 + ...iresDoubleQuotesAroundValue.syntaxtree.txt | 9 + ...perDirective_SupportsSpaces.syntaxtree.txt | 13 + ...InvalidLookupText_AddsError.syntaxtree.txt | 9 + ...rtOfLineBecauseOfWhitespace.syntaxtree.txt | 12 + ...iveErrorsIfNotAtStartOfLine.syntaxtree.txt | 18 + ...criptor_AllowsNullableTypes.syntaxtree.txt | 71 + ...Descriptor_AllowsTupleTypes.syntaxtree.txt | 155 ++ ...s_IgnoresTrailingWhitespace.syntaxtree.txt | 17 + ...llowsWhiteSpaceAroundTokens.syntaxtree.txt | 21 + ...OFIncompleteNamespaceTokens.syntaxtree.txt | 7 + ...leEOFInvalidNamespaceTokens.syntaxtree.txt | 7 + ...leIncompleteNamespaceTokens.syntaxtree.txt | 7 + ...andleInvalidNamespaceTokens.syntaxtree.txt | 7 + ...sExtraContentAfterDirective.syntaxtree.txt | 11 + ...rrorsForInvalidMemberTokens.syntaxtree.txt | 7 + ...OFBeforeDirectiveBlockStart.syntaxtree.txt | 9 + ...xtraContentBeforeBlockStart.syntaxtree.txt | 11 + ...r_ErrorsWhenMissingEndBrace.syntaxtree.txt | 15 + ...Occurring_CanHaveDuplicates.syntaxtree.txt | 39 + ...Occurring_ErrorsIfDuplicate.syntaxtree.txt | 39 + ...CanBeBeneathOtherDirectives.syntaxtree.txt | 33 + ...eSpaceCommentsAndDirectives.syntaxtree.txt | 65 + ...rorsSemicolonAfterDirective.syntaxtree.txt | 15 + ...arserErrorForNonStringValue.syntaxtree.txt | 7 + ...rErrorForPartialQuotedValue.syntaxtree.txt | 7 + ...erErrorForSingleQuotedValue.syntaxtree.txt | 7 + ...ParserErrorForUnquotedValue.syntaxtree.txt | 7 + ...okensMustBeSeparatedBySpace.syntaxtree.txt | 9 + ...iptor_UnderstandsCodeBlocks.syntaxtree.txt | 27 + ...tor_UnderstandsMemberTokens.syntaxtree.txt | 9 + ...r_UnderstandsMultipleTokens.syntaxtree.txt | 23 + ...ptor_UnderstandsRazorBlocks.syntaxtree.txt | 37 + ...tor_UnderstandsStringTokens.syntaxtree.txt | 9 + ...iptor_UnderstandsTypeTokens.syntaxtree.txt | 15 + ...es_CanUseReservedWord_Class.syntaxtree.txt | 5 + ...anUseReservedWord_Namespace.syntaxtree.txt | 5 + .../EmptyFunctionsDirective.syntaxtree.txt | 13 + ...rtOfLineBecauseOfWhitespace.syntaxtree.txt | 18 + ...iveErrorsIfNotAtStartOfLine.syntaxtree.txt | 26 + ...ritsDirectiveSupportsArrays.syntaxtree.txt | 20 + ...ctiveSupportsNestedGenerics.syntaxtree.txt | 30 + ...rectiveSupportsTypeKeywords.syntaxtree.txt | 14 + ...lDirectiveTokens_AreSkipped.syntaxtree.txt | 7 + ...Tokens_WithBraces_AreParsed.syntaxtree.txt | 9 + ...pleOptionalTokens_AreParsed.syntaxtree.txt | 15 + ..._WithSimpleTokens_AreParsed.syntaxtree.txt | 9 + ...ithMemberSpecified_IsParsed.syntaxtree.txt | 9 + ..._WithMissingMember_IsParsed.syntaxtree.txt | 9 + .../Parse_FunctionsDirective.syntaxtree.txt | 23 + .../Parse_SectionDirective.syntaxtree.txt | 37 + ...eToken_WithMultipleSegments.syntaxtree.txt | 13 + ...tiveToken_WithSingleSegment.syntaxtree.txt | 9 + ...iresDoubleQuotesAroundValue.syntaxtree.txt | 10 + ...InvalidLookupText_AddsError.syntaxtree.txt | 9 + ...erDirective_NoValue_Invalid.syntaxtree.txt | 9 + ...lperDirective_RequiresValue.syntaxtree.txt | 9 + ...tive_SingleQuotes_AddsError.syntaxtree.txt | 9 + ...iresDoubleQuotesAroundValue.syntaxtree.txt | 9 + ...perDirective_SupportsSpaces.syntaxtree.txt | 13 + ...InvalidLookupText_AddsError.syntaxtree.txt | 9 + ...iresDoubleQuotesAroundValue.syntaxtree.txt | 11 + ...ixDirective_NoValueSucceeds.syntaxtree.txt | 9 + ...efixDirective_RequiresValue.syntaxtree.txt | 9 + ...iresDoubleQuotesAroundValue.syntaxtree.txt | 9 + ...perPrefixDirective_Succeeds.syntaxtree.txt | 9 + ...rective_WithQuotes_Succeeds.syntaxtree.txt | 9 + .../Language/Legacy/ParserTestBase.cs | 13 +- .../Language/Legacy/SyntaxTreeNodeWriter.cs | 2 +- 83 files changed, 1591 insertions(+), 1194 deletions(-) create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpCodeParserTest.cs create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_EndQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_InvalidLookupText_AddsError.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_NoValue_Invalid.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_RequiresValue.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_SingleQuotes_AddsError.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_StartQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_SupportsSpaces.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_WithQuotes_InvalidLookupText_AddsError.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/BuiltInDirectiveDoesNotErorrIfNotAtStartOfLineBecauseOfWhitespace.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/BuiltInDirectiveErrorsIfNotAtStartOfLine.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_AllowsNullableTypes.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_AllowsTupleTypes.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_AllowsTupleTypes_IgnoresTrailingWhitespace.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_AllowsWhiteSpaceAroundTokens.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_CanHandleEOFIncompleteNamespaceTokens.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_CanHandleEOFInvalidNamespaceTokens.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_CanHandleIncompleteNamespaceTokens.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_CanHandleInvalidNamespaceTokens.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_ErrorsExtraContentAfterDirective.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_ErrorsForInvalidMemberTokens.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_ErrorsWhenEOFBeforeDirectiveBlockStart.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_ErrorsWhenExtraContentBeforeBlockStart.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_ErrorsWhenMissingEndBrace.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_FileScopedMultipleOccurring_CanHaveDuplicates.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_FileScopedSinglyOccurring_ErrorsIfDuplicate.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_FileScoped_CanBeBeneathOtherDirectives.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_FileScoped_CanBeBeneathOtherWhiteSpaceCommentsAndDirectives.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_NoErrorsSemicolonAfterDirective.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_StringToken_ParserErrorForNonStringValue.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_StringToken_ParserErrorForPartialQuotedValue.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_StringToken_ParserErrorForSingleQuotedValue.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_StringToken_ParserErrorForUnquotedValue.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_TokensMustBeSeparatedBySpace.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsCodeBlocks.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsMemberTokens.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsMultipleTokens.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsRazorBlocks.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsStringTokens.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsTypeTokens.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Directives_CanUseReservedWord_Class.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Directives_CanUseReservedWord_Namespace.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/EmptyFunctionsDirective.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/ExtensibleDirectiveDoesNotErorrIfNotAtStartOfLineBecauseOfWhitespace.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/ExtensibleDirectiveErrorsIfNotAtStartOfLine.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/InheritsDirectiveSupportsArrays.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/InheritsDirectiveSupportsNestedGenerics.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/InheritsDirectiveSupportsTypeKeywords.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalDirectiveTokens_AreSkipped.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalDirectiveTokens_WithBraces_AreParsed.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalDirectiveTokens_WithMultipleOptionalTokens_AreParsed.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalDirectiveTokens_WithSimpleTokens_AreParsed.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalMemberTokens_WithMemberSpecified_IsParsed.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalMemberTokens_WithMissingMember_IsParsed.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Parse_FunctionsDirective.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Parse_SectionDirective.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Parser_ParsesNamespaceDirectiveToken_WithMultipleSegments.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Parser_ParsesNamespaceDirectiveToken_WithSingleSegment.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_EndQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_InvalidLookupText_AddsError.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_NoValue_Invalid.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_RequiresValue.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_SingleQuotes_AddsError.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_StartQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_SupportsSpaces.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_WithQuotes_InvalidLookupText_AddsError.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_EndQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_NoValueSucceeds.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_RequiresValue.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_StartQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_Succeeds.syntaxtree.txt create mode 100644 test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_WithQuotes_Succeeds.syntaxtree.txt diff --git a/src/Microsoft.AspNetCore.Razor.Language/Legacy/AddTagHelperChunkGenerator.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/AddTagHelperChunkGenerator.cs index 0345a706a8..f446be12c0 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Legacy/AddTagHelperChunkGenerator.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/AddTagHelperChunkGenerator.cs @@ -80,7 +80,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy if (Diagnostics.Count > 0) { builder.Append(" ["); - var ids = string.Join(", ", Diagnostics.Select(diagnostic => diagnostic.Id)); + var ids = string.Join(", ", Diagnostics.Select(diagnostic => $"{diagnostic.Id}{diagnostic.Span}")); builder.Append(ids); builder.Append("]"); } diff --git a/src/Microsoft.AspNetCore.Razor.Language/Legacy/DirectiveChunkGenerator.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/DirectiveChunkGenerator.cs index b07399f032..19a6bad463 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Legacy/DirectiveChunkGenerator.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/DirectiveChunkGenerator.cs @@ -71,7 +71,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy if (Diagnostics.Count > 0) { builder.Append(" ["); - var ids = string.Join(", ", Diagnostics.Select(diagnostic => diagnostic.Id)); + var ids = string.Join(", ", Diagnostics.Select(diagnostic => $"{diagnostic.Id}{diagnostic.Span}")); builder.Append(ids); builder.Append("]"); } diff --git a/src/Microsoft.AspNetCore.Razor.Language/Legacy/RemoveTagHelperChunkGenerator.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/RemoveTagHelperChunkGenerator.cs index 914d4d15ee..58b170d33e 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Legacy/RemoveTagHelperChunkGenerator.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/RemoveTagHelperChunkGenerator.cs @@ -80,7 +80,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy if (Diagnostics.Count > 0) { builder.Append(" ["); - var ids = string.Join(", ", Diagnostics.Select(diagnostic => diagnostic.Id)); + var ids = string.Join(", ", Diagnostics.Select(diagnostic => $"{diagnostic.Id}{diagnostic.Span}")); builder.Append(ids); builder.Append("]"); } diff --git a/src/Microsoft.AspNetCore.Razor.Language/Legacy/TagHelperPrefixDirectiveChunkGenerator.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/TagHelperPrefixDirectiveChunkGenerator.cs index b116c5c3b3..f559ed585c 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Legacy/TagHelperPrefixDirectiveChunkGenerator.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/TagHelperPrefixDirectiveChunkGenerator.cs @@ -61,7 +61,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy if (Diagnostics.Count > 0) { builder.Append(" ["); - var ids = string.Join(", ", Diagnostics.Select(diagnostic => diagnostic.Id)); + var ids = string.Join(", ", Diagnostics.Select(diagnostic => $"{diagnostic.Id}{diagnostic.Span}")); builder.Append(ids); builder.Append("]"); } diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpCodeParserTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpCodeParserTest.cs new file mode 100644 index 0000000000..ea86c72226 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpCodeParserTest.cs @@ -0,0 +1,215 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.AspNetCore.Razor.Language.Legacy; +using Xunit; + +namespace Microsoft.AspNetCore.Razor.Language.Test.Legacy +{ + public class CSharpCodeParserTest + { + public static TheoryData InvalidTagHelperPrefixData + { + get + { + var directiveLocation = new SourceLocation(1, 2, 3); + + RazorDiagnostic InvalidPrefixError(int length, char character, string prefix) + { + return RazorDiagnosticFactory.CreateParsing_InvalidTagHelperPrefixValue( + new SourceSpan(directiveLocation, length), SyntaxConstants.CSharp.TagHelperPrefixKeyword, character, prefix); + } + + return new TheoryData> + { + { + "th ", + directiveLocation, + new[] + { + InvalidPrefixError(3, ' ', "th "), + } + }, + { + "th\t", + directiveLocation, + new[] + { + InvalidPrefixError(3, '\t', "th\t"), + } + }, + { + "th" + Environment.NewLine, + directiveLocation, + new[] + { + InvalidPrefixError(2 + Environment.NewLine.Length, Environment.NewLine[0], "th" + Environment.NewLine), + } + }, + { + " th ", + directiveLocation, + new[] + { + InvalidPrefixError(4, ' ', " th "), + } + }, + { + "@", + directiveLocation, + new[] + { + InvalidPrefixError(1, '@', "@"), + } + }, + { + "t@h", + directiveLocation, + new[] + { + InvalidPrefixError(3, '@', "t@h"), + } + }, + { + "!", + directiveLocation, + new[] + { + InvalidPrefixError(1, '!', "!"), + } + }, + { + "!th", + directiveLocation, + new[] + { + InvalidPrefixError(3, '!', "!th"), + } + }, + }; + } + } + + [Theory] + [MemberData(nameof(InvalidTagHelperPrefixData))] + public void ValidateTagHelperPrefix_ValidatesPrefix( + string directiveText, + SourceLocation directiveLocation, + object expectedErrors) + { + // Arrange + var expectedDiagnostics = (IEnumerable)expectedErrors; + var source = TestRazorSourceDocument.Create(); + var options = RazorParserOptions.CreateDefault(); + var context = new ParserContext(source, options); + + var parser = new CSharpCodeParser(context); + var diagnostics = new List(); + + // Act + parser.ValidateTagHelperPrefix(directiveText, directiveLocation, diagnostics); + + // Assert + Assert.Equal(expectedDiagnostics, diagnostics); + } + + [Theory] + [InlineData("foo,assemblyName", 4)] + [InlineData("foo, assemblyName", 5)] + [InlineData(" foo, assemblyName", 8)] + [InlineData(" foo , assemblyName", 11)] + [InlineData("foo, assemblyName", 8)] + [InlineData(" foo , assemblyName ", 14)] + public void ParseAddOrRemoveDirective_CalculatesAssemblyLocationInLookupText(string text, int assemblyLocation) + { + // Arrange + var source = TestRazorSourceDocument.Create(); + var options = RazorParserOptions.CreateDefault(); + var context = new ParserContext(source, options); + + var parser = new CSharpCodeParser(context); + + var directive = new CSharpCodeParser.ParsedDirective() + { + DirectiveText = text, + }; + + var diagnostics = new List(); + var expected = new SourceLocation(assemblyLocation, 0, assemblyLocation); + + // Act + var result = parser.ParseAddOrRemoveDirective(directive, SourceLocation.Zero, diagnostics); + + // Assert + Assert.Empty(diagnostics); + Assert.Equal("foo", result.TypePattern); + Assert.Equal("assemblyName", result.AssemblyName); + } + + [Theory] + [InlineData("", 1)] + [InlineData("*,", 2)] + [InlineData("?,", 2)] + [InlineData(",", 1)] + [InlineData(",,,", 3)] + [InlineData("First, ", 7)] + [InlineData("First , ", 8)] + [InlineData(" ,Second", 8)] + [InlineData(" , Second", 9)] + [InlineData("SomeType,", 9)] + [InlineData("SomeAssembly", 12)] + [InlineData("First,Second,Third", 18)] + public void ParseAddOrRemoveDirective_CreatesErrorIfInvalidLookupText_DoesNotThrow(string directiveText, int errorLength) + { + // Arrange + var source = TestRazorSourceDocument.Create(); + var options = RazorParserOptions.CreateDefault(); + var context = new ParserContext(source, options); + + var parser = new CSharpCodeParser(context); + + var directive = new CSharpCodeParser.ParsedDirective() + { + DirectiveText = directiveText + }; + + var diagnostics = new List(); + var expectedError = RazorDiagnosticFactory.CreateParsing_InvalidTagHelperLookupText( + new SourceSpan(new SourceLocation(1, 2, 3), errorLength), directiveText); + + // Act + var result = parser.ParseAddOrRemoveDirective(directive, new SourceLocation(1, 2, 3), diagnostics); + + // Assert + Assert.Same(directive, result); + + var error = Assert.Single(diagnostics); + Assert.Equal(expectedError, error); + } + + [Fact] + public void TagHelperPrefixDirective_DuplicatesCauseError() + { + // Arrange + var expectedDiagnostic = RazorDiagnosticFactory.CreateParsing_DuplicateDirective( + new SourceSpan(null, 22 + Environment.NewLine.Length, 1, 0, 16), "tagHelperPrefix"); + var source = TestRazorSourceDocument.Create( + @"@tagHelperPrefix ""th:"" +@tagHelperPrefix ""th""", + filePath: null); + + // Act + var document = RazorSyntaxTree.Parse(source); + + // Assert + var directive = document.Root.Children.OfType().Last(); + var erroredSpan = (Span)directive.Children.Last(); + var chunkGenerator = Assert.IsType(erroredSpan.ChunkGenerator); + var diagnostic = Assert.Single(chunkGenerator.Diagnostics); + Assert.Equal(expectedDiagnostic, diagnostic); + } + } +} diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpDirectivesTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpDirectivesTest.cs index c5a9fd9ed1..539b8f4745 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpDirectivesTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpDirectivesTest.cs @@ -11,6 +11,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy { public class CSharpDirectivesTest : CsHtmlCodeParserTestBase { + public CSharpDirectivesTest() + { + UseBaselineTests = true; + } + [Fact] public void DirectiveDescriptor_FileScopedMultipleOccurring_CanHaveDuplicates() { @@ -28,22 +33,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy ParseDocumentTest( @"@custom System.Text.Encoding.ASCIIEncoding @custom System.Text.Encoding.UTF8Encoding", - new[] { descriptor }, - new MarkupBlock( - Factory.EmptyHtml(), - new DirectiveBlock(new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "System.Text.Encoding.ASCIIEncoding", markup: false).AsDirectiveToken(descriptor.Tokens[0]), - Factory.Span(SpanKindInternal.Markup, Environment.NewLine, markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace)), - Factory.EmptyHtml(), - new DirectiveBlock(new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "System.Text.Encoding.UTF8Encoding", markup: false).AsDirectiveToken(descriptor.Tokens[0])), - Factory.EmptyHtml())); + new[] { descriptor }); } [Fact] @@ -58,37 +48,16 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy builder.Usage = DirectiveUsage.FileScopedSinglyOccurring; builder.AddTypeToken(); }); - var chunkGenerator = new DirectiveChunkGenerator(descriptor); - chunkGenerator.Diagnostics.Add( - RazorDiagnosticFactory.CreateParsing_DuplicateDirective( - new SourceSpan(new SourceLocation(42 + Environment.NewLine.Length, 1, 0), 7), "custom")); // Act & Assert ParseDocumentTest( @"@custom System.Text.Encoding.ASCIIEncoding @custom System.Text.Encoding.UTF8Encoding", - new[] { descriptor }, - new MarkupBlock( - Factory.EmptyHtml(), - new DirectiveBlock(new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "System.Text.Encoding.ASCIIEncoding", markup: false).AsDirectiveToken(descriptor.Tokens[0]), - Factory.Span(SpanKindInternal.Markup, Environment.NewLine, markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace)), - Factory.EmptyHtml(), - new DirectiveBlock(chunkGenerator, - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "System.Text.Encoding.UTF8Encoding", markup: false).AsDirectiveToken(descriptor.Tokens[0])), - Factory.EmptyHtml())); + new[] { descriptor }); } - [Theory] - [InlineData(DirectiveUsage.FileScopedSinglyOccurring)] - [InlineData(DirectiveUsage.FileScopedMultipleOccurring)] - public void DirectiveDescriptor_FileScoped_CanBeBeneathOtherDirectives(DirectiveUsage directiveUsage) + [Fact] + public void DirectiveDescriptor_FileScoped_CanBeBeneathOtherDirectives() { // Arrange var customDescriptor = DirectiveDescriptor.CreateDirective( @@ -96,7 +65,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy DirectiveKind.SingleLine, builder => { - builder.Usage = directiveUsage; + builder.Usage = DirectiveUsage.FileScopedSinglyOccurring; builder.AddTypeToken(); }); var somethingDescriptor = DirectiveDescriptor.CreateDirective( @@ -104,7 +73,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy DirectiveKind.SingleLine, builder => { - builder.Usage = directiveUsage; + builder.Usage = DirectiveUsage.FileScopedMultipleOccurring; builder.AddMemberToken(); }); @@ -112,28 +81,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy ParseDocumentTest( @"@custom System.Text.Encoding.ASCIIEncoding @something Else", - new[] { customDescriptor, somethingDescriptor }, - new MarkupBlock( - Factory.EmptyHtml(), - new DirectiveBlock(new DirectiveChunkGenerator(customDescriptor), - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "System.Text.Encoding.ASCIIEncoding", markup: false).AsDirectiveToken(customDescriptor.Tokens[0]), - Factory.Span(SpanKindInternal.Markup, Environment.NewLine, markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace)), - Factory.EmptyHtml(), - new DirectiveBlock(new DirectiveChunkGenerator(somethingDescriptor), - Factory.CodeTransition(), - Factory.MetaCode("something").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "Else", markup: false).AsDirectiveToken(somethingDescriptor.Tokens[0])), - Factory.EmptyHtml())); + new[] { customDescriptor, somethingDescriptor }); } - [Theory] - [InlineData(DirectiveUsage.FileScopedSinglyOccurring)] - [InlineData(DirectiveUsage.FileScopedMultipleOccurring)] - public void DirectiveDescriptor_FileScoped_CanBeBeneathOtherWhiteSpaceCommentsAndDirectives(DirectiveUsage directiveUsage) + [Fact] + public void DirectiveDescriptor_FileScoped_CanBeBeneathOtherWhiteSpaceCommentsAndDirectives() { // Arrange var customDescriptor = DirectiveDescriptor.CreateDirective( @@ -141,7 +93,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy DirectiveKind.SingleLine, builder => { - builder.Usage = directiveUsage; + builder.Usage = DirectiveUsage.FileScopedSinglyOccurring; builder.AddTypeToken(); }); var somethingDescriptor = DirectiveDescriptor.CreateDirective( @@ -149,7 +101,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy DirectiveKind.SingleLine, builder => { - builder.Usage = directiveUsage; + builder.Usage = DirectiveUsage.FileScopedMultipleOccurring; builder.AddMemberToken(); }); @@ -161,33 +113,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy @something Else

This is extra

", - new[] { customDescriptor, somethingDescriptor }, - new MarkupBlock( - Factory.EmptyHtml(), - new CommentBlock( - Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition).Accepts(AcceptedCharactersInternal.None), - Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar).Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Comment, new HtmlSymbol(" There are two directives beneath this ", HtmlSymbolType.RazorComment)).Accepts(AcceptedCharactersInternal.Any), - Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar).Accepts(AcceptedCharactersInternal.None), - Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition).Accepts(AcceptedCharactersInternal.None)), - Factory.Markup(Environment.NewLine), - new DirectiveBlock(new DirectiveChunkGenerator(customDescriptor), - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "System.Text.Encoding.ASCIIEncoding", markup: false).AsDirectiveToken(customDescriptor.Tokens[0]), - Factory.Span(SpanKindInternal.Markup, Environment.NewLine, markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace)), - Factory.Markup(Environment.NewLine), - new DirectiveBlock(new DirectiveChunkGenerator(somethingDescriptor), - Factory.CodeTransition(), - Factory.MetaCode("something").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "Else", markup: false).AsDirectiveToken(somethingDescriptor.Tokens[0]), - Factory.Span(SpanKindInternal.Markup, Environment.NewLine, markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace)), - Factory.Markup(Environment.NewLine), - BlockFactory.MarkupTagBlock("

"), - Factory.Markup("This is extra"), - BlockFactory.MarkupTagBlock("

"))); + new[] { customDescriptor, somethingDescriptor }); } [Fact] @@ -198,20 +124,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy "custom", DirectiveKind.SingleLine, b => b.AddStringToken().AddStringToken()); - var chunkGenerator = new DirectiveChunkGenerator(descriptor); - chunkGenerator.Diagnostics.Add( - RazorDiagnosticFactory.CreateParsing_DirectiveTokensMustBeSeparatedByWhitespace( - new SourceSpan(new SourceLocation(17, 0, 17), 9), "custom")); // Act & Assert ParseCodeBlockTest( "@custom \"string1\"\"string2\"", - new[] { descriptor }, - new DirectiveBlock(chunkGenerator, - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "\"string1\"", markup: false).AsDirectiveToken(descriptor.Tokens[0]))); + new[] { descriptor }); } [Fact] @@ -222,19 +139,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy "custom", DirectiveKind.SingleLine, b => b.AddNamespaceToken()); - var chunkGenerator = new DirectiveChunkGenerator(descriptor); - chunkGenerator.Diagnostics.Add( - RazorDiagnosticFactory.CreateParsing_DirectiveExpectsNamespace( - new SourceSpan(new SourceLocation(8, 0, 8), 7), "custom")); // Act & Assert ParseCodeBlockTest( "@custom System.", - new[] { descriptor }, - new DirectiveBlock(chunkGenerator, - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace))); + new[] { descriptor }); } [Fact] @@ -245,19 +154,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy "custom", DirectiveKind.SingleLine, b => b.AddNamespaceToken()); - var chunkGenerator = new DirectiveChunkGenerator(descriptor); - chunkGenerator.Diagnostics.Add( - RazorDiagnosticFactory.CreateParsing_DirectiveExpectsNamespace( - new SourceSpan(new SourceLocation(8, 0, 8), 7), "custom")); // Act & Assert ParseCodeBlockTest( "@custom System<", - new[] { descriptor }, - new DirectiveBlock(chunkGenerator, - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace))); + new[] { descriptor }); } [Fact] public void DirectiveDescriptor_CanHandleIncompleteNamespaceTokens() @@ -267,19 +168,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy "custom", DirectiveKind.SingleLine, b => b.AddNamespaceToken()); - var chunkGenerator = new DirectiveChunkGenerator(descriptor); - chunkGenerator.Diagnostics.Add( - RazorDiagnosticFactory.CreateParsing_DirectiveExpectsNamespace( - new SourceSpan(new SourceLocation(8, 0, 8), 7), "custom")); // Act & Assert ParseCodeBlockTest( "@custom System." + Environment.NewLine, - new[] { descriptor }, - new DirectiveBlock(chunkGenerator, - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace))); + new[] { descriptor }); } [Fact] @@ -290,19 +183,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy "custom", DirectiveKind.SingleLine, b => b.AddNamespaceToken()); - var chunkGenerator = new DirectiveChunkGenerator(descriptor); - chunkGenerator.Diagnostics.Add( - RazorDiagnosticFactory.CreateParsing_DirectiveExpectsNamespace( - new SourceSpan(new SourceLocation(8, 0, 8), 7), "custom")); // Act & Assert ParseCodeBlockTest( "@custom System<" + Environment.NewLine, - new[] { descriptor }, - new DirectiveBlock(chunkGenerator, - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace))); + new[] { descriptor }); } [Fact] @@ -316,68 +201,21 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // Act & Assert ParseCodeBlockTest(Environment.NewLine + " @custom System.Text.Encoding.ASCIIEncoding", - new[] { descriptor }, - new DirectiveBlock( - new DirectiveChunkGenerator(descriptor), - Factory.Code(Environment.NewLine + " ").AsStatement(), - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "System.Text.Encoding.ASCIIEncoding", markup: false).AsDirectiveToken(descriptor.Tokens[0]))); + new[] { descriptor }); } [Fact] public void BuiltInDirectiveDoesNotErorrIfNotAtStartOfLineBecauseOfWhitespace() { // Act & Assert - ParseCodeBlockTest(Environment.NewLine + " @addTagHelper \"*, Foo\"", - Enumerable.Empty(), - new DirectiveBlock( - Factory.Code(Environment.NewLine + " ").AsStatement(), - Factory.CodeTransition(), - Factory - .MetaCode(SyntaxConstants.CSharp.AddTagHelperKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory - .Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.Code("\"*, Foo\"") - .AsAddTagHelper( - "\"*, Foo\"", - "*, Foo", - "*", - "Foo"))); + ParseCodeBlockTest(Environment.NewLine + " @addTagHelper \"*, Foo\""); } [Fact] public void BuiltInDirectiveErrorsIfNotAtStartOfLine() { // Act & Assert - ParseCodeBlockTest("{ @addTagHelper \"*, Foo\"" + Environment.NewLine + "}", - Enumerable.Empty(), - new StatementBlock( - Factory.MetaCode("{").Accepts(AcceptedCharactersInternal.None), - Factory.Code(" ") - .AsStatement() - .AutoCompleteWith(autoCompleteString: null, atEndOfSpan: false), - new DirectiveBlock( - Factory.CodeTransition(), - Factory - .MetaCode(SyntaxConstants.CSharp.AddTagHelperKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory - .Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.Code("\"*, Foo\"") - .AsAddTagHelper( - "\"*, Foo\"", - "*, Foo", - "*", - "Foo", - RazorDiagnosticFactory.CreateParsing_DirectiveMustAppearAtStartOfLine( - new SourceSpan(new SourceLocation(4, 0, 4), 12), "addTagHelper"))), - Factory.Code(Environment.NewLine).AsStatement(), - Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None))); + ParseCodeBlockTest("{ @addTagHelper \"*, Foo\"" + Environment.NewLine + "}"); } [Fact] @@ -388,28 +226,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy "custom", DirectiveKind.SingleLine, b => b.AddTypeToken()); - var chunkGenerator = new DirectiveChunkGenerator(descriptor); - chunkGenerator.Diagnostics.Add( - RazorDiagnosticFactory.CreateParsing_DirectiveMustAppearAtStartOfLine( - new SourceSpan(new SourceLocation(4, 0, 4), contentLength: 6), "custom")); // Act & Assert ParseCodeBlockTest( "{ @custom System.Text.Encoding.ASCIIEncoding" + Environment.NewLine + "}", - new[] { descriptor }, - new StatementBlock( - Factory.MetaCode("{").Accepts(AcceptedCharactersInternal.None), - Factory.Code(" ") - .AsStatement() - .AutoCompleteWith(autoCompleteString: null, atEndOfSpan: false), - new DirectiveBlock(chunkGenerator, - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "System.Text.Encoding.ASCIIEncoding", markup: false).AsDirectiveToken(descriptor.Tokens[0]), - Factory.Span(SpanKindInternal.Markup, Environment.NewLine, markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace)), - Factory.EmptyCSharp().AsStatement(), - Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None))); + new[] { descriptor }); } [Fact] @@ -424,13 +245,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // Act & Assert ParseCodeBlockTest( "@custom System.Text.Encoding.ASCIIEncoding", - new[] { descriptor }, - new DirectiveBlock( - new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "System.Text.Encoding.ASCIIEncoding", markup: false).AsDirectiveToken(descriptor.Tokens[0]))); + new[] { descriptor }); } [Fact] @@ -445,13 +260,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // Act & Assert ParseCodeBlockTest( "@custom Some_Member", - new[] { descriptor }, - new DirectiveBlock( - new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "Some_Member", markup: false).AsDirectiveToken(descriptor.Tokens[0]))); + new[] { descriptor }); } [Fact] @@ -466,13 +275,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // Act & Assert ParseCodeBlockTest( "@custom BaseNamespace", - new[] { descriptor }, - new DirectiveBlock( - new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "BaseNamespace", markup: false).AsDirectiveToken(descriptor.Tokens[0]))); + new[] { descriptor }); } [Fact] @@ -487,13 +290,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // Act & Assert ParseCodeBlockTest( "@custom BaseNamespace.Foo.Bar", - new[] { descriptor }, - new DirectiveBlock( - new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "BaseNamespace.Foo.Bar", markup: false).AsDirectiveToken(descriptor.Tokens[0]))); + new[] { descriptor }); } [Fact] @@ -508,13 +305,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // Act & Assert ParseCodeBlockTest( "@custom \"AString\"", - new[] { descriptor }, - new DirectiveBlock( - new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "\"AString\"", markup: false).AsDirectiveToken(descriptor.Tokens[0]))); + new[] { descriptor }); } [Fact] @@ -525,19 +316,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy "custom", DirectiveKind.SingleLine, b => b.AddStringToken()); - var chunkGenerator = new DirectiveChunkGenerator(descriptor); - chunkGenerator.Diagnostics.Add( - RazorDiagnosticFactory.CreateParsing_DirectiveExpectsQuotedStringLiteral( - new SourceSpan(new SourceLocation(8, 0, 8), contentLength: 7), "custom")); // Act & Assert ParseCodeBlockTest( "@custom AString", - new[] { descriptor }, - new DirectiveBlock(chunkGenerator, - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace))); + new[] { descriptor }); } [Fact] @@ -548,19 +331,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy "custom", DirectiveKind.SingleLine, b => b.AddStringToken()); - var chunkGenerator = new DirectiveChunkGenerator(descriptor); - chunkGenerator.Diagnostics.Add( - RazorDiagnosticFactory.CreateParsing_DirectiveExpectsQuotedStringLiteral( - new SourceSpan(new SourceLocation(8, 0, 8), contentLength: 1), "custom")); // Act & Assert ParseCodeBlockTest( "@custom {foo?}", - new[] { descriptor }, - new DirectiveBlock(chunkGenerator, - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace))); + new[] { descriptor }); } [Fact] @@ -571,19 +346,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy "custom", DirectiveKind.SingleLine, b => b.AddStringToken()); - var chunkGenerator = new DirectiveChunkGenerator(descriptor); - chunkGenerator.Diagnostics.Add( - RazorDiagnosticFactory.CreateParsing_DirectiveExpectsQuotedStringLiteral( - new SourceSpan(new SourceLocation(8, 0, 8), contentLength: 9), "custom")); // Act & Assert ParseCodeBlockTest( "@custom 'AString'", - new[] { descriptor }, - new DirectiveBlock(chunkGenerator, - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace))); + new[] { descriptor }); } [Fact] @@ -594,19 +361,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy "custom", DirectiveKind.SingleLine, b => b.AddStringToken()); - var chunkGenerator = new DirectiveChunkGenerator(descriptor); - chunkGenerator.Diagnostics.Add( - RazorDiagnosticFactory.CreateParsing_DirectiveExpectsQuotedStringLiteral( - new SourceSpan(new SourceLocation(8, 0, 8), contentLength: 7), "custom")); // Act & Assert ParseCodeBlockTest( "@custom AString\"", - new[] { descriptor }, - new DirectiveBlock(chunkGenerator, - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace))); + new[] { descriptor }); } [Fact] @@ -621,20 +380,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // Act & Assert ParseCodeBlockTest( "@custom System.Text.Encoding.ASCIIEncoding Some_Member \"AString\"", - new[] { descriptor }, - new DirectiveBlock( - new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "System.Text.Encoding.ASCIIEncoding", markup: false).AsDirectiveToken(descriptor.Tokens[0]), - - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "Some_Member", markup: false).AsDirectiveToken(descriptor.Tokens[1]), - - Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "\"AString\"", markup: false).AsDirectiveToken(descriptor.Tokens[2]))); + new[] { descriptor }); } [Fact] @@ -649,26 +395,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // Act & Assert ParseCodeBlockTest( "@custom \"Header\" {

F{o}o

}", - new[] { descriptor }, - new DirectiveBlock( - new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "\"Header\"", markup: false).AsDirectiveToken(descriptor.Tokens[0]), - Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.AllWhiteSpace), - Factory.MetaCode("{") - .AutoCompleteWith(null, atEndOfSpan: true) - .Accepts(AcceptedCharactersInternal.None), - new MarkupBlock( - Factory.Markup(" "), - new MarkupTagBlock( - Factory.Markup("

")), - Factory.Markup("F", "{", "o", "}", "o"), - new MarkupTagBlock( - Factory.Markup("

")), - Factory.Markup(" ")), - Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None))); + new[] { descriptor }); } [Fact] @@ -683,19 +410,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // Act & Assert ParseCodeBlockTest( "@custom \"Name\" { foo(); bar(); }", - new[] { descriptor }, - new DirectiveBlock( - new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "\"Name\"", markup: false).AsDirectiveToken(descriptor.Tokens[0]), - Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.AllWhiteSpace), - Factory.MetaCode("{") - .AutoCompleteWith(null, atEndOfSpan: true) - .Accepts(AcceptedCharactersInternal.None), - Factory.Code(" foo(); bar(); ").AsCodeBlock(), - Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None))); + new[] { descriptor }); } [Fact] @@ -710,19 +425,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // Act & Assert ParseCodeBlockTest( "@custom System.Text.Encoding.ASCIIEncoding Some_Member ", - new[] { descriptor }, - new DirectiveBlock( - new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "System.Text.Encoding.ASCIIEncoding", markup: false).AsDirectiveToken(descriptor.Tokens[0]), - - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "Some_Member", markup: false).AsDirectiveToken(descriptor.Tokens[1]), - - Factory.Span(SpanKindInternal.None, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace))); + new[] { descriptor }); } [Fact] @@ -733,19 +436,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy "custom", DirectiveKind.SingleLine, b => b.AddMemberToken()); - var chunkGenerator = new DirectiveChunkGenerator(descriptor); - chunkGenerator.Diagnostics.Add( - RazorDiagnosticFactory.CreateParsing_DirectiveExpectsIdentifier( - new SourceSpan(new SourceLocation(8, 0, 8), contentLength: 1), "custom")); // Act & Assert ParseCodeBlockTest( "@custom -Some_Member", - new[] { descriptor }, - new DirectiveBlock(chunkGenerator, - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace))); + new[] { descriptor }); } [Fact] @@ -760,70 +455,83 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // Act & Assert ParseCodeBlockTest( "@custom \"hello\" ; ", - new[] { descriptor }, - new DirectiveBlock( - new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "\"hello\"", markup: false).AsDirectiveToken(descriptor.Tokens[0]), - Factory.Span(SpanKindInternal.None, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.MetaCode(";").Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace))); + new[] { descriptor }); } - [Theory] - [InlineData("string?")] - [InlineData("string?[]")] - [InlineData("global::System.Int32?")] - [InlineData("KeyValuePair?")] - [InlineData("KeyValuePair?[]")] - [InlineData("global::System.Collections.Generic.KeyValuePair?[]")] - public void DirectiveDescriptor_AllowsNullableTypes(string expectedType) + [Fact] + public void DirectiveDescriptor_AllowsNullableTypes() { // Arrange + var variants = new[] + { + "string?", + "string?[]", + "global::System.Int32?", + "KeyValuePair?", + "KeyValuePair?[]", + "global::System.Collections.Generic.KeyValuePair?[]", + }; + + var directiveName = "custom"; + var source = $"@{directiveName}"; var descriptor = DirectiveDescriptor.CreateDirective( - "custom", + directiveName, DirectiveKind.SingleLine, - b => b.AddTypeToken()); + b => + { + b.AddTypeToken(); + b.AddTypeToken(); + b.AddTypeToken(); + b.AddTypeToken(); + b.AddTypeToken(); + b.AddTypeToken(); + }); + + for (var i = 0; i < variants.Length; i++) + { + source += $" {variants[i]}"; + } // Act & Assert - ParseCodeBlockTest( - $"@custom {expectedType}", - new[] { descriptor }, - new DirectiveBlock( - new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, expectedType, markup: false).AsDirectiveToken(descriptor.Tokens[0]))); + ParseCodeBlockTest(source, new[] { descriptor }); } - [Theory] - [InlineData("(bool, int)")] - [InlineData("(int aa, string bb)?")] - [InlineData("( int? q , bool w )")] - [InlineData("( int ? q, bool ?w ,(long ? [])) ?")] - [InlineData("(List<(int, string)?> aa, string bb)")] - [InlineData("(string ss, (int u, List<(string, int)> k, (Char c, bool b, List l)), global::System.Int32[] a)")] - public void DirectiveDescriptor_AllowsTupleTypes(string expectedType) + [Fact] + public void DirectiveDescriptor_AllowsTupleTypes() { // Arrange + var variants = new[] + { + "(bool, int)", + "(int aa, string bb)?", + "( int? q , bool w )", + "( int ? q, bool ?w ,(long ? [])) ?", + "(List<(int, string)?> aa, string bb)", + "(string ss, (int u, List<(string, int)> k, (Char c, bool b, List l)), global::System.Int32[] a)", + }; + + var directiveName = "custom"; + var source = $"@{directiveName}"; var descriptor = DirectiveDescriptor.CreateDirective( - "custom", + directiveName, DirectiveKind.SingleLine, - b => b.AddTypeToken()); + b => + { + b.AddTypeToken(); + b.AddTypeToken(); + b.AddTypeToken(); + b.AddTypeToken(); + b.AddTypeToken(); + b.AddTypeToken(); + }); + + for (var i = 0; i < variants.Length; i++) + { + source += $" {variants[i]}"; + } // Act & Assert - ParseCodeBlockTest( - $"@custom {expectedType}", - new[] { descriptor }, - new DirectiveBlock( - new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, expectedType, markup: false).AsDirectiveToken(descriptor.Tokens[0]))); + ParseCodeBlockTest(source, new[] { descriptor }); } [Fact] @@ -838,14 +546,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // Act & Assert ParseCodeBlockTest( $"@custom (bool, int?) ", - new[] { descriptor }, - new DirectiveBlock( - new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "(bool, int?)", markup: false).AsDirectiveToken(descriptor.Tokens[0]), - Factory.Span(SpanKindInternal.None, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace))); + new[] { descriptor }); } [Fact] @@ -856,22 +557,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy "custom", DirectiveKind.SingleLine, b => b.AddStringToken()); - var chunkGenerator = new DirectiveChunkGenerator(descriptor); - chunkGenerator.Diagnostics.Add( - RazorDiagnosticFactory.CreateParsing_UnexpectedDirectiveLiteral( - new SourceSpan(new SourceLocation(16, 0, 16), contentLength: 7), "custom", "line break")); // Act & Assert ParseCodeBlockTest( "@custom \"hello\" \"world\"", - new[] { descriptor }, - new DirectiveBlock(chunkGenerator, - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "\"hello\"", markup: false).AsDirectiveToken(descriptor.Tokens[0]), - - Factory.Span(SpanKindInternal.None, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace))); + new[] { descriptor }); } [Fact] @@ -882,22 +572,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy "custom", DirectiveKind.CodeBlock, b => b.AddStringToken()); - var chunkGenerator = new DirectiveChunkGenerator(descriptor); - chunkGenerator.Diagnostics.Add( - RazorDiagnosticFactory.CreateParsing_UnexpectedDirectiveLiteral( - new SourceSpan(new SourceLocation(16, 0, 16), contentLength: 5), "custom", "{")); // Act & Assert ParseCodeBlockTest( "@custom \"Hello\" World { foo(); bar(); }", - new[] { descriptor }, - new DirectiveBlock(chunkGenerator, - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "\"Hello\"", markup: false).AsDirectiveToken(descriptor.Tokens[0]), - - Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.AllWhiteSpace))); + new[] { descriptor }); } [Fact] @@ -908,20 +587,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy "custom", DirectiveKind.CodeBlock, b => b.AddStringToken()); - var chunkGenerator = new DirectiveChunkGenerator(descriptor); - chunkGenerator.Diagnostics.Add( - RazorDiagnosticFactory.CreateParsing_UnexpectedEOFAfterDirective( - new SourceSpan(new SourceLocation(15, 0, 15), contentLength: 1), "custom", "{")); // Act & Assert ParseCodeBlockTest( "@custom \"Hello\"", - new[] { descriptor }, - new DirectiveBlock(chunkGenerator, - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "\"Hello\"", markup: false).AsDirectiveToken(descriptor.Tokens[0]))); + new[] { descriptor }); } [Fact] @@ -932,573 +602,144 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy "custom", DirectiveKind.CodeBlock, b => b.AddStringToken()); - var chunkGenerator = new DirectiveChunkGenerator(descriptor); - chunkGenerator.Diagnostics.Add( - RazorDiagnosticFactory.CreateParsing_ExpectedEndOfBlockBeforeEOF( - new SourceSpan(new SourceLocation(16, 0, 16), contentLength: 1), "custom", "}", "{")); // Act & Assert ParseCodeBlockTest( "@custom \"Hello\" {", - new[] { descriptor }, - new DirectiveBlock(chunkGenerator, - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "\"Hello\"", markup: false).AsDirectiveToken(descriptor.Tokens[0]), - Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.AllWhiteSpace), - Factory.MetaCode("{") - .AutoCompleteWith("}", atEndOfSpan: true) - .Accepts(AcceptedCharactersInternal.None), - Factory.EmptyCSharp().AsCodeBlock())); - } - - [Fact] - public void TagHelperPrefixDirective_DuplicatesCauseError() - { - // Arrange - var expectedDiagnostic = RazorDiagnosticFactory.CreateParsing_DuplicateDirective( - new SourceSpan(null, 22 + Environment.NewLine.Length, 1, 0, 16), "tagHelperPrefix"); - - // Act - var document = ParseDocument( -@"@tagHelperPrefix ""th:"" -@tagHelperPrefix ""th""", - directives: null, - designTime: false); - - // Assert - var directive = document.Root.Children.OfType().Last(); - var erroredSpan = (Span)directive.Children.Last(); - var chunkGenerator = Assert.IsType(erroredSpan.ChunkGenerator); - var diagnostic = Assert.Single(chunkGenerator.Diagnostics); - Assert.Equal(expectedDiagnostic, diagnostic); + new[] { descriptor }); } [Fact] public void TagHelperPrefixDirective_NoValueSucceeds() { - ParseBlockTest("@tagHelperPrefix \"\"", - new DirectiveBlock( - Factory.CodeTransition(), - Factory - .MetaCode(SyntaxConstants.CSharp.TagHelperPrefixKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory - .Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.Code("\"\"") - .AsTagHelperPrefixDirective("\"\"", string.Empty))); + ParseBlockTest("@tagHelperPrefix \"\""); } [Fact] public void TagHelperPrefixDirective_Succeeds() { - ParseBlockTest("@tagHelperPrefix Foo", - new DirectiveBlock( - Factory.CodeTransition(), - Factory - .MetaCode(SyntaxConstants.CSharp.TagHelperPrefixKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory - .Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.Code("Foo") - .AsTagHelperPrefixDirective("Foo", "Foo"))); + ParseBlockTest("@tagHelperPrefix Foo"); } [Fact] public void TagHelperPrefixDirective_WithQuotes_Succeeds() { - ParseBlockTest("@tagHelperPrefix \"Foo\"", - new DirectiveBlock( - Factory.CodeTransition(), - Factory - .MetaCode(SyntaxConstants.CSharp.TagHelperPrefixKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory - .Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.Code("\"Foo\"") - .AsTagHelperPrefixDirective("\"Foo\"", "Foo"))); + ParseBlockTest("@tagHelperPrefix \"Foo\""); } [Fact] public void TagHelperPrefixDirective_RequiresValue() { - // Arrange - var expectedError = RazorDiagnosticFactory.CreateParsing_DirectiveMustHaveValue( - new SourceSpan(filePath: null, absoluteIndex: 1, lineIndex: 0, characterIndex: 1, length: 15), SyntaxConstants.CSharp.TagHelperPrefixKeyword); - - // Act & Assert - ParseBlockTest("@tagHelperPrefix ", - new DirectiveBlock( - Factory.CodeTransition(), - Factory - .MetaCode(SyntaxConstants.CSharp.TagHelperPrefixKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory - .Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.EmptyCSharp() - .AsTagHelperPrefixDirective(string.Empty, string.Empty, expectedError) - .Accepts(AcceptedCharactersInternal.AnyExceptNewline))); + ParseBlockTest("@tagHelperPrefix "); } [Fact] public void TagHelperPrefixDirective_StartQuoteRequiresDoubleQuotesAroundValue() { - // Arrange - var expectedErrors = new[] - { - RazorDiagnosticFactory.CreateParsing_UnterminatedStringLiteral( - new SourceSpan(filePath: null, absoluteIndex: 17, lineIndex: 0, characterIndex: 17, length: 1)), - RazorDiagnosticFactory.CreateParsing_IncompleteQuotesAroundDirective( - new SourceSpan(filePath: null, absoluteIndex: 17, lineIndex: 0, characterIndex: 17, length: 4), SyntaxConstants.CSharp.TagHelperPrefixKeyword), - RazorDiagnosticFactory.CreateParsing_InvalidTagHelperPrefixValue( - new SourceSpan(filePath: null, absoluteIndex: 17, lineIndex: 0, characterIndex: 17, length: 4), SyntaxConstants.CSharp.TagHelperPrefixKeyword, '"', "\"Foo"), - }; - - // Act & Assert - ParseBlockTest("@tagHelperPrefix \"Foo", - new DirectiveBlock( - Factory.CodeTransition(), - Factory - .MetaCode(SyntaxConstants.CSharp.TagHelperPrefixKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory - .Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.Code("\"Foo") - .AsTagHelperPrefixDirective("\"Foo", "\"Foo", expectedErrors))); + ParseBlockTest("@tagHelperPrefix \"Foo"); } [Fact] public void TagHelperPrefixDirective_EndQuoteRequiresDoubleQuotesAroundValue() { - // Arrange - var expectedErrors = new[] - { - RazorDiagnosticFactory.CreateParsing_UnterminatedStringLiteral( - new SourceSpan(filePath: null, absoluteIndex: 23, lineIndex: 0, characterIndex: 23, length: 1)), - RazorDiagnosticFactory.CreateParsing_IncompleteQuotesAroundDirective( - new SourceSpan(filePath: null, absoluteIndex: 17, lineIndex: 0, characterIndex: 17, length: 7), SyntaxConstants.CSharp.TagHelperPrefixKeyword), - RazorDiagnosticFactory.CreateParsing_InvalidTagHelperPrefixValue( - new SourceSpan(filePath: null, absoluteIndex: 17, lineIndex: 0, characterIndex: 17, length: 7), SyntaxConstants.CSharp.TagHelperPrefixKeyword, ' ', "Foo \""), - }; - - // Act & Assert - ParseBlockTest("@tagHelperPrefix Foo \"", - new DirectiveBlock( - Factory.CodeTransition(), - Factory - .MetaCode(SyntaxConstants.CSharp.TagHelperPrefixKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory - .Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.Code("Foo \"") - .AsTagHelperPrefixDirective("Foo \"", "Foo \"", expectedErrors))); + ParseBlockTest("@tagHelperPrefix Foo \""); } [Fact] public void RemoveTagHelperDirective_NoValue_Invalid() { - var expectedErrors = new[] - { - RazorDiagnosticFactory.CreateParsing_InvalidTagHelperLookupText( - new SourceSpan(new SourceLocation(18, 0, 18), contentLength: 1), string.Empty) - }; - - ParseBlockTest("@removeTagHelper \"\"", - new DirectiveBlock( - Factory.CodeTransition(), - Factory - .MetaCode(SyntaxConstants.CSharp.RemoveTagHelperKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory - .Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.Code("\"\"") - .AsRemoveTagHelper( - "\"\"", - string.Empty, - errors: expectedErrors))); + ParseBlockTest("@removeTagHelper \"\""); } [Fact] public void RemoveTagHelperDirective_InvalidLookupText_AddsError() { - var expectedErrors = new[] - { - RazorDiagnosticFactory.CreateParsing_InvalidTagHelperLookupText( - new SourceSpan(new SourceLocation(17, 0, 17), contentLength: 3), "Foo") - }; - - ParseBlockTest("@removeTagHelper Foo", - new DirectiveBlock( - Factory.CodeTransition(), - Factory - .MetaCode(SyntaxConstants.CSharp.RemoveTagHelperKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory - .Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.Code("Foo") - .AsRemoveTagHelper( - "Foo", - "Foo", - errors: expectedErrors))); + ParseBlockTest("@removeTagHelper Foo"); } [Fact] public void RemoveTagHelperDirective_SingleQuotes_AddsError() { - var expectedErrors = new[] - { - RazorDiagnosticFactory.CreateParsing_InvalidTagHelperLookupText( - new SourceSpan(new SourceLocation(17, 0, 17), contentLength: 8), "'*, Foo'") - }; - - ParseBlockTest("@removeTagHelper '*, Foo'", - new DirectiveBlock( - Factory.CodeTransition(), - Factory.MetaCode(SyntaxConstants.CSharp.RemoveTagHelperKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.Code("'*, Foo'") - .AsRemoveTagHelper( - "'*, Foo'", - "'*, Foo'", - errors: expectedErrors))); + ParseBlockTest("@removeTagHelper '*, Foo'"); } [Fact] public void RemoveTagHelperDirective_WithQuotes_InvalidLookupText_AddsError() { - var expectedErrors = new[] - { - RazorDiagnosticFactory.CreateParsing_InvalidTagHelperLookupText( - new SourceSpan(new SourceLocation(18, 0, 18), contentLength: 3), "Foo") - }; - - ParseBlockTest("@removeTagHelper \"Foo\"", - new DirectiveBlock( - Factory.CodeTransition(), - Factory - .MetaCode(SyntaxConstants.CSharp.RemoveTagHelperKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory - .Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.Code("\"Foo\"") - .AsRemoveTagHelper( - "\"Foo\"", - "Foo", - errors: expectedErrors))); + ParseBlockTest("@removeTagHelper \"Foo\""); } [Fact] public void RemoveTagHelperDirective_SupportsSpaces() { - ParseBlockTest("@removeTagHelper Foo, Bar ", - new DirectiveBlock( - Factory.CodeTransition(), - Factory.MetaCode(SyntaxConstants.CSharp.RemoveTagHelperKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.Code("Foo, Bar ") - .AsRemoveTagHelper( - "Foo, Bar", - "Foo, Bar", - "Foo", - "Bar") - .Accepts(AcceptedCharactersInternal.AnyExceptNewline))); + ParseBlockTest("@removeTagHelper Foo, Bar "); } [Fact] public void RemoveTagHelperDirective_RequiresValue() { - // Arrange - var expectedErrors = new[] - { - RazorDiagnosticFactory.CreateParsing_DirectiveMustHaveValue( - new SourceSpan(filePath: null, absoluteIndex: 1, lineIndex: 0, characterIndex: 1, length: 15), SyntaxConstants.CSharp.RemoveTagHelperKeyword), - RazorDiagnosticFactory.CreateParsing_InvalidTagHelperLookupText( - new SourceSpan(new SourceLocation(17, 0, 17), contentLength: 1), string.Empty), - }; - - // Act & Assert - ParseBlockTest("@removeTagHelper ", - new DirectiveBlock( - Factory.CodeTransition(), - Factory.MetaCode(SyntaxConstants.CSharp.RemoveTagHelperKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.EmptyCSharp() - .AsRemoveTagHelper(string.Empty, string.Empty, errors: expectedErrors) - .Accepts(AcceptedCharactersInternal.AnyExceptNewline))); + ParseBlockTest("@removeTagHelper "); } [Fact] public void RemoveTagHelperDirective_StartQuoteRequiresDoubleQuotesAroundValue() { // Arrange - var expectedErrors = new[] - { - RazorDiagnosticFactory.CreateParsing_UnterminatedStringLiteral( - new SourceSpan(filePath: null, absoluteIndex: 17, lineIndex: 0, characterIndex: 17, length: 1)), - RazorDiagnosticFactory.CreateParsing_IncompleteQuotesAroundDirective( - new SourceSpan(filePath: null, absoluteIndex: 17, lineIndex: 0, characterIndex: 17, length: 4), SyntaxConstants.CSharp.RemoveTagHelperKeyword), - RazorDiagnosticFactory.CreateParsing_InvalidTagHelperLookupText( - new SourceSpan(new SourceLocation(17, 0, 17), contentLength: 4), "\"Foo"), - }; - - // Act & Assert - ParseBlockTest("@removeTagHelper \"Foo", - new DirectiveBlock( - Factory.CodeTransition(), - Factory - .MetaCode(SyntaxConstants.CSharp.RemoveTagHelperKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory - .Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.Code("\"Foo") - .AsRemoveTagHelper("\"Foo", "\"Foo", errors: expectedErrors))); + ParseBlockTest("@removeTagHelper \"Foo"); } [Fact] public void RemoveTagHelperDirective_EndQuoteRequiresDoubleQuotesAroundValue() { - // Arrange - var expectedErrors = new[] - { - RazorDiagnosticFactory.CreateParsing_UnterminatedStringLiteral( - new SourceSpan(new SourceLocation(absoluteIndex: 20, lineIndex: 0, characterIndex: 20), contentLength: 1)), - RazorDiagnosticFactory.CreateParsing_IncompleteQuotesAroundDirective( - new SourceSpan(filePath: null, absoluteIndex: 17, lineIndex: 0, characterIndex: 17, length: 4), SyntaxConstants.CSharp.RemoveTagHelperKeyword), - RazorDiagnosticFactory.CreateParsing_InvalidTagHelperLookupText( - new SourceSpan(new SourceLocation(17, 0, 17), contentLength: 4), "Foo\""), - }; - - // Act & Assert - ParseBlockTest("@removeTagHelper Foo\"", - new DirectiveBlock( - Factory.CodeTransition(), - Factory - .MetaCode(SyntaxConstants.CSharp.RemoveTagHelperKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory - .Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.Code("Foo\"") - .AsRemoveTagHelper("Foo\"", "Foo\"", errors: expectedErrors) - .Accepts(AcceptedCharactersInternal.AnyExceptNewline))); + ParseBlockTest("@removeTagHelper Foo\""); } [Fact] public void AddTagHelperDirective_NoValue_Invalid() { - var expectedErrors = new[] - { - RazorDiagnosticFactory.CreateParsing_InvalidTagHelperLookupText( - new SourceSpan(new SourceLocation(15, 0, 15), contentLength: 1), string.Empty), - }; - - ParseBlockTest("@addTagHelper \"\"", - new DirectiveBlock( - Factory.CodeTransition(), - Factory - .MetaCode(SyntaxConstants.CSharp.AddTagHelperKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory - .Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.Code("\"\"") - .AsAddTagHelper( - "\"\"", - string.Empty, - errors: expectedErrors))); + ParseBlockTest("@addTagHelper \"\""); } [Fact] public void AddTagHelperDirective_InvalidLookupText_AddsError() { - var expectedErrors = new[] - { - RazorDiagnosticFactory.CreateParsing_InvalidTagHelperLookupText( - new SourceSpan(new SourceLocation(14, 0, 14), contentLength: 3), "Foo"), - }; - - ParseBlockTest("@addTagHelper Foo", - new DirectiveBlock( - Factory.CodeTransition(), - Factory.MetaCode(SyntaxConstants.CSharp.AddTagHelperKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.Code("Foo") - .AsAddTagHelper( - "Foo", - "Foo", - errors: expectedErrors))); + ParseBlockTest("@addTagHelper Foo"); } [Fact] public void AddTagHelperDirective_WithQuotes_InvalidLookupText_AddsError() { - var expectedErrors = new[] - { - RazorDiagnosticFactory.CreateParsing_InvalidTagHelperLookupText( - new SourceSpan(new SourceLocation(15, 0, 15), contentLength: 3), "Foo") - }; - - ParseBlockTest("@addTagHelper \"Foo\"", - new DirectiveBlock( - Factory.CodeTransition(), - Factory - .MetaCode(SyntaxConstants.CSharp.AddTagHelperKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory - .Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.Code("\"Foo\"") - .AsAddTagHelper( - "\"Foo\"", - "Foo", - errors: expectedErrors))); + ParseBlockTest("@addTagHelper \"Foo\""); } [Fact] public void AddTagHelperDirective_SingleQuotes_AddsError() { - var expectedErrors = new[] - { - RazorDiagnosticFactory.CreateParsing_InvalidTagHelperLookupText( - new SourceSpan(new SourceLocation(14, 0, 14), contentLength: 8), "'*, Foo'") - }; - - ParseBlockTest("@addTagHelper '*, Foo'", - new DirectiveBlock( - Factory.CodeTransition(), - Factory.MetaCode(SyntaxConstants.CSharp.AddTagHelperKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.Code("'*, Foo'") - .AsAddTagHelper( - "'*, Foo'", - "'*, Foo'", - errors: expectedErrors))); + ParseBlockTest("@addTagHelper '*, Foo'"); } [Fact] public void AddTagHelperDirective_SupportsSpaces() { - ParseBlockTest("@addTagHelper Foo, Bar ", - new DirectiveBlock( - Factory.CodeTransition(), - Factory - .MetaCode(SyntaxConstants.CSharp.AddTagHelperKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory - .Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.Code("Foo, Bar ") - .AsAddTagHelper( - "Foo, Bar", - "Foo, Bar", - "Foo", - "Bar") - .Accepts(AcceptedCharactersInternal.AnyExceptNewline))); + ParseBlockTest("@addTagHelper Foo, Bar "); } [Fact] public void AddTagHelperDirective_RequiresValue() { - // Arrange - var expectedErrors = new[] - { - RazorDiagnosticFactory.CreateParsing_DirectiveMustHaveValue( - new SourceSpan(filePath: null, absoluteIndex: 1, lineIndex: 0, characterIndex: 1, length: 12), SyntaxConstants.CSharp.AddTagHelperKeyword), - RazorDiagnosticFactory.CreateParsing_InvalidTagHelperLookupText( - new SourceSpan(new SourceLocation(14, 0, 14), contentLength: 1), string.Empty), - }; - - // Act & Assert - ParseBlockTest("@addTagHelper ", - new DirectiveBlock( - Factory.CodeTransition(), - Factory - .MetaCode(SyntaxConstants.CSharp.AddTagHelperKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory - .Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.EmptyCSharp() - .AsAddTagHelper(string.Empty, string.Empty, errors: expectedErrors) - .Accepts(AcceptedCharactersInternal.AnyExceptNewline))); + ParseBlockTest("@addTagHelper "); } [Fact] public void AddTagHelperDirective_StartQuoteRequiresDoubleQuotesAroundValue() { - // Arrange - var expectedErrors = new[] - { - RazorDiagnosticFactory.CreateParsing_UnterminatedStringLiteral( - new SourceSpan(filePath: null, absoluteIndex: 14, lineIndex: 0, characterIndex: 14, length: 1)), - RazorDiagnosticFactory.CreateParsing_IncompleteQuotesAroundDirective( - new SourceSpan(filePath: null, absoluteIndex: 14, lineIndex: 0, characterIndex: 14, length: 4), SyntaxConstants.CSharp.AddTagHelperKeyword), - RazorDiagnosticFactory.CreateParsing_InvalidTagHelperLookupText( - new SourceSpan(new SourceLocation(14, 0, 14), contentLength: 4), "\"Foo"), - }; - - // Act & Assert - ParseBlockTest("@addTagHelper \"Foo", - new DirectiveBlock( - Factory.CodeTransition(), - Factory - .MetaCode(SyntaxConstants.CSharp.AddTagHelperKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory - .Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.Code("\"Foo") - .AsAddTagHelper("\"Foo", "\"Foo", errors: expectedErrors))); + ParseBlockTest("@addTagHelper \"Foo"); } [Fact] public void AddTagHelperDirective_EndQuoteRequiresDoubleQuotesAroundValue() { - // Arrange - var expectedErrors = new[] - { - RazorDiagnosticFactory.CreateParsing_UnterminatedStringLiteral( - new SourceSpan(filePath: null, absoluteIndex: 17, lineIndex: 0, characterIndex: 17, length: 1)), - RazorDiagnosticFactory.CreateParsing_IncompleteQuotesAroundDirective( - new SourceSpan(filePath: null, absoluteIndex: 14, lineIndex: 0, characterIndex: 14, length: 4), SyntaxConstants.CSharp.AddTagHelperKeyword), - RazorDiagnosticFactory.CreateParsing_InvalidTagHelperLookupText( - new SourceSpan(new SourceLocation(14, 0, 14), contentLength: 4), "Foo\""), - }; - - // Act & Assert - ParseBlockTest("@addTagHelper Foo\"", - new DirectiveBlock( - Factory.CodeTransition(), - Factory - .MetaCode(SyntaxConstants.CSharp.AddTagHelperKeyword) - .Accepts(AcceptedCharactersInternal.None), - Factory - .Span(SpanKindInternal.Markup, " ", markup: false) - .Accepts(AcceptedCharactersInternal.None), - Factory.Code("Foo\"") - .AsAddTagHelper("Foo\"", "Foo\"", errors: expectedErrors) - .Accepts(AcceptedCharactersInternal.AnyExceptNewline))); + ParseBlockTest("@addTagHelper Foo\""); } [Fact] @@ -1506,15 +747,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy { ParseDocumentTest( "@inherits string[[]][]", - new[] { InheritsDirective.Directive, }, - new MarkupBlock( - Factory.EmptyHtml(), - new DirectiveBlock(new DirectiveChunkGenerator(InheritsDirective.Directive), - Factory.CodeTransition(), - Factory.MetaCode("inherits").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "string[[]][]", markup: false).AsDirectiveToken(InheritsDirective.Directive.Tokens.First())), - Factory.EmptyHtml())); + new[] { InheritsDirective.Directive, }); } [Fact] @@ -1522,16 +755,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy { ParseDocumentTest( "@inherits System.Web.Mvc.WebViewPage>", - new[] { InheritsDirective.Directive, }, - new MarkupBlock( - Factory.EmptyHtml(), - new DirectiveBlock(new DirectiveChunkGenerator(InheritsDirective.Directive), - Factory.CodeTransition(), - Factory.MetaCode("inherits").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "System.Web.Mvc.WebViewPage>", markup: false) - .AsDirectiveToken(InheritsDirective.Directive.Tokens.First())), - Factory.EmptyHtml())); + new[] { InheritsDirective.Directive, }); } [Fact] @@ -1539,16 +763,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy { ParseDocumentTest( "@inherits string", - new[] { InheritsDirective.Directive, }, - new MarkupBlock( - Factory.EmptyHtml(), - new DirectiveBlock(new DirectiveChunkGenerator(InheritsDirective.Directive), - Factory.CodeTransition(), - Factory.MetaCode("inherits").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "string", markup: false) - .AsDirectiveToken(InheritsDirective.Directive.Tokens.First())), - Factory.EmptyHtml())); + new[] { InheritsDirective.Directive, }); } [Fact] @@ -1556,14 +771,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy { ParseCodeBlockTest( "@functions { foo(); bar(); }", - new[] { FunctionsDirective.Directive, }, - new DirectiveBlock(new DirectiveChunkGenerator(FunctionsDirective.Directive), - Factory.CodeTransition(), - Factory.MetaCode("functions").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.AllWhiteSpace), - Factory.MetaCode("{").AutoCompleteWith(null, atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None), - Factory.Code(" foo(); bar(); ").AsCodeBlock(), - Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None))); + new[] { FunctionsDirective.Directive, }); } [Fact] @@ -1571,14 +779,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy { ParseCodeBlockTest( "@functions { }", - new[] { FunctionsDirective.Directive, }, - new DirectiveBlock(new DirectiveChunkGenerator(FunctionsDirective.Directive), - Factory.CodeTransition(), - Factory.MetaCode("functions").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.AllWhiteSpace), - Factory.MetaCode("{").AutoCompleteWith(null, atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None), - Factory.Code(" ").AsCodeBlock(), - Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None))); + new[] { FunctionsDirective.Directive, }); } [Fact] @@ -1586,25 +787,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy { ParseCodeBlockTest( "@section Header {

F{o}o

}", - new[] { SectionDirective.Directive, }, - new DirectiveBlock(new DirectiveChunkGenerator(SectionDirective.Directive), - Factory.CodeTransition(), - Factory.MetaCode("section").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "Header", CSharpSymbolType.Identifier) - .AsDirectiveToken(SectionDirective.Directive.Tokens.First()), - Factory.Span(SpanKindInternal.Markup, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.AllWhiteSpace), - Factory.MetaCode("{").AutoCompleteWith(null, atEndOfSpan: true).Accepts(AcceptedCharactersInternal.None), - new MarkupBlock( - Factory.Markup(" "), - new MarkupTagBlock( - Factory.Markup("

")), - Factory.Markup("F", "{", "o", "}", "o"), - new MarkupTagBlock( - Factory.Markup("

")), - Factory.Markup(" ")), - Factory.MetaCode("}") - .Accepts(AcceptedCharactersInternal.None))); + new[] { SectionDirective.Directive, }); } [Fact] @@ -1619,12 +802,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // Act & Assert ParseCodeBlockTest( "@custom ", - new[] { descriptor }, - new DirectiveBlock( - new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace))); + new[] { descriptor }); } [Fact] @@ -1639,14 +817,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // Act & Assert ParseCodeBlockTest( "@custom \"simple-value\"", - new[] { descriptor }, - new DirectiveBlock( - new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "\"simple-value\"", markup: false) - .AsDirectiveToken(descriptor.Tokens[0]))); + new[] { descriptor }); } [Fact] @@ -1661,14 +832,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // Act & Assert ParseCodeBlockTest( "@custom \"{formaction}?/{id}?\"", - new[] { descriptor }, - new DirectiveBlock( - new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "\"{formaction}?/{id}?\"", markup: false) - .AsDirectiveToken(descriptor.Tokens[0]))); + new[] { descriptor }); } [Fact] @@ -1683,15 +847,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // Act & Assert ParseCodeBlockTest( "@custom \"{formaction}?/{id}?\" System.String", - new[] { descriptor }, - new DirectiveBlock( - new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("custom").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Markup, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "\"{formaction}?/{id}?\"", markup: false).AsDirectiveToken(descriptor.Tokens[0]), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "System.String", markup: false).AsDirectiveToken(descriptor.Tokens.Last()))); + new[] { descriptor }); } [Fact] @@ -1706,14 +862,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // Act & Assert ParseCodeBlockTest( "@TestDirective ", - new[] { descriptor }, - new DirectiveBlock( - new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("TestDirective").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, string.Empty, CSharpSymbolType.Unknown) - .AsDirectiveToken(descriptor.Tokens[0]))); + new[] { descriptor }); } [Fact] @@ -1728,13 +877,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // Act & Assert ParseCodeBlockTest( "@TestDirective PropertyName", - new[] { descriptor }, - new DirectiveBlock( - new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("TestDirective").Accepts(AcceptedCharactersInternal.None), - Factory.Span(SpanKindInternal.Code, " ", markup: false).Accepts(AcceptedCharactersInternal.WhiteSpace), - Factory.Span(SpanKindInternal.Code, "PropertyName", markup: false).AsDirectiveToken(descriptor.Tokens[0]))); + new[] { descriptor }); } [Fact] @@ -1748,11 +891,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // Act & Assert ParseCodeBlockTest( "@class", - new[] { descriptor }, - new DirectiveBlock( - new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("class").Accepts(AcceptedCharactersInternal.None))); + new[] { descriptor }); } [Fact] @@ -1766,200 +905,28 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // Act & Assert ParseCodeBlockTest( "@namespace", - new[] { descriptor }, - new DirectiveBlock( - new DirectiveChunkGenerator(descriptor), - Factory.CodeTransition(), - Factory.MetaCode("namespace").Accepts(AcceptedCharactersInternal.None))); + new[] { descriptor }); } - public static TheoryData InvalidTagHelperPrefixData + internal virtual void ParseCodeBlockTest(string document) { - get - { - var directiveLocation = new SourceLocation(1, 2, 3); - - RazorDiagnostic InvalidPrefixError(int length, char character, string prefix) - { - return RazorDiagnosticFactory.CreateParsing_InvalidTagHelperPrefixValue( - new SourceSpan(directiveLocation, length), SyntaxConstants.CSharp.TagHelperPrefixKeyword, character, prefix); - } - - return new TheoryData> - { - { - "th ", - directiveLocation, - new[] - { - InvalidPrefixError(3, ' ', "th "), - } - }, - { - "th\t", - directiveLocation, - new[] - { - InvalidPrefixError(3, '\t', "th\t"), - } - }, - { - "th" + Environment.NewLine, - directiveLocation, - new[] - { - InvalidPrefixError(2 + Environment.NewLine.Length, Environment.NewLine[0], "th" + Environment.NewLine), - } - }, - { - " th ", - directiveLocation, - new[] - { - InvalidPrefixError(4, ' ', " th "), - } - }, - { - "@", - directiveLocation, - new[] - { - InvalidPrefixError(1, '@', "@"), - } - }, - { - "t@h", - directiveLocation, - new[] - { - InvalidPrefixError(3, '@', "t@h"), - } - }, - { - "!", - directiveLocation, - new[] - { - InvalidPrefixError(1, '!', "!"), - } - }, - { - "!th", - directiveLocation, - new[] - { - InvalidPrefixError(3, '!', "!th"), - } - }, - }; - } - } - - [Theory] - [MemberData(nameof(InvalidTagHelperPrefixData))] - public void ValidateTagHelperPrefix_ValidatesPrefix( - string directiveText, - SourceLocation directiveLocation, - object expectedErrors) - { - // Arrange - var expectedDiagnostics = (IEnumerable)expectedErrors; - var source = TestRazorSourceDocument.Create(); - var options = RazorParserOptions.CreateDefault(); - var context = new ParserContext(source, options); - - var parser = new CSharpCodeParser(context); - var diagnostics = new List(); - - // Act - parser.ValidateTagHelperPrefix(directiveText, directiveLocation, diagnostics); - - // Assert - Assert.Equal(expectedDiagnostics, diagnostics); - } - - [Theory] - [InlineData("foo,assemblyName", 4)] - [InlineData("foo, assemblyName", 5)] - [InlineData(" foo, assemblyName", 8)] - [InlineData(" foo , assemblyName", 11)] - [InlineData("foo, assemblyName", 8)] - [InlineData(" foo , assemblyName ", 14)] - public void ParseAddOrRemoveDirective_CalculatesAssemblyLocationInLookupText(string text, int assemblyLocation) - { - // Arrange - var source = TestRazorSourceDocument.Create(); - var options = RazorParserOptions.CreateDefault(); - var context = new ParserContext(source, options); - - var parser = new CSharpCodeParser(context); - - var directive = new CSharpCodeParser.ParsedDirective() - { - DirectiveText = text, - }; - - var diagnostics = new List(); - var expected = new SourceLocation(assemblyLocation, 0, assemblyLocation); - - // Act - var result = parser.ParseAddOrRemoveDirective(directive, SourceLocation.Zero, diagnostics); - - // Assert - Assert.Empty(diagnostics); - Assert.Equal("foo", result.TypePattern); - Assert.Equal("assemblyName", result.AssemblyName); - } - - [Theory] - [InlineData("", 1)] - [InlineData("*,", 2)] - [InlineData("?,", 2)] - [InlineData(",", 1)] - [InlineData(",,,", 3)] - [InlineData("First, ", 7)] - [InlineData("First , ", 8)] - [InlineData(" ,Second", 8)] - [InlineData(" , Second", 9)] - [InlineData("SomeType,", 9)] - [InlineData("SomeAssembly", 12)] - [InlineData("First,Second,Third", 18)] - public void ParseAddOrRemoveDirective_CreatesErrorIfInvalidLookupText_DoesNotThrow(string directiveText, int errorLength) - { - // Arrange - var source = TestRazorSourceDocument.Create(); - var options = RazorParserOptions.CreateDefault(); - var context = new ParserContext(source, options); - - var parser = new CSharpCodeParser(context); - - var directive = new CSharpCodeParser.ParsedDirective() - { - DirectiveText = directiveText - }; - - var diagnostics = new List(); - var expectedError = RazorDiagnosticFactory.CreateParsing_InvalidTagHelperLookupText( - new SourceSpan(new SourceLocation(1, 2, 3), errorLength), directiveText); - - // Act - var result = parser.ParseAddOrRemoveDirective(directive, new SourceLocation(1, 2, 3), diagnostics); - - // Assert - Assert.Same(directive, result); - - var error = Assert.Single(diagnostics); - Assert.Equal(expectedError, error); + ParseCodeBlockTest(document, Array.Empty()); } internal virtual void ParseCodeBlockTest( string document, IEnumerable descriptors, - Block expected, + Block expected = null, params RazorDiagnostic[] expectedErrors) { var result = ParseCodeBlock(RazorLanguageVersion.Latest, document, descriptors, designTime: false); + if (UseBaselineTests && !IsTheory) + { + AssertSyntaxTreeNodeMatchesBaseline(result); + return; + } + EvaluateResults(result, expected, expectedErrors); } } diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpAutoCompleteTest/FunctionsDirectiveAutoCompleteAtEOF.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpAutoCompleteTest/FunctionsDirectiveAutoCompleteAtEOF.syntaxtree.txt index a4353cf354..aeb4d8044b 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpAutoCompleteTest/FunctionsDirectiveAutoCompleteAtEOF.syntaxtree.txt +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpAutoCompleteTest/FunctionsDirectiveAutoCompleteAtEOF.syntaxtree.txt @@ -1,4 +1,4 @@ -Directive block - Gen - 11 - (0:0,0) +Directive block - Gen - 11 - (0:0,0) Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 CSharpSymbolType.Transition;[@]; MetaCode span - Gen - [functions] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpAutoCompleteTest/FunctionsDirectiveAutoCompleteAtStartOfFile.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpAutoCompleteTest/FunctionsDirectiveAutoCompleteAtStartOfFile.syntaxtree.txt index 7a268f583d..68498ee910 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpAutoCompleteTest/FunctionsDirectiveAutoCompleteAtStartOfFile.syntaxtree.txt +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpAutoCompleteTest/FunctionsDirectiveAutoCompleteAtStartOfFile.syntaxtree.txt @@ -1,4 +1,4 @@ -Directive block - Gen - 16 - (0:0,0) +Directive block - Gen - 16 - (0:0,0) Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 CSharpSymbolType.Transition;[@]; MetaCode span - Gen - [functions] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpAutoCompleteTest/SectionDirectiveAutoCompleteAtEOF.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpAutoCompleteTest/SectionDirectiveAutoCompleteAtEOF.syntaxtree.txt index c9a6364f31..726919a24f 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpAutoCompleteTest/SectionDirectiveAutoCompleteAtEOF.syntaxtree.txt +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpAutoCompleteTest/SectionDirectiveAutoCompleteAtEOF.syntaxtree.txt @@ -1,4 +1,4 @@ -Directive block - Gen - 17 - (0:0,0) +Directive block - Gen - 17 - (0:0,0) Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 CSharpSymbolType.Transition;[@]; MetaCode span - Gen - [section] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpAutoCompleteTest/SectionDirectiveAutoCompleteAtStartOfFile.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpAutoCompleteTest/SectionDirectiveAutoCompleteAtStartOfFile.syntaxtree.txt index b117855d2b..a695040cee 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpAutoCompleteTest/SectionDirectiveAutoCompleteAtStartOfFile.syntaxtree.txt +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpAutoCompleteTest/SectionDirectiveAutoCompleteAtStartOfFile.syntaxtree.txt @@ -1,4 +1,4 @@ -Directive block - Gen - 29 - (0:0,0) +Directive block - Gen - 29 - (0:0,0) Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 CSharpSymbolType.Transition;[@]; MetaCode span - Gen - [section] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_EndQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_EndQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt new file mode 100644 index 0000000000..fc53232ee5 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_EndQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt @@ -0,0 +1,10 @@ +Directive block - Gen - 18 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [addTagHelper] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[addTagHelper]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (13:0,13) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [Foo"] - SpanEditHandler;Accepts:AnyExceptNewline - (14:0,14) - Symbols:2 + CSharpSymbolType.Identifier;[Foo]; + CSharpSymbolType.StringLiteral;["];RZ1000(17:0,17 [1] ) diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_InvalidLookupText_AddsError.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_InvalidLookupText_AddsError.syntaxtree.txt new file mode 100644 index 0000000000..ac63a091e5 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_InvalidLookupText_AddsError.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 17 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [addTagHelper] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[addTagHelper]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (13:0,13) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [Foo] - SpanEditHandler;Accepts:AnyExceptNewline - (14:0,14) - Symbols:1 + CSharpSymbolType.Identifier;[Foo]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_NoValue_Invalid.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_NoValue_Invalid.syntaxtree.txt new file mode 100644 index 0000000000..a4e6973dbf --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_NoValue_Invalid.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 16 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [addTagHelper] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[addTagHelper]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (13:0,13) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [""] - SpanEditHandler;Accepts:AnyExceptNewline - (14:0,14) - Symbols:1 + CSharpSymbolType.StringLiteral;[""]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_RequiresValue.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_RequiresValue.syntaxtree.txt new file mode 100644 index 0000000000..9b9645b0bc --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_RequiresValue.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 14 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [addTagHelper] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[addTagHelper]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (13:0,13) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [] - SpanEditHandler;Accepts:AnyExceptNewline - (14:0,14) - Symbols:1 + CSharpSymbolType.Unknown;[]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_SingleQuotes_AddsError.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_SingleQuotes_AddsError.syntaxtree.txt new file mode 100644 index 0000000000..024067cf7f --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_SingleQuotes_AddsError.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 22 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [addTagHelper] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[addTagHelper]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (13:0,13) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - ['*, Foo'] - SpanEditHandler;Accepts:AnyExceptNewline - (14:0,14) - Symbols:1 + CSharpSymbolType.CharacterLiteral;['*, Foo']; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_StartQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_StartQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt new file mode 100644 index 0000000000..7a20f4a3d2 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_StartQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 18 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [addTagHelper] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[addTagHelper]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (13:0,13) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - ["Foo] - SpanEditHandler;Accepts:AnyExceptNewline - (14:0,14) - Symbols:1 + CSharpSymbolType.StringLiteral;["Foo];RZ1000(14:0,14 [1] ) diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_SupportsSpaces.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_SupportsSpaces.syntaxtree.txt new file mode 100644 index 0000000000..1d35dbf548 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_SupportsSpaces.syntaxtree.txt @@ -0,0 +1,13 @@ +Directive block - Gen - 32 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [addTagHelper] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[addTagHelper]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (13:0,13) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [Foo, Bar ] - SpanEditHandler;Accepts:AnyExceptNewline - (18:0,18) - Symbols:5 + CSharpSymbolType.Identifier;[Foo]; + CSharpSymbolType.Comma;[,]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Identifier;[Bar]; + CSharpSymbolType.WhiteSpace;[ ]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_WithQuotes_InvalidLookupText_AddsError.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_WithQuotes_InvalidLookupText_AddsError.syntaxtree.txt new file mode 100644 index 0000000000..05946a28f1 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/AddTagHelperDirective_WithQuotes_InvalidLookupText_AddsError.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 19 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [addTagHelper] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[addTagHelper]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (13:0,13) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - ["Foo"] - SpanEditHandler;Accepts:AnyExceptNewline - (14:0,14) - Symbols:1 + CSharpSymbolType.StringLiteral;["Foo"]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/BuiltInDirectiveDoesNotErorrIfNotAtStartOfLineBecauseOfWhitespace.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/BuiltInDirectiveDoesNotErorrIfNotAtStartOfLineBecauseOfWhitespace.syntaxtree.txt new file mode 100644 index 0000000000..f815cae43f --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/BuiltInDirectiveDoesNotErorrIfNotAtStartOfLineBecauseOfWhitespace.syntaxtree.txt @@ -0,0 +1,12 @@ +Directive block - Gen - 26 - (0:0,0) + Code span - Gen - [LF ] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2 + CSharpSymbolType.NewLine;[LF]; + CSharpSymbolType.WhiteSpace;[ ]; + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (4:1,2) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [addTagHelper] - SpanEditHandler;Accepts:None - (5:1,3) - Symbols:1 + CSharpSymbolType.Identifier;[addTagHelper]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (17:1,15) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - ["*, Foo"] - SpanEditHandler;Accepts:AnyExceptNewline - (18:1,16) - Symbols:1 + CSharpSymbolType.StringLiteral;["*, Foo"]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/BuiltInDirectiveErrorsIfNotAtStartOfLine.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/BuiltInDirectiveErrorsIfNotAtStartOfLine.syntaxtree.txt new file mode 100644 index 0000000000..643b8672af --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/BuiltInDirectiveErrorsIfNotAtStartOfLine.syntaxtree.txt @@ -0,0 +1,18 @@ +Statement block - Gen - 28 - (0:0,0) + MetaCode span - Gen - [{] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.LeftBrace;[{]; + Code span - Gen - [ ] - AutoCompleteEditHandler;Accepts:Any,AutoComplete:[];AtEOL - (1:0,1) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Directive block - Gen - 22 - (3:0,3) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (3:0,3) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [addTagHelper] - SpanEditHandler;Accepts:None - (4:0,4) - Symbols:1 + CSharpSymbolType.Identifier;[addTagHelper]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (16:0,16) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - ["*, Foo"] - SpanEditHandler;Accepts:AnyExceptNewline - (17:0,17) - Symbols:1 + CSharpSymbolType.StringLiteral;["*, Foo"]; + Code span - Gen - [LF] - SpanEditHandler;Accepts:Any - (25:0,25) - Symbols:1 + CSharpSymbolType.NewLine;[LF]; + MetaCode span - Gen - [}] - SpanEditHandler;Accepts:None - (27:1,0) - Symbols:1 + CSharpSymbolType.RightBrace;[}]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_AllowsNullableTypes.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_AllowsNullableTypes.syntaxtree.txt new file mode 100644 index 0000000000..8f506b7941 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_AllowsNullableTypes.syntaxtree.txt @@ -0,0 +1,71 @@ +Directive block - Gen - 176 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [string?] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:2 + CSharpSymbolType.Keyword;[string]; + CSharpSymbolType.QuestionMark;[?]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (15:0,15) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [string?[]] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (16:0,16) - Symbols:4 + CSharpSymbolType.Keyword;[string]; + CSharpSymbolType.QuestionMark;[?]; + CSharpSymbolType.LeftBracket;[[]; + CSharpSymbolType.RightBracket;[]]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (25:0,25) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [global::System.Int32?] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (26:0,26) - Symbols:6 + CSharpSymbolType.Identifier;[global]; + CSharpSymbolType.DoubleColon;[::]; + CSharpSymbolType.Identifier;[System]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Int32]; + CSharpSymbolType.QuestionMark;[?]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (47:0,47) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [KeyValuePair?] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (48:0,48) - Symbols:8 + CSharpSymbolType.Identifier;[KeyValuePair]; + CSharpSymbolType.LessThan;[<]; + CSharpSymbolType.Keyword;[string]; + CSharpSymbolType.Comma;[,]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Keyword;[string]; + CSharpSymbolType.GreaterThan;[>]; + CSharpSymbolType.QuestionMark;[?]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (77:0,77) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [KeyValuePair?[]] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (78:0,78) - Symbols:10 + CSharpSymbolType.Identifier;[KeyValuePair]; + CSharpSymbolType.LessThan;[<]; + CSharpSymbolType.Keyword;[string]; + CSharpSymbolType.Comma;[,]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Keyword;[string]; + CSharpSymbolType.GreaterThan;[>]; + CSharpSymbolType.QuestionMark;[?]; + CSharpSymbolType.LeftBracket;[[]; + CSharpSymbolType.RightBracket;[]]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (109:0,109) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [global::System.Collections.Generic.KeyValuePair?[]] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (110:0,110) - Symbols:18 + CSharpSymbolType.Identifier;[global]; + CSharpSymbolType.DoubleColon;[::]; + CSharpSymbolType.Identifier;[System]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Collections]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Generic]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[KeyValuePair]; + CSharpSymbolType.LessThan;[<]; + CSharpSymbolType.Keyword;[string]; + CSharpSymbolType.Comma;[,]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Keyword;[string]; + CSharpSymbolType.GreaterThan;[>]; + CSharpSymbolType.QuestionMark;[?]; + CSharpSymbolType.LeftBracket;[[]; + CSharpSymbolType.RightBracket;[]]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_AllowsTupleTypes.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_AllowsTupleTypes.syntaxtree.txt new file mode 100644 index 0000000000..145e46c8f5 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_AllowsTupleTypes.syntaxtree.txt @@ -0,0 +1,155 @@ +Directive block - Gen - 246 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [(bool, int)] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:6 + CSharpSymbolType.LeftParenthesis;[(]; + CSharpSymbolType.Keyword;[bool]; + CSharpSymbolType.Comma;[,]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Keyword;[int]; + CSharpSymbolType.RightParenthesis;[)]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (19:0,19) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [(int aa, string bb)?] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (20:0,20) - Symbols:11 + CSharpSymbolType.LeftParenthesis;[(]; + CSharpSymbolType.Keyword;[int]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Identifier;[aa]; + CSharpSymbolType.Comma;[,]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Keyword;[string]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Identifier;[bb]; + CSharpSymbolType.RightParenthesis;[)]; + CSharpSymbolType.QuestionMark;[?]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (40:0,40) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [( int? q , bool w )] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (41:0,41) - Symbols:14 + CSharpSymbolType.LeftParenthesis;[(]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Keyword;[int]; + CSharpSymbolType.QuestionMark;[?]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Identifier;[q]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Comma;[,]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Keyword;[bool]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Identifier;[w]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.RightParenthesis;[)]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (70:0,70) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [( int ? q, bool ?w ,(long ? [])) ?] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (71:0,71) - Symbols:26 + CSharpSymbolType.LeftParenthesis;[(]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Keyword;[int]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.QuestionMark;[?]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Identifier;[q]; + CSharpSymbolType.Comma;[,]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Keyword;[bool]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.QuestionMark;[?]; + CSharpSymbolType.Identifier;[w]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Comma;[,]; + CSharpSymbolType.LeftParenthesis;[(]; + CSharpSymbolType.Keyword;[long]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.QuestionMark;[?]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.LeftBracket;[[]; + CSharpSymbolType.RightBracket;[]]; + CSharpSymbolType.RightParenthesis;[)]; + CSharpSymbolType.RightParenthesis;[)]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.QuestionMark;[?]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (108:0,108) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [(List<(int, string)?> aa, string bb)] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (109:0,109) - Symbols:19 + CSharpSymbolType.LeftParenthesis;[(]; + CSharpSymbolType.Identifier;[List]; + CSharpSymbolType.LessThan;[<]; + CSharpSymbolType.LeftParenthesis;[(]; + CSharpSymbolType.Keyword;[int]; + CSharpSymbolType.Comma;[,]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Keyword;[string]; + CSharpSymbolType.RightParenthesis;[)]; + CSharpSymbolType.QuestionMark;[?]; + CSharpSymbolType.GreaterThan;[>]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Identifier;[aa]; + CSharpSymbolType.Comma;[,]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Keyword;[string]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Identifier;[bb]; + CSharpSymbolType.RightParenthesis;[)]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (145:0,145) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [(string ss, (int u, List<(string, int)> k, (Char c, bool b, List l)), global::System.Int32[] a)] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (146:0,146) - Symbols:56 + CSharpSymbolType.LeftParenthesis;[(]; + CSharpSymbolType.Keyword;[string]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Identifier;[ss]; + CSharpSymbolType.Comma;[,]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.LeftParenthesis;[(]; + CSharpSymbolType.Keyword;[int]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Identifier;[u]; + CSharpSymbolType.Comma;[,]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Identifier;[List]; + CSharpSymbolType.LessThan;[<]; + CSharpSymbolType.LeftParenthesis;[(]; + CSharpSymbolType.Keyword;[string]; + CSharpSymbolType.Comma;[,]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Keyword;[int]; + CSharpSymbolType.RightParenthesis;[)]; + CSharpSymbolType.GreaterThan;[>]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Identifier;[k]; + CSharpSymbolType.Comma;[,]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.LeftParenthesis;[(]; + CSharpSymbolType.Identifier;[Char]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Identifier;[c]; + CSharpSymbolType.Comma;[,]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Keyword;[bool]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Identifier;[b]; + CSharpSymbolType.Comma;[,]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Identifier;[List]; + CSharpSymbolType.LessThan;[<]; + CSharpSymbolType.Keyword;[int]; + CSharpSymbolType.GreaterThan;[>]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Identifier;[l]; + CSharpSymbolType.RightParenthesis;[)]; + CSharpSymbolType.RightParenthesis;[)]; + CSharpSymbolType.Comma;[,]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Identifier;[global]; + CSharpSymbolType.DoubleColon;[::]; + CSharpSymbolType.Identifier;[System]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Int32]; + CSharpSymbolType.LeftBracket;[[]; + CSharpSymbolType.RightBracket;[]]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Identifier;[a]; + CSharpSymbolType.RightParenthesis;[)]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_AllowsTupleTypes_IgnoresTrailingWhitespace.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_AllowsTupleTypes_IgnoresTrailingWhitespace.syntaxtree.txt new file mode 100644 index 0000000000..26e92614c8 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_AllowsTupleTypes_IgnoresTrailingWhitespace.syntaxtree.txt @@ -0,0 +1,17 @@ +Directive block - Gen - 23 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [(bool, int?)] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:7 + CSharpSymbolType.LeftParenthesis;[(]; + CSharpSymbolType.Keyword;[bool]; + CSharpSymbolType.Comma;[,]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Keyword;[int]; + CSharpSymbolType.QuestionMark;[?]; + CSharpSymbolType.RightParenthesis;[)]; + None span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (20:0,20) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_AllowsWhiteSpaceAroundTokens.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_AllowsWhiteSpaceAroundTokens.syntaxtree.txt new file mode 100644 index 0000000000..7760373adf --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_AllowsWhiteSpaceAroundTokens.syntaxtree.txt @@ -0,0 +1,21 @@ +Directive block - Gen - 67 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [System.Text.Encoding.ASCIIEncoding] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (11:0,11) - Symbols:7 + CSharpSymbolType.Identifier;[System]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Text]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Encoding]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[ASCIIEncoding]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (45:0,45) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [Some_Member] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (52:0,52) - Symbols:1 + CSharpSymbolType.Identifier;[Some_Member]; + None span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (63:0,63) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_CanHandleEOFIncompleteNamespaceTokens.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_CanHandleEOFIncompleteNamespaceTokens.syntaxtree.txt new file mode 100644 index 0000000000..7f3f2d08f1 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_CanHandleEOFIncompleteNamespaceTokens.syntaxtree.txt @@ -0,0 +1,7 @@ +Directive block - Gen - 8 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_CanHandleEOFInvalidNamespaceTokens.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_CanHandleEOFInvalidNamespaceTokens.syntaxtree.txt new file mode 100644 index 0000000000..7f3f2d08f1 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_CanHandleEOFInvalidNamespaceTokens.syntaxtree.txt @@ -0,0 +1,7 @@ +Directive block - Gen - 8 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_CanHandleIncompleteNamespaceTokens.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_CanHandleIncompleteNamespaceTokens.syntaxtree.txt new file mode 100644 index 0000000000..7f3f2d08f1 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_CanHandleIncompleteNamespaceTokens.syntaxtree.txt @@ -0,0 +1,7 @@ +Directive block - Gen - 8 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_CanHandleInvalidNamespaceTokens.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_CanHandleInvalidNamespaceTokens.syntaxtree.txt new file mode 100644 index 0000000000..7f3f2d08f1 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_CanHandleInvalidNamespaceTokens.syntaxtree.txt @@ -0,0 +1,7 @@ +Directive block - Gen - 8 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_ErrorsExtraContentAfterDirective.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_ErrorsExtraContentAfterDirective.syntaxtree.txt new file mode 100644 index 0000000000..39f9d5c8b7 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_ErrorsExtraContentAfterDirective.syntaxtree.txt @@ -0,0 +1,11 @@ +Directive block - Gen - 16 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - ["hello"] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:1 + CSharpSymbolType.StringLiteral;["hello"]; + None span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (15:0,15) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_ErrorsForInvalidMemberTokens.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_ErrorsForInvalidMemberTokens.syntaxtree.txt new file mode 100644 index 0000000000..597a610805 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_ErrorsForInvalidMemberTokens.syntaxtree.txt @@ -0,0 +1,7 @@ +Directive block - Gen - 8 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_ErrorsWhenEOFBeforeDirectiveBlockStart.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_ErrorsWhenEOFBeforeDirectiveBlockStart.syntaxtree.txt new file mode 100644 index 0000000000..a628e80225 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_ErrorsWhenEOFBeforeDirectiveBlockStart.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 15 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - ["Hello"] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:1 + CSharpSymbolType.StringLiteral;["Hello"]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_ErrorsWhenExtraContentBeforeBlockStart.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_ErrorsWhenExtraContentBeforeBlockStart.syntaxtree.txt new file mode 100644 index 0000000000..8ca507c746 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_ErrorsWhenExtraContentBeforeBlockStart.syntaxtree.txt @@ -0,0 +1,11 @@ +Directive block - Gen - 16 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - ["Hello"] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:1 + CSharpSymbolType.StringLiteral;["Hello"]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:AllWhiteSpace - (15:0,15) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_ErrorsWhenMissingEndBrace.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_ErrorsWhenMissingEndBrace.syntaxtree.txt new file mode 100644 index 0000000000..3e161f55f1 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_ErrorsWhenMissingEndBrace.syntaxtree.txt @@ -0,0 +1,15 @@ +Directive block - Gen - 17 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - ["Hello"] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:1 + CSharpSymbolType.StringLiteral;["Hello"]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:AllWhiteSpace - (15:0,15) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + MetaCode span - Gen - [{] - AutoCompleteEditHandler;Accepts:None,AutoComplete:[}];AtEnd - (16:0,16) - Symbols:1 + CSharpSymbolType.LeftBrace;[{]; + Code span - Gen - [] - CodeBlockEditHandler;Accepts:Any;CodeBlock - (17:0,17) - Symbols:1 + CSharpSymbolType.Unknown;[]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_FileScopedMultipleOccurring_CanHaveDuplicates.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_FileScopedMultipleOccurring_CanHaveDuplicates.syntaxtree.txt new file mode 100644 index 0000000000..b281cea5c2 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_FileScopedMultipleOccurring_CanHaveDuplicates.syntaxtree.txt @@ -0,0 +1,39 @@ +Markup block - Gen - 85 - (0:0,0) + Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1 + HtmlSymbolType.Unknown;[]; + Directive block - Gen - 44 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [System.Text.Encoding.ASCIIEncoding] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:7 + CSharpSymbolType.Identifier;[System]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Text]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Encoding]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[ASCIIEncoding]; + Markup span - Gen - [LF] - SpanEditHandler;Accepts:WhiteSpace - (42:0,42) - Symbols:1 + CSharpSymbolType.NewLine;[LF]; + Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (44:1,0) - Symbols:1 + HtmlSymbolType.Unknown;[]; + Directive block - Gen - 41 - (44:1,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (44:1,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (45:1,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (51:1,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [System.Text.Encoding.UTF8Encoding] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (52:1,8) - Symbols:7 + CSharpSymbolType.Identifier;[System]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Text]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Encoding]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[UTF8Encoding]; + Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (85:1,41) - Symbols:1 + HtmlSymbolType.Unknown;[]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_FileScopedSinglyOccurring_ErrorsIfDuplicate.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_FileScopedSinglyOccurring_ErrorsIfDuplicate.syntaxtree.txt new file mode 100644 index 0000000000..d2ca19ae10 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_FileScopedSinglyOccurring_ErrorsIfDuplicate.syntaxtree.txt @@ -0,0 +1,39 @@ +Markup block - Gen - 85 - (0:0,0) + Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1 + HtmlSymbolType.Unknown;[]; + Directive block - Gen - 44 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [System.Text.Encoding.ASCIIEncoding] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:7 + CSharpSymbolType.Identifier;[System]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Text]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Encoding]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[ASCIIEncoding]; + Markup span - Gen - [LF] - SpanEditHandler;Accepts:WhiteSpace - (42:0,42) - Symbols:1 + CSharpSymbolType.NewLine;[LF]; + Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (44:1,0) - Symbols:1 + HtmlSymbolType.Unknown;[]; + Directive block - Gen - 41 - (44:1,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (44:1,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (45:1,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (51:1,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [System.Text.Encoding.UTF8Encoding] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (52:1,8) - Symbols:7 + CSharpSymbolType.Identifier;[System]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Text]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Encoding]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[UTF8Encoding]; + Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (85:1,41) - Symbols:1 + HtmlSymbolType.Unknown;[]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_FileScoped_CanBeBeneathOtherDirectives.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_FileScoped_CanBeBeneathOtherDirectives.syntaxtree.txt new file mode 100644 index 0000000000..4a45dee1b5 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_FileScoped_CanBeBeneathOtherDirectives.syntaxtree.txt @@ -0,0 +1,33 @@ +Markup block - Gen - 59 - (0:0,0) + Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1 + HtmlSymbolType.Unknown;[]; + Directive block - Gen - 44 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [System.Text.Encoding.ASCIIEncoding] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:7 + CSharpSymbolType.Identifier;[System]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Text]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Encoding]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[ASCIIEncoding]; + Markup span - Gen - [LF] - SpanEditHandler;Accepts:WhiteSpace - (42:0,42) - Symbols:1 + CSharpSymbolType.NewLine;[LF]; + Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (44:1,0) - Symbols:1 + HtmlSymbolType.Unknown;[]; + Directive block - Gen - 15 - (44:1,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (44:1,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [something] - SpanEditHandler;Accepts:None - (45:1,1) - Symbols:1 + CSharpSymbolType.Identifier;[something]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (54:1,10) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [Else] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (55:1,11) - Symbols:1 + CSharpSymbolType.Identifier;[Else]; + Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (59:1,15) - Symbols:1 + HtmlSymbolType.Unknown;[]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_FileScoped_CanBeBeneathOtherWhiteSpaceCommentsAndDirectives.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_FileScoped_CanBeBeneathOtherWhiteSpaceCommentsAndDirectives.syntaxtree.txt new file mode 100644 index 0000000000..eb2a5f3250 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_FileScoped_CanBeBeneathOtherWhiteSpaceCommentsAndDirectives.syntaxtree.txt @@ -0,0 +1,65 @@ +Markup block - Gen - 130 - (0:0,0) + Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1 + HtmlSymbolType.Unknown;[]; + Comment block - Gen - 43 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + HtmlSymbolType.RazorCommentTransition;[@]; + MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + HtmlSymbolType.RazorCommentStar;[*]; + Comment span - Gen - [ There are two directives beneath this ] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:1 + HtmlSymbolType.RazorComment;[ There are two directives beneath this ]; + MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (41:0,41) - Symbols:1 + HtmlSymbolType.RazorCommentStar;[*]; + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (42:0,42) - Symbols:1 + HtmlSymbolType.RazorCommentTransition;[@]; + Markup span - Gen - [LF] - SpanEditHandler;Accepts:Any - (43:0,43) - Symbols:1 + HtmlSymbolType.NewLine;[LF]; + Directive block - Gen - 44 - (45:1,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (45:1,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (46:1,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (52:1,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [System.Text.Encoding.ASCIIEncoding] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (53:1,8) - Symbols:7 + CSharpSymbolType.Identifier;[System]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Text]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Encoding]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[ASCIIEncoding]; + Markup span - Gen - [LF] - SpanEditHandler;Accepts:WhiteSpace - (87:1,42) - Symbols:1 + CSharpSymbolType.NewLine;[LF]; + Markup span - Gen - [LF] - SpanEditHandler;Accepts:Any - (89:2,0) - Symbols:1 + HtmlSymbolType.NewLine;[LF]; + Directive block - Gen - 17 - (91:3,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (91:3,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [something] - SpanEditHandler;Accepts:None - (92:3,1) - Symbols:1 + CSharpSymbolType.Identifier;[something]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (101:3,10) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [Else] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (102:3,11) - Symbols:1 + CSharpSymbolType.Identifier;[Else]; + Markup span - Gen - [LF] - SpanEditHandler;Accepts:WhiteSpace - (106:3,15) - Symbols:1 + CSharpSymbolType.NewLine;[LF]; + Markup span - Gen - [LF] - SpanEditHandler;Accepts:Any - (108:4,0) - Symbols:1 + HtmlSymbolType.NewLine;[LF]; + Tag block - Gen - 3 - (110:5,0) + Markup span - Gen - [

] - SpanEditHandler;Accepts:Any - (110:5,0) - Symbols:3 + HtmlSymbolType.OpenAngle;[<]; + HtmlSymbolType.Text;[p]; + HtmlSymbolType.CloseAngle;[>]; + Markup span - Gen - [This is extra] - SpanEditHandler;Accepts:Any - (113:5,3) - Symbols:5 + HtmlSymbolType.Text;[This]; + HtmlSymbolType.WhiteSpace;[ ]; + HtmlSymbolType.Text;[is]; + HtmlSymbolType.WhiteSpace;[ ]; + HtmlSymbolType.Text;[extra]; + Tag block - Gen - 4 - (126:5,16) + Markup span - Gen - [

] - SpanEditHandler;Accepts:Any - (126:5,16) - Symbols:4 + HtmlSymbolType.OpenAngle;[<]; + HtmlSymbolType.ForwardSlash;[/]; + HtmlSymbolType.Text;[p]; + HtmlSymbolType.CloseAngle;[>]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_NoErrorsSemicolonAfterDirective.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_NoErrorsSemicolonAfterDirective.syntaxtree.txt new file mode 100644 index 0000000000..66b6200cbe --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_NoErrorsSemicolonAfterDirective.syntaxtree.txt @@ -0,0 +1,15 @@ +Directive block - Gen - 19 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - ["hello"] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:1 + CSharpSymbolType.StringLiteral;["hello"]; + None span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (15:0,15) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + MetaCode span - Gen - [;] - SpanEditHandler;Accepts:WhiteSpace - (16:0,16) - Symbols:1 + CSharpSymbolType.Semicolon;[;]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (17:0,17) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_StringToken_ParserErrorForNonStringValue.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_StringToken_ParserErrorForNonStringValue.syntaxtree.txt new file mode 100644 index 0000000000..3db9d2b527 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_StringToken_ParserErrorForNonStringValue.syntaxtree.txt @@ -0,0 +1,7 @@ +Directive block - Gen - 8 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_StringToken_ParserErrorForPartialQuotedValue.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_StringToken_ParserErrorForPartialQuotedValue.syntaxtree.txt new file mode 100644 index 0000000000..a80e2e48d4 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_StringToken_ParserErrorForPartialQuotedValue.syntaxtree.txt @@ -0,0 +1,7 @@ +Directive block - Gen - 8 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_StringToken_ParserErrorForSingleQuotedValue.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_StringToken_ParserErrorForSingleQuotedValue.syntaxtree.txt new file mode 100644 index 0000000000..15f59fc001 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_StringToken_ParserErrorForSingleQuotedValue.syntaxtree.txt @@ -0,0 +1,7 @@ +Directive block - Gen - 8 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_StringToken_ParserErrorForUnquotedValue.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_StringToken_ParserErrorForUnquotedValue.syntaxtree.txt new file mode 100644 index 0000000000..a80e2e48d4 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_StringToken_ParserErrorForUnquotedValue.syntaxtree.txt @@ -0,0 +1,7 @@ +Directive block - Gen - 8 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_TokensMustBeSeparatedBySpace.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_TokensMustBeSeparatedBySpace.syntaxtree.txt new file mode 100644 index 0000000000..de6d063d24 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_TokensMustBeSeparatedBySpace.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 17 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - ["string1"] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:1 + CSharpSymbolType.StringLiteral;["string1"]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsCodeBlocks.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsCodeBlocks.syntaxtree.txt new file mode 100644 index 0000000000..de2b8358b3 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsCodeBlocks.syntaxtree.txt @@ -0,0 +1,27 @@ +Directive block - Gen - 32 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - ["Name"] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:1 + CSharpSymbolType.StringLiteral;["Name"]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:AllWhiteSpace - (14:0,14) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + MetaCode span - Gen - [{] - AutoCompleteEditHandler;Accepts:None,AutoComplete:[];AtEnd - (15:0,15) - Symbols:1 + CSharpSymbolType.LeftBrace;[{]; + Code span - Gen - [ foo(); bar(); ] - CodeBlockEditHandler;Accepts:Any;CodeBlock - (16:0,16) - Symbols:11 + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Identifier;[foo]; + CSharpSymbolType.LeftParenthesis;[(]; + CSharpSymbolType.RightParenthesis;[)]; + CSharpSymbolType.Semicolon;[;]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Identifier;[bar]; + CSharpSymbolType.LeftParenthesis;[(]; + CSharpSymbolType.RightParenthesis;[)]; + CSharpSymbolType.Semicolon;[;]; + CSharpSymbolType.WhiteSpace;[ ]; + MetaCode span - Gen - [}] - SpanEditHandler;Accepts:None - (31:0,31) - Symbols:1 + CSharpSymbolType.RightBrace;[}]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsMemberTokens.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsMemberTokens.syntaxtree.txt new file mode 100644 index 0000000000..f29e34c399 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsMemberTokens.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 19 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [Some_Member] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:1 + CSharpSymbolType.Identifier;[Some_Member]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsMultipleTokens.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsMultipleTokens.syntaxtree.txt new file mode 100644 index 0000000000..09011f33e8 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsMultipleTokens.syntaxtree.txt @@ -0,0 +1,23 @@ +Directive block - Gen - 64 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [System.Text.Encoding.ASCIIEncoding] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:7 + CSharpSymbolType.Identifier;[System]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Text]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Encoding]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[ASCIIEncoding]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (42:0,42) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [Some_Member] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (43:0,43) - Symbols:1 + CSharpSymbolType.Identifier;[Some_Member]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (54:0,54) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - ["AString"] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (55:0,55) - Symbols:1 + CSharpSymbolType.StringLiteral;["AString"]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsRazorBlocks.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsRazorBlocks.syntaxtree.txt new file mode 100644 index 0000000000..d4d820566f --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsRazorBlocks.syntaxtree.txt @@ -0,0 +1,37 @@ +Directive block - Gen - 33 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - ["Header"] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:1 + CSharpSymbolType.StringLiteral;["Header"]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:AllWhiteSpace - (16:0,16) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + MetaCode span - Gen - [{] - AutoCompleteEditHandler;Accepts:None,AutoComplete:[];AtEnd - (17:0,17) - Symbols:1 + CSharpSymbolType.LeftBrace;[{]; + Markup block - Gen - 14 - (18:0,18) + Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (18:0,18) - Symbols:1 + HtmlSymbolType.WhiteSpace;[ ]; + Tag block - Gen - 3 - (19:0,19) + Markup span - Gen - [

] - SpanEditHandler;Accepts:Any - (19:0,19) - Symbols:3 + HtmlSymbolType.OpenAngle;[<]; + HtmlSymbolType.Text;[p]; + HtmlSymbolType.CloseAngle;[>]; + Markup span - Gen - [F{o}o] - SpanEditHandler;Accepts:Any - (22:0,22) - Symbols:5 + HtmlSymbolType.Text;[F]; + HtmlSymbolType.Text;[{]; + HtmlSymbolType.Text;[o]; + HtmlSymbolType.Text;[}]; + HtmlSymbolType.Text;[o]; + Tag block - Gen - 4 - (27:0,27) + Markup span - Gen - [

] - SpanEditHandler;Accepts:Any - (27:0,27) - Symbols:4 + HtmlSymbolType.OpenAngle;[<]; + HtmlSymbolType.ForwardSlash;[/]; + HtmlSymbolType.Text;[p]; + HtmlSymbolType.CloseAngle;[>]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (31:0,31) - Symbols:1 + HtmlSymbolType.WhiteSpace;[ ]; + MetaCode span - Gen - [}] - SpanEditHandler;Accepts:None - (32:0,32) - Symbols:1 + CSharpSymbolType.RightBrace;[}]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsStringTokens.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsStringTokens.syntaxtree.txt new file mode 100644 index 0000000000..003c77ac67 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsStringTokens.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 17 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - ["AString"] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:1 + CSharpSymbolType.StringLiteral;["AString"]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsTypeTokens.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsTypeTokens.syntaxtree.txt new file mode 100644 index 0000000000..99865f717d --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/DirectiveDescriptor_UnderstandsTypeTokens.syntaxtree.txt @@ -0,0 +1,15 @@ +Directive block - Gen - 42 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [System.Text.Encoding.ASCIIEncoding] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:7 + CSharpSymbolType.Identifier;[System]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Text]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Encoding]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[ASCIIEncoding]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Directives_CanUseReservedWord_Class.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Directives_CanUseReservedWord_Class.syntaxtree.txt new file mode 100644 index 0000000000..254a58c9ba --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Directives_CanUseReservedWord_Class.syntaxtree.txt @@ -0,0 +1,5 @@ +Directive block - Gen - 6 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [class] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Keyword;[class]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Directives_CanUseReservedWord_Namespace.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Directives_CanUseReservedWord_Namespace.syntaxtree.txt new file mode 100644 index 0000000000..7c56185f2c --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Directives_CanUseReservedWord_Namespace.syntaxtree.txt @@ -0,0 +1,5 @@ +Directive block - Gen - 10 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [namespace] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Keyword;[namespace]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/EmptyFunctionsDirective.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/EmptyFunctionsDirective.syntaxtree.txt new file mode 100644 index 0000000000..74cd02530c --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/EmptyFunctionsDirective.syntaxtree.txt @@ -0,0 +1,13 @@ +Directive block - Gen - 14 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [functions] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[functions]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:AllWhiteSpace - (10:0,10) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + MetaCode span - Gen - [{] - AutoCompleteEditHandler;Accepts:None,AutoComplete:[];AtEnd - (11:0,11) - Symbols:1 + CSharpSymbolType.LeftBrace;[{]; + Code span - Gen - [ ] - CodeBlockEditHandler;Accepts:Any;CodeBlock - (12:0,12) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + MetaCode span - Gen - [}] - SpanEditHandler;Accepts:None - (13:0,13) - Symbols:1 + CSharpSymbolType.RightBrace;[}]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/ExtensibleDirectiveDoesNotErorrIfNotAtStartOfLineBecauseOfWhitespace.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/ExtensibleDirectiveDoesNotErorrIfNotAtStartOfLineBecauseOfWhitespace.syntaxtree.txt new file mode 100644 index 0000000000..5782c0d274 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/ExtensibleDirectiveDoesNotErorrIfNotAtStartOfLineBecauseOfWhitespace.syntaxtree.txt @@ -0,0 +1,18 @@ +Directive block - Gen - 46 - (0:0,0) + Code span - Gen - [LF ] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:2 + CSharpSymbolType.NewLine;[LF]; + CSharpSymbolType.WhiteSpace;[ ]; + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (4:1,2) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (5:1,3) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (11:1,9) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [System.Text.Encoding.ASCIIEncoding] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (12:1,10) - Symbols:7 + CSharpSymbolType.Identifier;[System]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Text]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Encoding]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[ASCIIEncoding]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/ExtensibleDirectiveErrorsIfNotAtStartOfLine.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/ExtensibleDirectiveErrorsIfNotAtStartOfLine.syntaxtree.txt new file mode 100644 index 0000000000..db87fbabc6 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/ExtensibleDirectiveErrorsIfNotAtStartOfLine.syntaxtree.txt @@ -0,0 +1,26 @@ +Statement block - Gen - 48 - (0:0,0) + MetaCode span - Gen - [{] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.LeftBrace;[{]; + Code span - Gen - [ ] - AutoCompleteEditHandler;Accepts:Any,AutoComplete:[];AtEOL - (1:0,1) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Directive block - Gen - 44 - (3:0,3) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (3:0,3) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (4:0,4) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (10:0,10) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [System.Text.Encoding.ASCIIEncoding] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (11:0,11) - Symbols:7 + CSharpSymbolType.Identifier;[System]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Text]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Encoding]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[ASCIIEncoding]; + Markup span - Gen - [LF] - SpanEditHandler;Accepts:WhiteSpace - (45:0,45) - Symbols:1 + CSharpSymbolType.NewLine;[LF]; + Code span - Gen - [] - SpanEditHandler;Accepts:Any - (47:1,0) - Symbols:1 + CSharpSymbolType.Unknown;[]; + MetaCode span - Gen - [}] - SpanEditHandler;Accepts:None - (47:1,0) - Symbols:1 + CSharpSymbolType.RightBrace;[}]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/InheritsDirectiveSupportsArrays.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/InheritsDirectiveSupportsArrays.syntaxtree.txt new file mode 100644 index 0000000000..df4ed89534 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/InheritsDirectiveSupportsArrays.syntaxtree.txt @@ -0,0 +1,20 @@ +Markup block - Gen - 22 - (0:0,0) + Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1 + HtmlSymbolType.Unknown;[]; + Directive block - Gen - 22 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [inherits] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[inherits]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (9:0,9) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [string[[]][]] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (10:0,10) - Symbols:7 + CSharpSymbolType.Keyword;[string]; + CSharpSymbolType.LeftBracket;[[]; + CSharpSymbolType.LeftBracket;[[]; + CSharpSymbolType.RightBracket;[]]; + CSharpSymbolType.RightBracket;[]]; + CSharpSymbolType.LeftBracket;[[]; + CSharpSymbolType.RightBracket;[]]; + Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (22:0,22) - Symbols:1 + HtmlSymbolType.Unknown;[]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/InheritsDirectiveSupportsNestedGenerics.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/InheritsDirectiveSupportsNestedGenerics.syntaxtree.txt new file mode 100644 index 0000000000..70a9fc2701 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/InheritsDirectiveSupportsNestedGenerics.syntaxtree.txt @@ -0,0 +1,30 @@ +Markup block - Gen - 87 - (0:0,0) + Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1 + HtmlSymbolType.Unknown;[]; + Directive block - Gen - 87 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [inherits] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[inherits]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (9:0,9) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [System.Web.Mvc.WebViewPage>] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (10:0,10) - Symbols:17 + CSharpSymbolType.Identifier;[System]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Web]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Mvc]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[WebViewPage]; + CSharpSymbolType.LessThan;[<]; + CSharpSymbolType.Identifier;[IEnumerable]; + CSharpSymbolType.LessThan;[<]; + CSharpSymbolType.Identifier;[MvcApplication2]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Models]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[RegisterModel]; + CSharpSymbolType.GreaterThan;[>]; + CSharpSymbolType.GreaterThan;[>]; + Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (87:0,87) - Symbols:1 + HtmlSymbolType.Unknown;[]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/InheritsDirectiveSupportsTypeKeywords.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/InheritsDirectiveSupportsTypeKeywords.syntaxtree.txt new file mode 100644 index 0000000000..61adfcaf46 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/InheritsDirectiveSupportsTypeKeywords.syntaxtree.txt @@ -0,0 +1,14 @@ +Markup block - Gen - 16 - (0:0,0) + Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1 + HtmlSymbolType.Unknown;[]; + Directive block - Gen - 16 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [inherits] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[inherits]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (9:0,9) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [string] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (10:0,10) - Symbols:1 + CSharpSymbolType.Keyword;[string]; + Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (16:0,16) - Symbols:1 + HtmlSymbolType.Unknown;[]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalDirectiveTokens_AreSkipped.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalDirectiveTokens_AreSkipped.syntaxtree.txt new file mode 100644 index 0000000000..fe88685d99 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalDirectiveTokens_AreSkipped.syntaxtree.txt @@ -0,0 +1,7 @@ +Directive block - Gen - 8 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalDirectiveTokens_WithBraces_AreParsed.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalDirectiveTokens_WithBraces_AreParsed.syntaxtree.txt new file mode 100644 index 0000000000..080b1cf44b --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalDirectiveTokens_WithBraces_AreParsed.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 29 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - ["{formaction}?/{id}?"] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:1 + CSharpSymbolType.StringLiteral;["{formaction}?/{id}?"]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalDirectiveTokens_WithMultipleOptionalTokens_AreParsed.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalDirectiveTokens_WithMultipleOptionalTokens_AreParsed.syntaxtree.txt new file mode 100644 index 0000000000..ed9253fcff --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalDirectiveTokens_WithMultipleOptionalTokens_AreParsed.syntaxtree.txt @@ -0,0 +1,15 @@ +Directive block - Gen - 43 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - ["{formaction}?/{id}?"] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:1 + CSharpSymbolType.StringLiteral;["{formaction}?/{id}?"]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (29:0,29) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [System.String] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (30:0,30) - Symbols:3 + CSharpSymbolType.Identifier;[System]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[String]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalDirectiveTokens_WithSimpleTokens_AreParsed.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalDirectiveTokens_WithSimpleTokens_AreParsed.syntaxtree.txt new file mode 100644 index 0000000000..76422e95ad --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalDirectiveTokens_WithSimpleTokens_AreParsed.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 22 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - ["simple-value"] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:1 + CSharpSymbolType.StringLiteral;["simple-value"]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalMemberTokens_WithMemberSpecified_IsParsed.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalMemberTokens_WithMemberSpecified_IsParsed.syntaxtree.txt new file mode 100644 index 0000000000..82119d319b --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalMemberTokens_WithMemberSpecified_IsParsed.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 27 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [TestDirective] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[TestDirective]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (14:0,14) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [PropertyName] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (15:0,15) - Symbols:1 + CSharpSymbolType.Identifier;[PropertyName]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalMemberTokens_WithMissingMember_IsParsed.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalMemberTokens_WithMissingMember_IsParsed.syntaxtree.txt new file mode 100644 index 0000000000..a5881d0daa --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/OptionalMemberTokens_WithMissingMember_IsParsed.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 15 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [TestDirective] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[TestDirective]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (14:0,14) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (15:0,15) - Symbols:1 + CSharpSymbolType.Unknown;[]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Parse_FunctionsDirective.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Parse_FunctionsDirective.syntaxtree.txt new file mode 100644 index 0000000000..75dd6fbff4 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Parse_FunctionsDirective.syntaxtree.txt @@ -0,0 +1,23 @@ +Directive block - Gen - 28 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [functions] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[functions]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:AllWhiteSpace - (10:0,10) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + MetaCode span - Gen - [{] - AutoCompleteEditHandler;Accepts:None,AutoComplete:[];AtEnd - (11:0,11) - Symbols:1 + CSharpSymbolType.LeftBrace;[{]; + Code span - Gen - [ foo(); bar(); ] - CodeBlockEditHandler;Accepts:Any;CodeBlock - (12:0,12) - Symbols:11 + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Identifier;[foo]; + CSharpSymbolType.LeftParenthesis;[(]; + CSharpSymbolType.RightParenthesis;[)]; + CSharpSymbolType.Semicolon;[;]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Identifier;[bar]; + CSharpSymbolType.LeftParenthesis;[(]; + CSharpSymbolType.RightParenthesis;[)]; + CSharpSymbolType.Semicolon;[;]; + CSharpSymbolType.WhiteSpace;[ ]; + MetaCode span - Gen - [}] - SpanEditHandler;Accepts:None - (27:0,27) - Symbols:1 + CSharpSymbolType.RightBrace;[}]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Parse_SectionDirective.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Parse_SectionDirective.syntaxtree.txt new file mode 100644 index 0000000000..0a3810f75d --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Parse_SectionDirective.syntaxtree.txt @@ -0,0 +1,37 @@ +Directive block - Gen - 32 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [section] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[section]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (8:0,8) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [Header] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (9:0,9) - Symbols:1 + CSharpSymbolType.Identifier;[Header]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:AllWhiteSpace - (15:0,15) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + MetaCode span - Gen - [{] - AutoCompleteEditHandler;Accepts:None,AutoComplete:[];AtEnd - (16:0,16) - Symbols:1 + CSharpSymbolType.LeftBrace;[{]; + Markup block - Gen - 14 - (17:0,17) + Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (17:0,17) - Symbols:1 + HtmlSymbolType.WhiteSpace;[ ]; + Tag block - Gen - 3 - (18:0,18) + Markup span - Gen - [

] - SpanEditHandler;Accepts:Any - (18:0,18) - Symbols:3 + HtmlSymbolType.OpenAngle;[<]; + HtmlSymbolType.Text;[p]; + HtmlSymbolType.CloseAngle;[>]; + Markup span - Gen - [F{o}o] - SpanEditHandler;Accepts:Any - (21:0,21) - Symbols:5 + HtmlSymbolType.Text;[F]; + HtmlSymbolType.Text;[{]; + HtmlSymbolType.Text;[o]; + HtmlSymbolType.Text;[}]; + HtmlSymbolType.Text;[o]; + Tag block - Gen - 4 - (26:0,26) + Markup span - Gen - [

] - SpanEditHandler;Accepts:Any - (26:0,26) - Symbols:4 + HtmlSymbolType.OpenAngle;[<]; + HtmlSymbolType.ForwardSlash;[/]; + HtmlSymbolType.Text;[p]; + HtmlSymbolType.CloseAngle;[>]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (30:0,30) - Symbols:1 + HtmlSymbolType.WhiteSpace;[ ]; + MetaCode span - Gen - [}] - SpanEditHandler;Accepts:None - (31:0,31) - Symbols:1 + CSharpSymbolType.RightBrace;[}]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Parser_ParsesNamespaceDirectiveToken_WithMultipleSegments.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Parser_ParsesNamespaceDirectiveToken_WithMultipleSegments.syntaxtree.txt new file mode 100644 index 0000000000..b14fe5e74d --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Parser_ParsesNamespaceDirectiveToken_WithMultipleSegments.syntaxtree.txt @@ -0,0 +1,13 @@ +Directive block - Gen - 29 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [BaseNamespace.Foo.Bar] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:5 + CSharpSymbolType.Identifier;[BaseNamespace]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Foo]; + CSharpSymbolType.Dot;[.]; + CSharpSymbolType.Identifier;[Bar]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Parser_ParsesNamespaceDirectiveToken_WithSingleSegment.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Parser_ParsesNamespaceDirectiveToken_WithSingleSegment.syntaxtree.txt new file mode 100644 index 0000000000..a4e1048ad6 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/Parser_ParsesNamespaceDirectiveToken_WithSingleSegment.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 21 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [custom] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[custom]; + Code span - Gen - [ ] - SpanEditHandler;Accepts:WhiteSpace - (7:0,7) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [BaseNamespace] - DirectiveTokenEditHandler;Accepts:NonWhiteSpace - (8:0,8) - Symbols:1 + CSharpSymbolType.Identifier;[BaseNamespace]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_EndQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_EndQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt new file mode 100644 index 0000000000..9a172eb914 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_EndQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt @@ -0,0 +1,10 @@ +Directive block - Gen - 21 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [removeTagHelper] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[removeTagHelper]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (16:0,16) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [Foo"] - SpanEditHandler;Accepts:AnyExceptNewline - (17:0,17) - Symbols:2 + CSharpSymbolType.Identifier;[Foo]; + CSharpSymbolType.StringLiteral;["];RZ1000(20:0,20 [1] ) diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_InvalidLookupText_AddsError.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_InvalidLookupText_AddsError.syntaxtree.txt new file mode 100644 index 0000000000..5f792feb43 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_InvalidLookupText_AddsError.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 20 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [removeTagHelper] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[removeTagHelper]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (16:0,16) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [Foo] - SpanEditHandler;Accepts:AnyExceptNewline - (17:0,17) - Symbols:1 + CSharpSymbolType.Identifier;[Foo]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_NoValue_Invalid.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_NoValue_Invalid.syntaxtree.txt new file mode 100644 index 0000000000..41f8e7f760 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_NoValue_Invalid.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 19 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [removeTagHelper] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[removeTagHelper]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (16:0,16) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [""] - SpanEditHandler;Accepts:AnyExceptNewline - (17:0,17) - Symbols:1 + CSharpSymbolType.StringLiteral;[""]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_RequiresValue.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_RequiresValue.syntaxtree.txt new file mode 100644 index 0000000000..4b0b72ab8f --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_RequiresValue.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 17 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [removeTagHelper] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[removeTagHelper]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (16:0,16) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [] - SpanEditHandler;Accepts:AnyExceptNewline - (17:0,17) - Symbols:1 + CSharpSymbolType.Unknown;[]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_SingleQuotes_AddsError.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_SingleQuotes_AddsError.syntaxtree.txt new file mode 100644 index 0000000000..6ff9997349 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_SingleQuotes_AddsError.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 25 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [removeTagHelper] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[removeTagHelper]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (16:0,16) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - ['*, Foo'] - SpanEditHandler;Accepts:AnyExceptNewline - (17:0,17) - Symbols:1 + CSharpSymbolType.CharacterLiteral;['*, Foo']; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_StartQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_StartQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt new file mode 100644 index 0000000000..c4085cec02 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_StartQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 21 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [removeTagHelper] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[removeTagHelper]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (16:0,16) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - ["Foo] - SpanEditHandler;Accepts:AnyExceptNewline - (17:0,17) - Symbols:1 + CSharpSymbolType.StringLiteral;["Foo];RZ1000(17:0,17 [1] ) diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_SupportsSpaces.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_SupportsSpaces.syntaxtree.txt new file mode 100644 index 0000000000..cffad8b956 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_SupportsSpaces.syntaxtree.txt @@ -0,0 +1,13 @@ +Directive block - Gen - 35 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [removeTagHelper] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[removeTagHelper]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (16:0,16) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [Foo, Bar ] - SpanEditHandler;Accepts:AnyExceptNewline - (21:0,21) - Symbols:5 + CSharpSymbolType.Identifier;[Foo]; + CSharpSymbolType.Comma;[,]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.Identifier;[Bar]; + CSharpSymbolType.WhiteSpace;[ ]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_WithQuotes_InvalidLookupText_AddsError.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_WithQuotes_InvalidLookupText_AddsError.syntaxtree.txt new file mode 100644 index 0000000000..aff91dc1f6 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/RemoveTagHelperDirective_WithQuotes_InvalidLookupText_AddsError.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 22 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [removeTagHelper] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[removeTagHelper]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (16:0,16) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - ["Foo"] - SpanEditHandler;Accepts:AnyExceptNewline - (17:0,17) - Symbols:1 + CSharpSymbolType.StringLiteral;["Foo"]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_EndQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_EndQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt new file mode 100644 index 0000000000..5254a067c9 --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_EndQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt @@ -0,0 +1,11 @@ +Directive block - Gen - 24 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [tagHelperPrefix] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[tagHelperPrefix]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (16:0,16) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [Foo "] - SpanEditHandler;Accepts:AnyExceptNewline - (17:0,17) - Symbols:3 + CSharpSymbolType.Identifier;[Foo]; + CSharpSymbolType.WhiteSpace;[ ]; + CSharpSymbolType.StringLiteral;["];RZ1000(23:0,23 [1] ) diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_NoValueSucceeds.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_NoValueSucceeds.syntaxtree.txt new file mode 100644 index 0000000000..9a93abd3af --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_NoValueSucceeds.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 19 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [tagHelperPrefix] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[tagHelperPrefix]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (16:0,16) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [""] - SpanEditHandler;Accepts:AnyExceptNewline - (17:0,17) - Symbols:1 + CSharpSymbolType.StringLiteral;[""]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_RequiresValue.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_RequiresValue.syntaxtree.txt new file mode 100644 index 0000000000..8eb05d427c --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_RequiresValue.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 17 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [tagHelperPrefix] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[tagHelperPrefix]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (16:0,16) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [] - SpanEditHandler;Accepts:AnyExceptNewline - (17:0,17) - Symbols:1 + CSharpSymbolType.Unknown;[]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_StartQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_StartQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt new file mode 100644 index 0000000000..5d4223957a --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_StartQuoteRequiresDoubleQuotesAroundValue.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 21 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [tagHelperPrefix] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[tagHelperPrefix]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (16:0,16) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - ["Foo] - SpanEditHandler;Accepts:AnyExceptNewline - (17:0,17) - Symbols:1 + CSharpSymbolType.StringLiteral;["Foo];RZ1000(17:0,17 [1] ) diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_Succeeds.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_Succeeds.syntaxtree.txt new file mode 100644 index 0000000000..ce8884c54b --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_Succeeds.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 20 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [tagHelperPrefix] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[tagHelperPrefix]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (16:0,16) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - [Foo] - SpanEditHandler;Accepts:AnyExceptNewline - (17:0,17) - Symbols:1 + CSharpSymbolType.Identifier;[Foo]; diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_WithQuotes_Succeeds.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_WithQuotes_Succeeds.syntaxtree.txt new file mode 100644 index 0000000000..f9c3d601bb --- /dev/null +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpDirectivesTest/TagHelperPrefixDirective_WithQuotes_Succeeds.syntaxtree.txt @@ -0,0 +1,9 @@ +Directive block - Gen - 22 - (0:0,0) + Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1 + CSharpSymbolType.Transition;[@]; + MetaCode span - Gen - [tagHelperPrefix] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1 + CSharpSymbolType.Identifier;[tagHelperPrefix]; + Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (16:0,16) - Symbols:1 + CSharpSymbolType.WhiteSpace;[ ]; + Code span - Gen - ["Foo"] - SpanEditHandler;Accepts:AnyExceptNewline - (17:0,17) - Symbols:1 + CSharpSymbolType.StringLiteral;["Foo"]; diff --git a/test/Microsoft.AspNetCore.Razor.Test.Common/Language/Legacy/ParserTestBase.cs b/test/Microsoft.AspNetCore.Razor.Test.Common/Language/Legacy/ParserTestBase.cs index 463b8bd486..9171090ce1 100644 --- a/test/Microsoft.AspNetCore.Razor.Test.Common/Language/Legacy/ParserTestBase.cs +++ b/test/Microsoft.AspNetCore.Razor.Test.Common/Language/Legacy/ParserTestBase.cs @@ -181,7 +181,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy { directives = directives ?? Array.Empty(); - var source = TestRazorSourceDocument.Create(document, filePath: null); + var source = TestRazorSourceDocument.Create(document, filePath: null, normalizeNewLines: UseBaselineTests); var options = CreateParserOptions(version, directives, designTime); var context = new ParserContext(source, options); @@ -420,6 +420,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy ParseDocumentTest(document, null, false); } + internal virtual void ParseDocumentTest(string document, IEnumerable directives) + { + ParseDocumentTest(document, directives, expected: null); + } + internal virtual void ParseDocumentTest(string document, Block expectedRoot) { ParseDocumentTest(document, expectedRoot, false, null); @@ -454,6 +459,12 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy { var result = ParseDocument(document, directives, designTime); + if (UseBaselineTests && !IsTheory) + { + AssertSyntaxTreeNodeMatchesBaseline(result); + return; + } + if (FixupSpans) { SpancestryCorrector.Correct(expected); diff --git a/test/Microsoft.AspNetCore.Razor.Test.Common/Language/Legacy/SyntaxTreeNodeWriter.cs b/test/Microsoft.AspNetCore.Razor.Test.Common/Language/Legacy/SyntaxTreeNodeWriter.cs index 290d79c459..db23459d3c 100644 --- a/test/Microsoft.AspNetCore.Razor.Test.Common/Language/Legacy/SyntaxTreeNodeWriter.cs +++ b/test/Microsoft.AspNetCore.Razor.Test.Common/Language/Legacy/SyntaxTreeNodeWriter.cs @@ -180,7 +180,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy diagnostics = csharpSymbol.Errors; } - var symbolString = $"{symbolType};[{symbol.Content}];{string.Join(",", diagnostics.Select(diagnostic => diagnostic.Id))}"; + var symbolString = $"{symbolType};[{symbol.Content}];{string.Join(", ", diagnostics.Select(diagnostic => diagnostic.Id + diagnostic.Span))}"; Write(symbolString); }