Parse string directive tokens correctly

This commit is contained in:
Pranav K 2017-02-08 10:39:44 -08:00
parent 2eba53de1b
commit 8b764c57e4
2 changed files with 25 additions and 1 deletions

View File

@ -1553,7 +1553,8 @@ namespace Microsoft.AspNetCore.Razor.Evolution.Legacy
outputKind = SpanKind.Code;
break;
case DirectiveTokenKind.String:
AcceptAndMoveNext();
AcceptUntil(CSharpSymbolType.WhiteSpace, CSharpSymbolType.NewLine);
NextToken();
break;
}

View File

@ -751,6 +751,29 @@ namespace Microsoft.AspNetCore.Razor.Evolution.Legacy
Factory.Span(SpanKind.Markup, " ", markup: false).Accepts(AcceptedCharacters.WhiteSpace)));
}
[Theory]
[InlineData("token")]
[InlineData("{formaction?}/{id}?")]
public void OptionalDirectiveTokens_AreParsed(string value)
{
// Arrange
var descriptor = DirectiveDescriptorBuilder.Create("custom").BeginOptionals().AddString().Build();
var chunkGenerator = new DirectiveTokenChunkGenerator(descriptor.Tokens.First());
// Act & Assert
ParseCodeBlockTest(
$"@custom {value}",
new[] { descriptor },
new DirectiveBlock(
new DirectiveChunkGenerator(descriptor),
Factory.CodeTransition(),
Factory.MetaCode("custom").Accepts(AcceptedCharacters.None),
Factory.Span(SpanKind.Markup, " ", markup: false).Accepts(AcceptedCharacters.WhiteSpace),
Factory.Span(SpanKind.Markup, value, markup: false)
.Accepts(AcceptedCharacters.NonWhiteSpace)
.With(chunkGenerator)));
}
internal virtual void ParseCodeBlockTest(
string document,
IEnumerable<DirectiveDescriptor> descriptors,