Update tests to reflect new length provided `RazorError`s.

- Added new tests to validate `TagHelperDescriptorResolver` properly calculates assembly location.

#386
This commit is contained in:
N. Taylor Mullen 2015-09-01 22:00:07 -07:00
parent ad5bfc5b66
commit f843aec538
25 changed files with 818 additions and 401 deletions

View File

@ -1221,7 +1221,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
Assert.Equal(expectedErrorMessages.Length, errors.Length); Assert.Equal(expectedErrorMessages.Length, errors.Length);
for (var i = 0; i < expectedErrorMessages.Length; i++) for (var i = 0; i < expectedErrorMessages.Length; i++)
{ {
Assert.Equal(1, errors[i].Length); Assert.Equal(0, errors[i].Length);
Assert.Equal(SourceLocation.Zero, errors[i].Location); Assert.Equal(SourceLocation.Zero, errors[i].Location);
Assert.Equal(expectedErrorMessages[i], errors[i].Message, StringComparer.Ordinal); Assert.Equal(expectedErrorMessages[i], errors[i].Message, StringComparer.Ordinal);
} }
@ -1377,7 +1377,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
for (var i = 0; i < actualErrors.Length; i++) for (var i = 0; i < actualErrors.Length; i++)
{ {
var actualError = actualErrors[i]; var actualError = actualErrors[i];
Assert.Equal(1, actualError.Length); Assert.Equal(0, actualError.Length);
Assert.Equal(SourceLocation.Zero, actualError.Location); Assert.Equal(SourceLocation.Zero, actualError.Location);
Assert.Equal(expectedErrors[i], actualError.Message, StringComparer.Ordinal); Assert.Equal(expectedErrors[i], actualError.Message, StringComparer.Ordinal);
} }
@ -1607,7 +1607,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
for (var i = 0; i < errors.Length; i++) for (var i = 0; i < errors.Length; i++)
{ {
Assert.Equal(1, errors[i].Length); Assert.Equal(0, errors[i].Length);
Assert.Equal(SourceLocation.Zero, errors[i].Location); Assert.Equal(SourceLocation.Zero, errors[i].Location);
Assert.Equal(expectedErrorMessages[i], errors[i].Message, StringComparer.Ordinal); Assert.Equal(expectedErrorMessages[i], errors[i].Message, StringComparer.Ordinal);
} }
@ -1749,7 +1749,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
Assert.Equal(expectedErrorMessages.Length, errors.Length); Assert.Equal(expectedErrorMessages.Length, errors.Length);
for (var i = 0; i < expectedErrorMessages.Length; i++) for (var i = 0; i < expectedErrorMessages.Length; i++)
{ {
Assert.Equal(1, errors[i].Length); Assert.Equal(0, errors[i].Length);
Assert.Equal(SourceLocation.Zero, errors[i].Location); Assert.Equal(SourceLocation.Zero, errors[i].Location);
Assert.Equal(expectedErrorMessages[i], errors[i].Message, StringComparer.Ordinal); Assert.Equal(expectedErrorMessages[i], errors[i].Message, StringComparer.Ordinal);
} }
@ -1804,7 +1804,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
Assert.Equal(expectedErrorMessages.Length, errors.Length); Assert.Equal(expectedErrorMessages.Length, errors.Length);
for (var i = 0; i < expectedErrorMessages.Length; i++) for (var i = 0; i < expectedErrorMessages.Length; i++)
{ {
Assert.Equal(1, errors[i].Length); Assert.Equal(0, errors[i].Length);
Assert.Equal(SourceLocation.Zero, errors[i].Location); Assert.Equal(SourceLocation.Zero, errors[i].Location);
Assert.Equal(expectedErrorMessages[i], errors[i].Message, StringComparer.Ordinal); Assert.Equal(expectedErrorMessages[i], errors[i].Message, StringComparer.Ordinal);
} }
@ -1837,7 +1837,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
{ {
// Arrange // Arrange
var errorSink = new ErrorSink(); var errorSink = new ErrorSink();
var expectedErrors = expectedErrorMessages.Select(message => new RazorError(message, SourceLocation.Zero)); var expectedErrors = expectedErrorMessages.Select(
message => new RazorError(message, SourceLocation.Zero, 0));
// Act // Act
TagHelperDescriptorFactory.GetValidAllowedChildren(new[] { name }, "SomeTagHelper", errorSink); TagHelperDescriptorFactory.GetValidAllowedChildren(new[] { name }, "SomeTagHelper", errorSink);

View File

@ -47,6 +47,39 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
} }
} }
[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 Resolve_CalculatesAssemblyLocationInLookupText(string lookupText, int assemblyLocation)
{
// Arrange
var errorSink = new ErrorSink();
var tagHelperDescriptorResolver = new InspectableTagHelperDescriptorResolver();
var directiveType = TagHelperDirectiveType.AddTagHelper;
var resolutionContext = new TagHelperDescriptorResolutionContext(
new[]
{
new TagHelperDirectiveDescriptor
{
DirectiveText = lookupText,
Location = SourceLocation.Zero,
DirectiveType = directiveType
}
},
errorSink);
var expectedSourceLocation = new SourceLocation(assemblyLocation, 0, assemblyLocation);
// Act
tagHelperDescriptorResolver.Resolve(resolutionContext);
// Assert
Assert.Empty(errorSink.Errors);
Assert.Equal(expectedSourceLocation, tagHelperDescriptorResolver.DocumentLocation);
}
public static TheoryData ResolveDirectiveDescriptorsInvalidTagHelperPrefixData public static TheoryData ResolveDirectiveDescriptorsInvalidTagHelperPrefixData
{ {
@ -94,7 +127,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(multipleDirectiveError, SyntaxConstants.CSharp.TagHelperPrefixKeyword), string.Format(multipleDirectiveError, SyntaxConstants.CSharp.TagHelperPrefixKeyword),
directiveLocation2) directiveLocation2,
length: 9)
} }
}, },
{ {
@ -125,7 +159,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(multipleDirectiveError, SyntaxConstants.CSharp.TagHelperPrefixKeyword), string.Format(multipleDirectiveError, SyntaxConstants.CSharp.TagHelperPrefixKeyword),
directiveLocation2) directiveLocation2,
length: 9)
} }
}, },
{ {
@ -162,7 +197,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(multipleDirectiveError, SyntaxConstants.CSharp.TagHelperPrefixKeyword), string.Format(multipleDirectiveError, SyntaxConstants.CSharp.TagHelperPrefixKeyword),
directiveLocation2) directiveLocation2,
length: 9)
} }
}, },
{ {
@ -185,7 +221,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
SyntaxConstants.CSharp.TagHelperPrefixKeyword, SyntaxConstants.CSharp.TagHelperPrefixKeyword,
' ', ' ',
"th "), "th "),
directiveLocation1) directiveLocation1,
length: 3)
} }
}, },
{ {
@ -208,7 +245,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
SyntaxConstants.CSharp.TagHelperPrefixKeyword, SyntaxConstants.CSharp.TagHelperPrefixKeyword,
'\t', '\t',
"th\t"), "th\t"),
directiveLocation1) directiveLocation1,
length: 3)
} }
}, },
{ {
@ -231,7 +269,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
SyntaxConstants.CSharp.TagHelperPrefixKeyword, SyntaxConstants.CSharp.TagHelperPrefixKeyword,
Environment.NewLine[0], Environment.NewLine[0],
"th" + Environment.NewLine), "th" + Environment.NewLine),
directiveLocation1) directiveLocation1,
length: 2 + Environment.NewLine.Length)
} }
}, },
{ {
@ -254,7 +293,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
SyntaxConstants.CSharp.TagHelperPrefixKeyword, SyntaxConstants.CSharp.TagHelperPrefixKeyword,
' ', ' ',
" th "), " th "),
directiveLocation1) directiveLocation1,
length: 4)
} }
}, },
{ {
@ -277,7 +317,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
SyntaxConstants.CSharp.TagHelperPrefixKeyword, SyntaxConstants.CSharp.TagHelperPrefixKeyword,
'@', '@',
"@"), "@"),
directiveLocation1) directiveLocation1,
length: 1)
} }
}, },
{ {
@ -300,7 +341,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
SyntaxConstants.CSharp.TagHelperPrefixKeyword, SyntaxConstants.CSharp.TagHelperPrefixKeyword,
'@', '@',
"t@h"), "t@h"),
directiveLocation1) directiveLocation1,
length: 3)
} }
}, },
{ {
@ -323,7 +365,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
SyntaxConstants.CSharp.TagHelperPrefixKeyword, SyntaxConstants.CSharp.TagHelperPrefixKeyword,
'!', '!',
"!"), "!"),
directiveLocation1) directiveLocation1,
length: 1)
} }
}, },
{ {
@ -346,7 +389,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
SyntaxConstants.CSharp.TagHelperPrefixKeyword, SyntaxConstants.CSharp.TagHelperPrefixKeyword,
'!', '!',
"!th"), "!th"),
directiveLocation1) directiveLocation1,
length: 3)
} }
}, },
}; };
@ -1336,20 +1380,20 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
} }
[Theory] [Theory]
[InlineData("")] [InlineData("", 1)]
[InlineData(null)] [InlineData(null, 1)]
[InlineData("*,")] [InlineData("*,", 2)]
[InlineData("?,")] [InlineData("?,", 2)]
[InlineData(",")] [InlineData(",", 1)]
[InlineData(",,,")] [InlineData(",,,", 3)]
[InlineData("First, ")] [InlineData("First, ", 7)]
[InlineData("First , ")] [InlineData("First , ", 8)]
[InlineData(" ,Second")] [InlineData(" ,Second", 8)]
[InlineData(" , Second")] [InlineData(" , Second", 9)]
[InlineData("SomeType,")] [InlineData("SomeType,", 9)]
[InlineData("SomeAssembly")] [InlineData("SomeAssembly", 12)]
[InlineData("First,Second,Third")] [InlineData("First,Second,Third", 18)]
public void DescriptorResolver_CreatesErrorIfInvalidLookupText_DoesNotThrow(string lookupText) public void DescriptorResolver_CreatesErrorIfInvalidLookupText_DoesNotThrow(string lookupText, int errorLength)
{ {
// Arrange // Arrange
var errorSink = new ErrorSink(); var errorSink = new ErrorSink();
@ -1379,7 +1423,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
// Assert // Assert
var error = Assert.Single(errorSink.Errors); var error = Assert.Single(errorSink.Errors);
Assert.Equal(1, error.Length); Assert.Equal(errorLength, error.Length);
Assert.Equal(documentLocation, error.Location); Assert.Equal(documentLocation, error.Location);
Assert.Equal(expectedErrorMessage, error.Message); Assert.Equal(expectedErrorMessage, error.Message);
} }
@ -1414,7 +1458,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
// Assert // Assert
var error = Assert.Single(errorSink.Errors); var error = Assert.Single(errorSink.Errors);
Assert.Equal(1, error.Length); Assert.Equal(21, error.Length);
Assert.Equal(documentLocation, error.Location); Assert.Equal(documentLocation, error.Location);
Assert.Equal(expectedErrorMessage, error.Message); Assert.Equal(expectedErrorMessage, error.Message);
} }
@ -1475,6 +1519,26 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
}; };
} }
public class InspectableTagHelperDescriptorResolver : TagHelperDescriptorResolver
{
public InspectableTagHelperDescriptorResolver()
: base(designTime: false)
{
}
public SourceLocation DocumentLocation { get; private set; }
protected override IEnumerable<TagHelperDescriptor> ResolveDescriptorsInAssembly(
string assemblyName,
SourceLocation documentLocation,
ErrorSink errorSink)
{
DocumentLocation = documentLocation;
return Enumerable.Empty<TagHelperDescriptor>();
}
}
private class TestTagHelperDescriptorResolver : TagHelperDescriptorResolver private class TestTagHelperDescriptorResolver : TagHelperDescriptorResolver
{ {
public TestTagHelperDescriptorResolver(TagHelperTypeResolver typeResolver) public TestTagHelperDescriptorResolver(TagHelperTypeResolver typeResolver)

View File

@ -45,7 +45,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
// Assert // Assert
var error = Assert.Single(errorSink.Errors); var error = Assert.Single(errorSink.Errors);
Assert.Equal(1, error.Length); Assert.Equal(4, error.Length);
Assert.Equal(documentLocation, error.Location); Assert.Equal(documentLocation, error.Location);
// The framework throws the underlying Exception. Only confirm Message mentions expected assembly. // The framework throws the underlying Exception. Only confirm Message mentions expected assembly.

View File

@ -16,20 +16,23 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
[Fact] [Fact]
public void FunctionsDirectiveAutoCompleteAtEOF() public void FunctionsDirectiveAutoCompleteAtEOF()
{ {
ParseBlockTest("@functions{", ParseBlockTest(
new FunctionsBlock( "@functions{",
Factory.CodeTransition("@") new FunctionsBlock(
.Accepts(AcceptedCharacters.None), Factory.CodeTransition("@")
Factory.MetaCode("functions{") .Accepts(AcceptedCharacters.None),
.Accepts(AcceptedCharacters.None), Factory.MetaCode("functions{")
Factory.EmptyCSharp() .Accepts(AcceptedCharacters.None),
.AsFunctionsBody() Factory.EmptyCSharp()
.With(new AutoCompleteEditHandler(CSharpLanguageCharacteristics.Instance.TokenizeString) .AsFunctionsBody()
{ .With(new AutoCompleteEditHandler(CSharpLanguageCharacteristics.Instance.TokenizeString)
AutoCompleteString = "}" {
})), AutoCompleteString = "}"
new RazorError(RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("functions", "}", "{"), })),
10, 0, 10)); new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("functions", "}", "{"),
new SourceLocation(10, 0, 10),
length: 1));
} }
[Fact] [Fact]
@ -44,7 +47,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
new MarkupBlock()), new MarkupBlock()),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_X("}"), RazorResources.FormatParseError_Expected_X("}"),
17, 0, 17)); new SourceLocation(17, 0, 17),
length: 1));
} }
[Fact] [Fact]
@ -58,8 +62,11 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
.AsStatement() .AsStatement()
.With(new AutoCompleteEditHandler(CSharpLanguageCharacteristics.Instance.TokenizeString) { AutoCompleteString = "}" }) .With(new AutoCompleteEditHandler(CSharpLanguageCharacteristics.Instance.TokenizeString) { AutoCompleteString = "}" })
), ),
new RazorError(RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_Code, "}", "{"), new RazorError(
1, 0, 1)); RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(
RazorResources.BlockName_Code, "}", "{"),
new SourceLocation(1, 0, 1),
length: 1));
} }
[Fact] [Fact]
@ -78,8 +85,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
{ {
AutoCompleteString = "}" AutoCompleteString = "}"
})), })),
new RazorError(RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("functions", "}", "{"), new RazorError(
10, 0, 10)); RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("functions", "}", "{"),
new SourceLocation(10, 0, 10),
length: 1));
} }
[Fact] [Fact]
@ -99,8 +108,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
Factory.Markup("Foo"), Factory.Markup("Foo"),
new MarkupTagBlock( new MarkupTagBlock(
Factory.Markup("</p>")))), Factory.Markup("</p>")))),
new RazorError(RazorResources.FormatParseError_Expected_X("}"), new RazorError(
27 + Environment.NewLine.Length, 1, 10)); RazorResources.FormatParseError_Expected_X("}"),
new SourceLocation(27 + Environment.NewLine.Length, 1, 10),
length: 1));
} }
[Fact] [Fact]
@ -122,8 +133,11 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
Factory.Span(SpanKind.Code, new CSharpSymbol(Factory.LocationTracker.CurrentLocation, string.Empty, CSharpSymbolType.Unknown)) Factory.Span(SpanKind.Code, new CSharpSymbol(Factory.LocationTracker.CurrentLocation, string.Empty, CSharpSymbolType.Unknown))
.With(new StatementChunkGenerator()) .With(new StatementChunkGenerator())
), ),
new RazorError(RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_Code, "}", "{"), new RazorError(
1, 0, 1)); RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(
RazorResources.BlockName_Code, "}", "{"),
new SourceLocation(1, 0, 1),
length: 1));
} }
} }
} }

View File

@ -124,11 +124,13 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
[Fact] [Fact]
public void ParseBlockTerminatesParenBalancingAtEOF() public void ParseBlockTerminatesParenBalancingAtEOF()
{ {
ImplicitExpressionTest("Html.En(code()", "Html.En(code()", ImplicitExpressionTest(
AcceptedCharacters.Any, "Html.En(code()", "Html.En(code()",
new RazorError( AcceptedCharacters.Any,
RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"), new RazorError(
new SourceLocation(8, 0, 8))); RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"),
new SourceLocation(8, 0, 8),
length: 1));
} }
[Fact] [Fact]
@ -468,7 +470,8 @@ while(true);", BlockType.Statement, SpanKind.Code, acceptedCharacters: AcceptedC
SpanKind.Code, SpanKind.Code,
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("foreach", '}', '{'), RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("foreach", '}', '{'),
SourceLocation.Zero)); SourceLocation.Zero,
length: 1));
} }
[Fact] [Fact]
@ -480,18 +483,29 @@ while(true);", BlockType.Statement, SpanKind.Code, acceptedCharacters: AcceptedC
document, document,
BlockType.Statement, BlockType.Statement,
SpanKind.Code, SpanKind.Code,
new RazorError(RazorResources.ParseError_BlockComment_Not_Terminated, 24, 0, 24), new RazorError(
RazorResources.ParseError_BlockComment_Not_Terminated,
new SourceLocation(24, 0, 24),
length: 1),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("foreach", '}', '{'), RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("foreach", '}', '{'),
SourceLocation.Zero)); SourceLocation.Zero,
length: 1));
} }
[Fact] [Fact]
public void ParseBlockTerminatesSingleSlashAtEndOfFile() public void ParseBlockTerminatesSingleSlashAtEndOfFile()
{ {
const string document = "foreach(var f in Foo) { / foo bar baz"; const string document = "foreach(var f in Foo) { / foo bar baz";
SingleSpanBlockTest(document, document, BlockType.Statement, SpanKind.Code, SingleSpanBlockTest(
new RazorError(RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("foreach", '}', '{'), SourceLocation.Zero)); document,
document,
BlockType.Statement,
SpanKind.Code,
new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("foreach", '}', '{'),
SourceLocation.Zero,
length: 1));
} }
[Fact] [Fact]
@ -1102,8 +1116,14 @@ catch(bar) { baz(); }", BlockType.Statement, SpanKind.Code);
Factory.EmptyHtml())); Factory.EmptyHtml()));
var expectedErrors = new RazorError[] var expectedErrors = new RazorError[]
{ {
new RazorError(@"End of file or an unexpected character was reached before the ""span"" tag could be parsed. Elements inside markup blocks must be complete. They must either be self-closing (""<br />"") or have matching end tags (""<p>Hello</p>""). If you intended to display a ""<"" character, use the ""&lt;"" HTML entity.", new SourceLocation(1, 0, 1)), new RazorError(
new RazorError(@"The code block is missing a closing ""}"" character. Make sure you have a matching ""}"" character for all the ""{"" characters within this block, and that none of the ""}"" characters are being interpreted as markup.", new SourceLocation(0, 0, 0)), @"End of file or an unexpected character was reached before the ""span"" tag could be parsed. Elements inside markup blocks must be complete. They must either be self-closing (""<br />"") or have matching end tags (""<p>Hello</p>""). If you intended to display a ""<"" character, use the ""&lt;"" HTML entity.",
new SourceLocation(2, 0, 2),
length: 4),
new RazorError(
@"The code block is missing a closing ""}"" character. Make sure you have a matching ""}"" character for all the ""{"" characters within this block, and that none of the ""}"" characters are being interpreted as markup.",
SourceLocation.Zero,
length: 1),
}; };
// Act & Assert // Act & Assert
@ -1139,8 +1159,14 @@ catch(bar) { baz(); }", BlockType.Statement, SpanKind.Code);
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)); Factory.MetaCode("}").Accepts(AcceptedCharacters.None));
var expectedErrors = new RazorError[] var expectedErrors = new RazorError[]
{ {
new RazorError(@"A space or line break was encountered after the ""@"" character. Only valid identifiers, keywords, comments, ""("" and ""{"" are valid at the start of a code block and they must occur immediately following ""@"" with no space in between.", new SourceLocation(13, 0, 13)), new RazorError(
new RazorError(@"""' />}"" is not valid at the start of a code block. Only identifiers, keywords, comments, ""("" and ""{"" are valid.", new SourceLocation(15, 0, 15)), @"A space or line break was encountered after the ""@"" character. Only valid identifiers, keywords, comments, ""("" and ""{"" are valid at the start of a code block and they must occur immediately following ""@"" with no space in between.",
new SourceLocation(13, 0, 13),
length: 1),
new RazorError(
@"""' />}"" is not valid at the start of a code block. Only identifiers, keywords, comments, ""("" and ""{"" are valid.",
new SourceLocation(15, 0, 15),
length: 5),
}; };
// Act & Assert // Act & Assert
@ -1187,7 +1213,7 @@ catch(bar) { baz(); }", BlockType.Statement, SpanKind.Code);
{ {
errors = new RazorError[] errors = new RazorError[]
{ {
new RazorError(errorMessage, location.Value) new RazorError(errorMessage, location.Value, length: 1)
}; };
} }
ParseBlockTest(content, ParseBlockTest(content,

View File

@ -68,7 +68,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
.AsTagHelperPrefixDirective("Foo")), .AsTagHelperPrefixDirective("Foo")),
new RazorError( new RazorError(
RazorResources.ParseError_Unterminated_String_Literal, RazorResources.ParseError_Unterminated_String_Literal,
absoluteIndex: 17, lineIndex: 0, columnIndex: 17), absoluteIndex: 17, lineIndex: 0, columnIndex: 17, length: 1),
new RazorError( new RazorError(
RazorResources.FormatParseError_DirectiveMustBeSurroundedByQuotes( RazorResources.FormatParseError_DirectiveMustBeSurroundedByQuotes(
SyntaxConstants.CSharp.TagHelperPrefixKeyword), SyntaxConstants.CSharp.TagHelperPrefixKeyword),
@ -89,7 +89,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
.Accepts(AcceptedCharacters.AnyExceptNewline)), .Accepts(AcceptedCharacters.AnyExceptNewline)),
new RazorError( new RazorError(
RazorResources.ParseError_Unterminated_String_Literal, RazorResources.ParseError_Unterminated_String_Literal,
absoluteIndex: 20, lineIndex: 0, columnIndex: 20), absoluteIndex: 20, lineIndex: 0, columnIndex: 20, length: 1),
new RazorError( new RazorError(
RazorResources.FormatParseError_DirectiveMustBeSurroundedByQuotes( RazorResources.FormatParseError_DirectiveMustBeSurroundedByQuotes(
SyntaxConstants.CSharp.TagHelperPrefixKeyword), SyntaxConstants.CSharp.TagHelperPrefixKeyword),
@ -168,7 +168,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
.AsRemoveTagHelper("Foo")), .AsRemoveTagHelper("Foo")),
new RazorError( new RazorError(
RazorResources.ParseError_Unterminated_String_Literal, RazorResources.ParseError_Unterminated_String_Literal,
absoluteIndex: 17, lineIndex: 0, columnIndex: 17), absoluteIndex: 17, lineIndex: 0, columnIndex: 17, length: 1),
new RazorError( new RazorError(
RazorResources.FormatParseError_DirectiveMustBeSurroundedByQuotes( RazorResources.FormatParseError_DirectiveMustBeSurroundedByQuotes(
SyntaxConstants.CSharp.RemoveTagHelperKeyword), SyntaxConstants.CSharp.RemoveTagHelperKeyword),
@ -188,7 +188,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
.Accepts(AcceptedCharacters.AnyExceptNewline)), .Accepts(AcceptedCharacters.AnyExceptNewline)),
new RazorError( new RazorError(
RazorResources.ParseError_Unterminated_String_Literal, RazorResources.ParseError_Unterminated_String_Literal,
absoluteIndex: 20, lineIndex: 0, columnIndex: 20), absoluteIndex: 20, lineIndex: 0, columnIndex: 20, length: 1),
new RazorError( new RazorError(
RazorResources.FormatParseError_DirectiveMustBeSurroundedByQuotes( RazorResources.FormatParseError_DirectiveMustBeSurroundedByQuotes(
SyntaxConstants.CSharp.RemoveTagHelperKeyword), SyntaxConstants.CSharp.RemoveTagHelperKeyword),
@ -264,7 +264,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
.AsAddTagHelper("Foo")), .AsAddTagHelper("Foo")),
new RazorError( new RazorError(
RazorResources.ParseError_Unterminated_String_Literal, RazorResources.ParseError_Unterminated_String_Literal,
absoluteIndex: 14, lineIndex: 0, columnIndex: 14), absoluteIndex: 14, lineIndex: 0, columnIndex: 14, length: 1),
new RazorError( new RazorError(
RazorResources.FormatParseError_DirectiveMustBeSurroundedByQuotes( RazorResources.FormatParseError_DirectiveMustBeSurroundedByQuotes(
SyntaxConstants.CSharp.AddTagHelperKeyword), SyntaxConstants.CSharp.AddTagHelperKeyword),
@ -284,7 +284,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
.Accepts(AcceptedCharacters.AnyExceptNewline)), .Accepts(AcceptedCharacters.AnyExceptNewline)),
new RazorError( new RazorError(
RazorResources.ParseError_Unterminated_String_Literal, RazorResources.ParseError_Unterminated_String_Literal,
absoluteIndex: 17, lineIndex: 0, columnIndex: 17), absoluteIndex: 17, lineIndex: 0, columnIndex: 17, length: 1),
new RazorError( new RazorError(
RazorResources.FormatParseError_DirectiveMustBeSurroundedByQuotes( RazorResources.FormatParseError_DirectiveMustBeSurroundedByQuotes(
SyntaxConstants.CSharp.AddTagHelperKeyword), SyntaxConstants.CSharp.AddTagHelperKeyword),

View File

@ -23,7 +23,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.FormatParseError_Unexpected_Character_At_Start_Of_CodeBlock_CS('"'), RazorResources.FormatParseError_Unexpected_Character_At_Start_Of_CodeBlock_CS('"'),
1, 0, 1)); new SourceLocation(1, 0, 1),
length: 1));
} }
[Fact] [Fact]
@ -48,7 +49,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_Code, "}", "{"), RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_Code, "}", "{"),
SourceLocation.Zero)); SourceLocation.Zero,
length: 1));
} }
[Fact] [Fact]
@ -73,7 +75,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
Factory.EmptyCSharp() Factory.EmptyCSharp()
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords) .AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharacters.NonWhiteSpace)), .Accepts(AcceptedCharacters.NonWhiteSpace)),
new RazorError(RazorResources.ParseError_Unexpected_WhiteSpace_At_Start_Of_CodeBlock_CS, new SourceLocation(1, 0, 1))); new RazorError(
RazorResources.ParseError_Unexpected_WhiteSpace_At_Start_Of_CodeBlock_CS,
new SourceLocation(1, 0, 1),
Environment.NewLine.Length));
} }
[Fact] [Fact]
@ -95,7 +100,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
Factory.Code(" {}" + Environment.NewLine).AsStatement(), Factory.Code(" {}" + Environment.NewLine).AsStatement(),
Factory.MetaCode("}").Accepts(AcceptedCharacters.None) Factory.MetaCode("}").Accepts(AcceptedCharacters.None)
), ),
new RazorError(RazorResources.ParseError_Unexpected_WhiteSpace_At_Start_Of_CodeBlock_CS, 6 + Environment.NewLine.Length, 1, 5)); new RazorError(
RazorResources.ParseError_Unexpected_WhiteSpace_At_Start_Of_CodeBlock_CS,
new SourceLocation(6 + Environment.NewLine.Length, 1, 5),
length: 3));
} }
[Fact] [Fact]
@ -116,10 +124,12 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
Factory.EmptyCSharp().AsStatement() Factory.EmptyCSharp().AsStatement()
), ),
new RazorError( new RazorError(
RazorResources.ParseError_Unexpected_EndOfFile_At_Start_Of_CodeBlock, 6 + Environment.NewLine.Length, 1, 5), RazorResources.ParseError_Unexpected_EndOfFile_At_Start_Of_CodeBlock,
6 + Environment.NewLine.Length, 1, 5, length: 1),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_Code, "}", "{"), RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_Code, "}", "{"),
SourceLocation.Zero)); SourceLocation.Zero,
length: 1));
} }
[Fact] [Fact]
@ -133,7 +143,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
.Accepts(AcceptedCharacters.NonWhiteSpace)), .Accepts(AcceptedCharacters.NonWhiteSpace)),
new RazorError( new RazorError(
RazorResources.FormatParseError_Unexpected_Character_At_Start_Of_CodeBlock_CS("!"), RazorResources.FormatParseError_Unexpected_Character_At_Start_Of_CodeBlock_CS("!"),
1, 0, 1)); new SourceLocation(1, 0, 1),
length: 1));
} }
[Fact] [Fact]
@ -147,7 +158,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_ExplicitExpression, ')', '('), RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_ExplicitExpression, ')', '('),
new SourceLocation(0, 0, 0))); SourceLocation.Zero,
length: 1));
} }
[Fact] [Fact]
@ -163,7 +175,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_ExplicitExpression, ')', '('), RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_ExplicitExpression, ')', '('),
new SourceLocation(0, 0, 0))); SourceLocation.Zero,
length: 1));
} }
[Fact] [Fact]
@ -177,7 +190,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"), RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"),
new SourceLocation(4, 0, 4))); new SourceLocation(4, 0, 4),
length: 1));
} }
[Fact] [Fact]
@ -185,14 +199,16 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
public void ParseBlockShouldReportErrorAndTerminateAtEOFIfParenInImplicitExpressionUnclosed() public void ParseBlockShouldReportErrorAndTerminateAtEOFIfParenInImplicitExpressionUnclosed()
{ {
ParseBlockTest("Foo(Bar(Baz)" + Environment.NewLine ParseBlockTest("Foo(Bar(Baz)" + Environment.NewLine
+ "Biz" + Environment.NewLine + "Biz" + Environment.NewLine
+ "Boz", + "Boz",
new ExpressionBlock( new ExpressionBlock(
Factory.Code($"Foo(Bar(Baz){Environment.NewLine}Biz{Environment.NewLine}Boz") Factory.Code($"Foo(Bar(Baz){Environment.NewLine}Biz{Environment.NewLine}Boz")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords) .AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
), ),
new RazorError(RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"), new RazorError(
new SourceLocation(3, 0, 3))); RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"),
new SourceLocation(3, 0, 3),
length: 1));
} }
[Fact] [Fact]
@ -200,16 +216,18 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
public void ParseBlockShouldReportErrorAndTerminateAtMarkupIfParenInImplicitExpressionUnclosed() public void ParseBlockShouldReportErrorAndTerminateAtMarkupIfParenInImplicitExpressionUnclosed()
{ {
ParseBlockTest("Foo(Bar(Baz)" + Environment.NewLine ParseBlockTest("Foo(Bar(Baz)" + Environment.NewLine
+ "Biz" + Environment.NewLine + "Biz" + Environment.NewLine
+ "<html>" + Environment.NewLine + "<html>" + Environment.NewLine
+ "Boz" + Environment.NewLine + "Boz" + Environment.NewLine
+ "</html>", + "</html>",
new ExpressionBlock( new ExpressionBlock(
Factory.Code($"Foo(Bar(Baz){Environment.NewLine}Biz{Environment.NewLine}") Factory.Code($"Foo(Bar(Baz){Environment.NewLine}Biz{Environment.NewLine}")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords) .AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
), ),
new RazorError(RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"), new RazorError(
new SourceLocation(3, 0, 3))); RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"),
new SourceLocation(3, 0, 3),
length: 1));
} }
[Fact] [Fact]
@ -225,7 +243,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("[", "]"), RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("[", "]"),
new SourceLocation(3, 0, 3))); new SourceLocation(3, 0, 3),
length: 1));
} }
[Fact] [Fact]
@ -243,7 +262,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("[", "]"), RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("[", "]"),
new SourceLocation(3, 0, 3))); new SourceLocation(3, 0, 3),
length: 1));
} }
// Simple EOF handling errors: // Simple EOF handling errors:
@ -257,8 +277,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
.AsStatement() .AsStatement()
.AutoCompleteWith("}")), .AutoCompleteWith("}")),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_Code, '}', '{'), RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(
SourceLocation.Zero)); RazorResources.BlockName_Code, '}', '{'),
SourceLocation.Zero,
length: 1));
} }
[Fact] [Fact]
@ -272,7 +294,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
.AutoCompleteWith("}")), .AutoCompleteWith("}")),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("functions", '}', '{'), RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("functions", '}', '{'),
new SourceLocation(10, 0, 10))); new SourceLocation(10, 0, 10),
length: 1));
} }
[Fact] [Fact]
@ -290,7 +313,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("else", '}', '{'), RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("else", '}', '{'),
new SourceLocation(19, 0, 19))); new SourceLocation(19, 0, 19),
length: 1));
} }
[Fact] [Fact]
@ -302,7 +326,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("else if", '}', '{'), RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("else if", '}', '{'),
new SourceLocation(19, 0, 19))); new SourceLocation(19, 0, 19),
length: 1));
} }
[Fact] [Fact]
@ -314,7 +339,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("do", '}', '{'), RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("do", '}', '{'),
SourceLocation.Zero)); SourceLocation.Zero,
length: 1));
} }
[Fact] [Fact]
@ -326,7 +352,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("try", '}', '{'), RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("try", '}', '{'),
SourceLocation.Zero)); SourceLocation.Zero,
length: 1));
} }
[Fact] [Fact]
@ -338,7 +365,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("catch", '}', '{'), RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("catch", '}', '{'),
new SourceLocation(15, 0, 15))); new SourceLocation(15, 0, 15),
length: 1));
} }
[Fact] [Fact]
@ -350,7 +378,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("finally", '}', '{'), RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("finally", '}', '{'),
new SourceLocation(15, 0, 15))); new SourceLocation(15, 0, 15),
length: 1));
} }
[Fact] [Fact]
@ -414,9 +443,9 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
BlockFactory.MarkupTagBlock("</p>", AcceptedCharacters.None)), BlockFactory.MarkupTagBlock("</p>", AcceptedCharacters.None)),
Factory.EmptyCSharp().AsStatement() Factory.EmptyCSharp().AsStatement()
), ),
new RazorError(expectedMessage, 8, 0, 8), new RazorError(expectedMessage, 8, 0, 8, 1),
new RazorError(expectedMessage, 32, 0, 32), new RazorError(expectedMessage, 32, 0, 32, 1),
new RazorError(expectedMessage, 48, 0, 48)); new RazorError(expectedMessage, 48, 0, 48, 1));
} }
[Fact] [Fact]
@ -428,7 +457,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.FormatParseError_SingleLine_ControlFlowStatements_Not_Allowed("{", ")"), RazorResources.FormatParseError_SingleLine_ControlFlowStatements_Not_Allowed("{", ")"),
new SourceLocation(7, 0, 7))); new SourceLocation(7, 0, 7),
length: 1));
} }
[Fact] [Fact]
@ -448,7 +478,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.ParseError_AtInCode_Must_Be_Followed_By_Colon_Paren_Or_Identifier_Start, RazorResources.ParseError_AtInCode_Must_Be_Followed_By_Colon_Paren_Or_Identifier_Start,
10, 0, 10)); new SourceLocation(10, 0, 10),
length: 1));
} }
[Fact] [Fact]
@ -461,7 +492,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"), RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"),
new SourceLocation(2, 0, 2))); new SourceLocation(2, 0, 2),
length: 1));
} }
[Fact] [Fact]
@ -474,7 +506,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"), RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"),
new SourceLocation(7, 0, 7))); new SourceLocation(7, 0, 7),
length: 1));
} }
[Fact] [Fact]
@ -487,7 +520,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"), RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"),
new SourceLocation(12, 0, 12))); new SourceLocation(12, 0, 12),
length: 1));
} }
[Fact] [Fact]
@ -500,7 +534,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"), RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"),
new SourceLocation(5, 0, 5))); new SourceLocation(5, 0, 5),
length: 1));
} }
[Fact] [Fact]
@ -520,7 +555,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"), RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"),
new SourceLocation(2, 0, 2))); new SourceLocation(2, 0, 2),
length: 1));
} }
[Fact] [Fact]
@ -532,15 +568,23 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
+ "}", + "}",
BlockType.Statement, SpanKind.Code, BlockType.Statement, SpanKind.Code,
new RazorError( new RazorError(
RazorResources.ParseError_Unterminated_String_Literal, 21 + Environment.NewLine.Length, 1, 12)); RazorResources.ParseError_Unterminated_String_Literal,
new SourceLocation(21 + Environment.NewLine.Length, 1, 12),
length: 1));
} }
[Fact] [Fact]
public void ParseBlockTerminatesNormalStringAtEndOfFile() public void ParseBlockTerminatesNormalStringAtEndOfFile()
{ {
SingleSpanBlockTest("if(foo) { var foo = \"blah blah blah blah blah", BlockType.Statement, SpanKind.Code, SingleSpanBlockTest("if(foo) { var foo = \"blah blah blah blah blah", BlockType.Statement, SpanKind.Code,
new RazorError(RazorResources.ParseError_Unterminated_String_Literal, 20, 0, 20), new RazorError(
new RazorError(RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("if", '}', '{'), SourceLocation.Zero)); RazorResources.ParseError_Unterminated_String_Literal,
new SourceLocation(20, 0, 20),
length: 1),
new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("if", '}', '{'),
SourceLocation.Zero,
length: 1));
} }
[Fact] [Fact]
@ -552,8 +596,14 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
+ "blah " + Environment.NewLine + "blah " + Environment.NewLine
+ "blah", + "blah",
BlockType.Statement, SpanKind.Code, BlockType.Statement, SpanKind.Code,
new RazorError(RazorResources.ParseError_Unterminated_String_Literal, 20, 0, 20), new RazorError(
new RazorError(RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("if", '}', '{'), SourceLocation.Zero)); RazorResources.ParseError_Unterminated_String_Literal,
new SourceLocation(20, 0, 20),
length: 1),
new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("if", '}', '{'),
SourceLocation.Zero,
length: 1));
} }
[Fact] [Fact]
@ -579,7 +629,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.ParseError_Unterminated_String_Literal, RazorResources.ParseError_Unterminated_String_Literal,
23 + Environment.NewLine.Length, 1, 14)); new SourceLocation(23 + Environment.NewLine.Length, 1, 14),
length: 1));
} }
[Fact] [Fact]
@ -611,15 +662,22 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
{ {
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"), RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"),
14, 0, 14) new SourceLocation(14, 0, 14),
length: 1)
}); });
} }
private void RunUnterminatedSimpleKeywordBlock(string keyword) private void RunUnterminatedSimpleKeywordBlock(string keyword)
{ {
SingleSpanBlockTest(keyword + " (foo) { var foo = bar; if(foo != null) { bar(); } ", BlockType.Statement, SpanKind.Code, SingleSpanBlockTest(
new RazorError(RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(keyword, '}', '{'), SourceLocation.Zero)); keyword + " (foo) { var foo = bar; if(foo != null) { bar(); } ",
BlockType.Statement,
SpanKind.Code,
new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(keyword, '}', '{'),
SourceLocation.Zero,
length: 1));
} }
} }
} }

View File

@ -32,8 +32,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
Factory.EmptyCSharp().AsExpression() Factory.EmptyCSharp().AsExpression()
), ),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_ExplicitExpression, ")", "("), RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(
new SourceLocation(1, 0, 1))); RazorResources.BlockName_ExplicitExpression, ")", "("),
new SourceLocation(1, 0, 1),
length: 1));
} }
[Fact] [Fact]

View File

@ -26,12 +26,18 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
Func<int, RazorError[]> missingEndParenError = (index) => Func<int, RazorError[]> missingEndParenError = (index) =>
new RazorError[1] new RazorError[1]
{ {
new RazorError("An opening \"(\" is missing the corresponding closing \")\".", index, 0, index) new RazorError(
"An opening \"(\" is missing the corresponding closing \")\".",
new SourceLocation(index, 0, index),
length: 1)
}; };
Func<int, RazorError[]> missingEndBracketError = (index) => Func<int, RazorError[]> missingEndBracketError = (index) =>
new RazorError[1] new RazorError[1]
{ {
new RazorError("An opening \"[\" is missing the corresponding closing \"]\".", index, 0, index) new RazorError(
"An opening \"[\" is missing the corresponding closing \"]\".",
new SourceLocation(index, 0, index),
length: 1)
}; };
// implicitExpression, expectedImplicitExpression, acceptedCharacters, expectedErrors // implicitExpression, expectedImplicitExpression, acceptedCharacters, expectedErrors
@ -139,7 +145,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
.Accepts(AcceptedCharacters.NonWhiteSpace)), .Accepts(AcceptedCharacters.NonWhiteSpace)),
new RazorError( new RazorError(
RazorResources.FormatParseError_Unexpected_Character_At_Start_Of_CodeBlock_CS("/"), RazorResources.FormatParseError_Unexpected_Character_At_Start_Of_CodeBlock_CS("/"),
new SourceLocation(1, 0, 1))); new SourceLocation(1, 0, 1),
length: 1));
} }
[Fact] [Fact]
@ -153,7 +160,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
.Accepts(AcceptedCharacters.NonWhiteSpace)), .Accepts(AcceptedCharacters.NonWhiteSpace)),
new RazorError( new RazorError(
RazorResources.ParseError_Unexpected_EndOfFile_At_Start_Of_CodeBlock, RazorResources.ParseError_Unexpected_EndOfFile_At_Start_Of_CodeBlock,
new SourceLocation(1, 0, 1))); new SourceLocation(1, 0, 1),
length: 1));
} }
[Fact] [Fact]
@ -250,9 +258,13 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
[Fact] [Fact]
public void ParseBlockStopsBalancingParenthesesAtEOF() public void ParseBlockStopsBalancingParenthesesAtEOF()
{ {
ImplicitExpressionTest("foo(()", "foo(()", ImplicitExpressionTest(
acceptedCharacters: AcceptedCharacters.Any, "foo(()", "foo(()",
errors: new RazorError(RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"), new SourceLocation(4, 0, 4))); acceptedCharacters: AcceptedCharacters.Any,
errors: new RazorError(
RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"),
new SourceLocation(4, 0, 4),
length: 1));
} }
[Fact] [Fact]

View File

@ -29,7 +29,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
string.Empty, string.Empty,
HtmlSymbolType.Unknown)) HtmlSymbolType.Unknown))
.Accepts(AcceptedCharacters.Any))), .Accepts(AcceptedCharacters.Any))),
new RazorError(RazorResources.ParseError_RazorComment_Not_Terminated, 0, 0, 0)); new RazorError(
RazorResources.ParseError_RazorComment_Not_Terminated,
SourceLocation.Zero,
length: 2));
} }
[Fact] [Fact]
@ -84,7 +87,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords))), .AsImplicitExpression(CSharpCodeParser.DefaultKeywords))),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"), RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"),
4, 0, 4)); new SourceLocation(4, 0, 4),
length: 1));
} }
[Fact] [Fact]
@ -107,8 +111,14 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
string.Empty, string.Empty,
CSharpSymbolType.Unknown)) CSharpSymbolType.Unknown))
.Accepts(AcceptedCharacters.Any)))), .Accepts(AcceptedCharacters.Any)))),
new RazorError(RazorResources.ParseError_RazorComment_Not_Terminated, 5, 0, 5), new RazorError(
new RazorError(RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"), 4, 0, 4)); RazorResources.ParseError_RazorComment_Not_Terminated,
new SourceLocation(5, 0, 5),
length: 2),
new RazorError(
RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"),
new SourceLocation(4, 0, 4),
length: 1));
} }
[Fact] [Fact]
@ -147,9 +157,18 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
.Accepts(AcceptedCharacters.None)), .Accepts(AcceptedCharacters.None)),
Factory.Markup(Environment.NewLine).With(SpanChunkGenerator.Null), Factory.Markup(Environment.NewLine).With(SpanChunkGenerator.Null),
Factory.Markup("}")))), Factory.Markup("}")))),
new RazorError(RazorResources.ParseError_TextTagCannotContainAttributes, 6 + Environment.NewLine.Length, 1, 4), new RazorError(
new RazorError(RazorResources.FormatParseError_MissingEndTag("text"), 6 + Environment.NewLine.Length, 1, 4), RazorResources.ParseError_TextTagCannotContainAttributes,
new RazorError(RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_Code, "}", "{"), 1, 0, 1)); new SourceLocation(7 + Environment.NewLine.Length, 1, 5),
length: 4),
new RazorError(
RazorResources.FormatParseError_MissingEndTag("text"),
new SourceLocation(7 + Environment.NewLine.Length, 1, 5),
length: 4),
new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_Code, "}", "{"),
new SourceLocation(1, 0, 1),
length: 1));
} }
[Fact] [Fact]
@ -173,8 +192,15 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
string.Empty, string.Empty,
CSharpSymbolType.Unknown)) CSharpSymbolType.Unknown))
.Accepts(AcceptedCharacters.Any)))), .Accepts(AcceptedCharacters.Any)))),
new RazorError(RazorResources.ParseError_RazorComment_Not_Terminated, 2, 0, 2), new RazorError(
new RazorError(RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_Code, "}", "{"), 1, 0, 1)); RazorResources.ParseError_RazorComment_Not_Terminated,
new SourceLocation(2, 0, 2),
length: 2),
new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(
RazorResources.BlockName_Code, "}", "{"),
new SourceLocation(1, 0, 1),
length: 1));
} }
[Fact] [Fact]

View File

@ -19,7 +19,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
new DirectiveBlock( new DirectiveBlock(
Factory.MetaCode(word).Accepts(AcceptedCharacters.None) Factory.MetaCode(word).Accepts(AcceptedCharacters.None)
), ),
new RazorError(RazorResources.FormatParseError_ReservedWord(word), SourceLocation.Zero)); new RazorError(
RazorResources.FormatParseError_ReservedWord(word),
SourceLocation.Zero,
word.Length));
} }
[Theory] [Theory]

View File

@ -24,8 +24,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
Factory.CodeTransition(), Factory.CodeTransition(),
Factory.MetaCode("section" + Environment.NewLine))), Factory.MetaCode("section" + Environment.NewLine))),
new RazorError( new RazorError(
RazorResources.FormatParseError_Unexpected_Character_At_Section_Name_Start(RazorResources.ErrorComponent_EndOfFile), RazorResources.FormatParseError_Unexpected_Character_At_Section_Name_Start(
8 + Environment.NewLine.Length, 1, 0)); RazorResources.ErrorComponent_EndOfFile),
new SourceLocation(8 + Environment.NewLine.Length, 1, 0),
length: 1));
} }
[Fact] [Fact]
@ -39,7 +41,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
Factory.CodeTransition(), Factory.CodeTransition(),
Factory.MetaCode("section Foo " + Environment.NewLine)), Factory.MetaCode("section Foo " + Environment.NewLine)),
Factory.Markup(" ")), Factory.Markup(" ")),
new RazorError(RazorResources.ParseError_MissingOpenBraceAfterSection, 12, 0, 12)); new RazorError(
RazorResources.ParseError_MissingOpenBraceAfterSection,
new SourceLocation(12, 0, 12),
length: 1));
} }
[Fact] [Fact]
@ -54,8 +59,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
Factory.MetaCode("section " + Environment.NewLine)), Factory.MetaCode("section " + Environment.NewLine)),
Factory.Markup(" ")), Factory.Markup(" ")),
new RazorError( new RazorError(
RazorResources.FormatParseError_Unexpected_Character_At_Section_Name_Start(RazorResources.ErrorComponent_EndOfFile), RazorResources.FormatParseError_Unexpected_Character_At_Section_Name_Start(
21 + Environment.NewLine.Length, 1, 4)); RazorResources.ErrorComponent_EndOfFile),
new SourceLocation(21 + Environment.NewLine.Length, 1, 4),
length: 1));
} }
[Fact] [Fact]
@ -89,8 +96,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
Factory.Markup("</p>")), Factory.Markup("</p>")),
Factory.Markup(" }")), Factory.Markup(" }")),
new RazorError( new RazorError(
RazorResources.FormatParseError_Unexpected_Character_At_Section_Name_Start(RazorResources.FormatErrorComponent_Character("9")), RazorResources.FormatParseError_Unexpected_Character_At_Section_Name_Start(
9, 0, 9)); RazorResources.FormatErrorComponent_Character("9")),
new SourceLocation(9, 0, 9),
length: 1));
} }
[Fact] [Fact]
@ -109,7 +118,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
new MarkupTagBlock( new MarkupTagBlock(
Factory.Markup("</p>")), Factory.Markup("</p>")),
Factory.Markup(" }")), Factory.Markup(" }")),
new RazorError(RazorResources.ParseError_MissingOpenBraceAfterSection, 12, 0, 12)); new RazorError(
RazorResources.ParseError_MissingOpenBraceAfterSection,
new SourceLocation(12, 0, 12),
length: 1));
} }
[Fact] [Fact]
@ -159,7 +171,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
new MarkupBlock())), new MarkupBlock())),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_X("}"), RazorResources.FormatParseError_Expected_X("}"),
14, 0, 14)); new SourceLocation(14, 0, 14),
length: 1));
} }
[Fact] [Fact]
@ -182,7 +195,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
Factory.Markup("</p>"))))), Factory.Markup("</p>"))))),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_X("}"), RazorResources.FormatParseError_Expected_X("}"),
27, 0, 27)); new SourceLocation(27, 0, 27),
length: 1));
} }
[Fact] [Fact]
@ -194,7 +208,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
new SectionBlock(new SectionChunkGenerator("foo"), new SectionBlock(new SectionChunkGenerator("foo"),
Factory.CodeTransition(), Factory.CodeTransition(),
Factory.MetaCode("section foo " + Environment.NewLine))), Factory.MetaCode("section foo " + Environment.NewLine))),
new RazorError(RazorResources.ParseError_MissingOpenBraceAfterSection, 12, 0, 12)); new RazorError(
RazorResources.ParseError_MissingOpenBraceAfterSection,
new SourceLocation(12, 0, 12),
length: 1));
} }
[Fact] [Fact]

View File

@ -60,7 +60,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.ParseError_NamespaceImportAndTypeAlias_Cannot_Exist_Within_CodeBlock, RazorResources.ParseError_NamespaceImportAndTypeAlias_Cannot_Exist_Within_CodeBlock,
new SourceLocation(2, 0, 2))); new SourceLocation(2, 0, 2),
length: 5));
} }
[Fact] [Fact]
@ -76,7 +77,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.ParseError_NamespaceImportAndTypeAlias_Cannot_Exist_Within_CodeBlock, RazorResources.ParseError_NamespaceImportAndTypeAlias_Cannot_Exist_Within_CodeBlock,
new SourceLocation(2, 0, 2))); new SourceLocation(2, 0, 2),
length: 5));
} }
[Fact] [Fact]
@ -165,7 +167,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
), ),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("functions", "}", "{"), RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("functions", "}", "{"),
new SourceLocation(10, 0, 10))); new SourceLocation(10, 0, 10),
length: 1));
} }
[Fact] [Fact]
@ -189,7 +192,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
.Accepts(AcceptedCharacters.NonWhiteSpace)), .Accepts(AcceptedCharacters.NonWhiteSpace)),
new RazorError( new RazorError(
RazorResources.FormatParseError_Unexpected_Character_At_Start_Of_CodeBlock_CS("/"), RazorResources.FormatParseError_Unexpected_Character_At_Start_Of_CodeBlock_CS("/"),
1, 0, 1)); new SourceLocation(1, 0, 1),
length: 1));
} }
[Fact] [Fact]

View File

@ -265,7 +265,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
factory factory
.Code("try { someMethod(); } catch(Exception) when (") .Code("try { someMethod(); } catch(Exception) when (")
.AsStatement()), .AsStatement()),
new[] { new RazorError(unbalancedParenErrorString, 45, 0, 45) } new[] { new RazorError(unbalancedParenErrorString, 45, 0, 45, 1) }
}, },
{ {
"@try { someMethod(); } catch(Exception) when (someMethod(", "@try { someMethod(); } catch(Exception) when (someMethod(",
@ -274,7 +274,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
factory factory
.Code("try { someMethod(); } catch(Exception) when (someMethod(") .Code("try { someMethod(); } catch(Exception) when (someMethod(")
.AsStatement()), .AsStatement()),
new[] { new RazorError(unbalancedParenErrorString, 45, 0, 45) } new[] { new RazorError(unbalancedParenErrorString, 45, 0, 45, 1) }
}, },
{ {
"@try { someMethod(); } catch(Exception) when (true) {", "@try { someMethod(); } catch(Exception) when (true) {",
@ -283,7 +283,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
factory factory
.Code("try { someMethod(); } catch(Exception) when (true) {") .Code("try { someMethod(); } catch(Exception) when (true) {")
.AsStatement()), .AsStatement()),
new[] { new RazorError(unbalancedBracketCatchErrorString, 23, 0, 23) } new[] { new RazorError(unbalancedBracketCatchErrorString, 23, 0, 23, 1) }
}, },
}; };
} }

View File

@ -319,7 +319,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
private static RazorError GetNestedTemplateError(int characterIndex) private static RazorError GetNestedTemplateError(int characterIndex)
{ {
return new RazorError(RazorResources.ParseError_InlineMarkup_Blocks_Cannot_Be_Nested, new SourceLocation(characterIndex, 0, characterIndex)); return new RazorError(
RazorResources.ParseError_InlineMarkup_Blocks_Cannot_Be_Nested,
new SourceLocation(characterIndex, 0, characterIndex),
length: 1);
} }
} }
} }

View File

@ -118,7 +118,9 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
Factory.MetaCode("}").Accepts(AcceptedCharacters.None) Factory.MetaCode("}").Accepts(AcceptedCharacters.None)
), true, ), true,
new RazorError( new RazorError(
RazorResources.ParseError_AtInCode_Must_Be_Followed_By_Colon_Paren_Or_Identifier_Start, 5 + Environment.NewLine.Length, 1, 4)); RazorResources.ParseError_AtInCode_Must_Be_Followed_By_Colon_Paren_Or_Identifier_Start,
new SourceLocation(5 + Environment.NewLine.Length, 1, 4),
length: 1));
} }
[Fact] [Fact]

View File

@ -46,7 +46,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
designTimeParser: true, designTimeParser: true,
expectedErrors: new[] expectedErrors: new[]
{ {
new RazorError(RazorResources.FormatParseError_Unexpected_Character_At_Start_Of_CodeBlock_CS("}"), new SourceLocation(2, 0, 2)) new RazorError(
RazorResources.FormatParseError_Unexpected_Character_At_Start_Of_CodeBlock_CS("}"),
new SourceLocation(2, 0, 2),
length: 1)
}); });
} }
@ -68,7 +71,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
designTimeParser: true, designTimeParser: true,
expectedErrors: new[] expectedErrors: new[]
{ {
new RazorError(RazorResources.FormatParseError_Unexpected_Character_At_Start_Of_CodeBlock_CS("."), new SourceLocation(2, 0, 2)) new RazorError(
RazorResources.FormatParseError_Unexpected_Character_At_Start_Of_CodeBlock_CS("."),
new SourceLocation(2, 0, 2),
length: 1)
}); });
} }
@ -91,7 +97,9 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)), Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
/* designTimeParser */ true, /* designTimeParser */ true,
new RazorError( new RazorError(
RazorResources.ParseError_Unexpected_WhiteSpace_At_Start_Of_CodeBlock_CS, 6 + Environment.NewLine.Length, 1, 5)); RazorResources.ParseError_Unexpected_WhiteSpace_At_Start_Of_CodeBlock_CS,
new SourceLocation(6 + Environment.NewLine.Length, 1, 5),
Environment.NewLine.Length));
} }
[Fact] [Fact]

View File

@ -30,7 +30,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser
// Act/Assert // Act/Assert
listener.VisitStartBlock(new FunctionsBlock()); listener.VisitStartBlock(new FunctionsBlock());
listener.VisitError(new RazorError("Error", SourceLocation.Zero)); listener.VisitError(new RazorError("Error", SourceLocation.Zero, length: 1));
listener.VisitEndBlock(new FunctionsBlock()); listener.VisitEndBlock(new FunctionsBlock());
} }
@ -98,9 +98,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser
[Fact] [Fact]
public void ListenerCallsOnErrorCallbackUsingSynchronizationContextIfSpecified() public void ListenerCallsOnErrorCallbackUsingSynchronizationContextIfSpecified()
{ {
RunSyncContextTest(new RazorError("Bar", 42, 42, 42), RunSyncContextTest(
errorCallback => new CallbackVisitor(_ => { }, errorCallback, _ => { }, _ => { }), new RazorError("Bar", new SourceLocation(42, 42, 42), length: 3),
(listener, expected) => listener.VisitError(expected)); errorCallback => new CallbackVisitor(_ => { }, errorCallback, _ => { }, _ => { }),
(listener, expected) => listener.VisitError(expected));
} }
private static void RunSyncContextTest<T>(T expected, Func<Action<T>, CallbackVisitor> ctor, Action<CallbackVisitor, T> call) private static void RunSyncContextTest<T>(T expected, Func<Action<T>, CallbackVisitor> ctor, Action<CallbackVisitor, T> call)
@ -136,7 +137,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser
private static void RunOnErrorTest(Func<Action<RazorError>, CallbackVisitor> ctor, Action<RazorError, RazorError> verifyResults = null) private static void RunOnErrorTest(Func<Action<RazorError>, CallbackVisitor> ctor, Action<RazorError, RazorError> verifyResults = null)
{ {
RunCallbackTest(new RazorError("Foo", SourceLocation.Zero), ctor, (listener, expected) => listener.VisitError(expected), verifyResults); RunCallbackTest(
new RazorError("Foo", SourceLocation.Zero, length: 3),
ctor,
(listener, expected) => listener.VisitError(expected), verifyResults);
} }
private static void RunOnEndSpanTest(Func<Action<Span>, CallbackVisitor> ctor, Action<Span, Span> verifyResults = null) private static void RunOnEndSpanTest(Func<Action<Span>, CallbackVisitor> ctor, Action<Span, Span> verifyResults = null)

View File

@ -43,8 +43,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
new MarkupTagBlock( new MarkupTagBlock(
Factory.Markup("<"))))), Factory.Markup("<"))))),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_Code, "}", "{"), RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(
1, 0, 1)); RazorResources.BlockName_Code, "}", "{"),
new SourceLocation(1, 0, 1),
length: 1));
} }
[Fact] [Fact]
@ -75,8 +77,14 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
designTimeParser: true, designTimeParser: true,
expectedErrors: new[] expectedErrors: new[]
{ {
new RazorError(RazorResources.FormatParseError_UnexpectedEndTag("html"), 3 + Environment.NewLine.Length * 2, 2, 0), new RazorError(
new RazorError(RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("code", "}", "{"), 1, 0, 1) RazorResources.FormatParseError_UnexpectedEndTag("html"),
new SourceLocation(5 + Environment.NewLine.Length * 2, 2, 2),
length: 4),
new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("code", "}", "{"),
new SourceLocation(1, 0, 1),
length: 1)
}); });
} }
@ -89,7 +97,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
new MarkupTagBlock( new MarkupTagBlock(
Factory.Markup($"< {Environment.NewLine} "))), Factory.Markup($"< {Environment.NewLine} "))),
designTimeParser: true, designTimeParser: true,
expectedErrors: new RazorError(RazorResources.FormatParseError_UnfinishedTag(string.Empty), 0, 0, 0)); expectedErrors: new RazorError(
RazorResources.FormatParseError_UnfinishedTag(string.Empty),
new SourceLocation(1, 0, 1),
length: 1));
} }
[Fact] [Fact]
@ -319,7 +330,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
new MarkupBlock( new MarkupBlock(
new MarkupTagBlock( new MarkupTagBlock(
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None))), Factory.Markup("<foo>").Accepts(AcceptedCharacters.None))),
new RazorError(RazorResources.FormatParseError_MissingEndTag("foo"), new SourceLocation(0, 0, 0))); new RazorError(
RazorResources.FormatParseError_MissingEndTag("foo"),
new SourceLocation(1, 0, 1),
length: 3));
} }
[Fact] [Fact]
@ -382,7 +396,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)), Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
new MarkupTagBlock( new MarkupTagBlock(
Factory.Markup("</!-- bar -->").Accepts(AcceptedCharacters.None))), Factory.Markup("</!-- bar -->").Accepts(AcceptedCharacters.None))),
new RazorError(RazorResources.FormatParseError_MissingEndTag("foo"), 0, 0, 0)); new RazorError(
RazorResources.FormatParseError_MissingEndTag("foo"),
new SourceLocation(1, 0, 1),
length: 3));
} }
@ -545,7 +562,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
new MarkupBlock( new MarkupBlock(
new MarkupTagBlock( new MarkupTagBlock(
Factory.Markup("<br/"))), Factory.Markup("<br/"))),
new RazorError(RazorResources.FormatParseError_UnfinishedTag("br"), SourceLocation.Zero)); new RazorError(
RazorResources.FormatParseError_UnfinishedTag("br"),
new SourceLocation(1, 0, 1),
length: 2));
} }
[Fact] [Fact]

View File

@ -62,7 +62,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords) .AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharacters.NonWhiteSpace)), .Accepts(AcceptedCharacters.NonWhiteSpace)),
Factory.EmptyHtml()), Factory.EmptyHtml()),
new RazorError(RazorResources.ParseError_Unexpected_EndOfFile_At_Start_Of_CodeBlock, 1, 0, 1)); new RazorError(
RazorResources.ParseError_Unexpected_EndOfFile_At_Start_Of_CodeBlock,
new SourceLocation(1, 0, 1),
length: 1));
} }
[Fact] [Fact]
@ -148,7 +151,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords) .AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharacters.NonWhiteSpace)), .Accepts(AcceptedCharacters.NonWhiteSpace)),
Factory.EmptyHtml()), Factory.EmptyHtml()),
new RazorError(RazorResources.ParseError_Unexpected_EndOfFile_At_Start_Of_CodeBlock, 5, 0, 5)); new RazorError(
RazorResources.ParseError_Unexpected_EndOfFile_At_Start_Of_CodeBlock,
new SourceLocation(5, 0, 5),
length: 1));
} }
[Fact] [Fact]
@ -567,8 +573,14 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
Factory.Markup(" />"))); Factory.Markup(" />")));
var expectedErrors = new RazorError[] var expectedErrors = new RazorError[]
{ {
new RazorError(@"A space or line break was encountered after the ""@"" character. Only valid identifiers, keywords, comments, ""("" and ""{"" are valid at the start of a code block and they must occur immediately following ""@"" with no space in between.", new SourceLocation(12, 0, 12)), new RazorError(
new RazorError(@"""' />"" is not valid at the start of a code block. Only identifiers, keywords, comments, ""("" and ""{"" are valid.", new SourceLocation(14, 0, 14)), @"A space or line break was encountered after the ""@"" character. Only valid identifiers, keywords, comments, ""("" and ""{"" are valid at the start of a code block and they must occur immediately following ""@"" with no space in between.",
new SourceLocation(12, 0, 12),
length: 1),
new RazorError(
@"""' />"" is not valid at the start of a code block. Only identifiers, keywords, comments, ""("" and ""{"" are valid.",
new SourceLocation(14, 0, 14),
length: 4),
}; };
// Act & Assert // Act & Assert

View File

@ -32,7 +32,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
Factory.MarkupTransition("<text foo bar>").Accepts(AcceptedCharacters.Any)), Factory.MarkupTransition("<text foo bar>").Accepts(AcceptedCharacters.Any)),
new MarkupTagBlock( new MarkupTagBlock(
Factory.MarkupTransition("</text>"))), Factory.MarkupTransition("</text>"))),
new RazorError(RazorResources.ParseError_TextTagCannotContainAttributes, SourceLocation.Zero)); new RazorError(
RazorResources.ParseError_TextTagCannotContainAttributes,
new SourceLocation(1, 0, 1),
length: 4));
} }
[Fact] [Fact]
@ -44,7 +47,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
Factory.MarkupTransition("<text>")), Factory.MarkupTransition("<text>")),
new MarkupTagBlock( new MarkupTagBlock(
Factory.MarkupTransition("</text foo bar>").Accepts(AcceptedCharacters.Any))), Factory.MarkupTransition("</text foo bar>").Accepts(AcceptedCharacters.Any))),
new RazorError(RazorResources.ParseError_TextTagCannotContainAttributes, 6, 0, 6)); new RazorError(
RazorResources.ParseError_TextTagCannotContainAttributes,
new SourceLocation(8, 0, 8),
length: 4));
} }
[Fact] [Fact]
@ -52,7 +58,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
{ {
ParseBlockTest("foo bar <baz>", ParseBlockTest("foo bar <baz>",
new MarkupBlock(), new MarkupBlock(),
new RazorError(RazorResources.ParseError_MarkupBlock_Must_Start_With_Tag, SourceLocation.Zero)); new RazorError(
RazorResources.ParseError_MarkupBlock_Must_Start_With_Tag,
SourceLocation.Zero,
length: 3));
} }
[Fact] [Fact]
@ -63,7 +72,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
new MarkupTagBlock( new MarkupTagBlock(
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None)), Factory.Markup("</foo>").Accepts(AcceptedCharacters.None)),
Factory.Markup(" ").Accepts(AcceptedCharacters.None)), Factory.Markup(" ").Accepts(AcceptedCharacters.None)),
new RazorError(RazorResources.FormatParseError_UnexpectedEndTag("foo"), SourceLocation.Zero)); new RazorError(
RazorResources.FormatParseError_UnexpectedEndTag("foo"),
new SourceLocation(2, 0, 2),
length: 3));
} }
[Fact] [Fact]
@ -77,7 +89,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)), Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
new MarkupTagBlock( new MarkupTagBlock(
Factory.Markup("</bar>").Accepts(AcceptedCharacters.None))), Factory.Markup("</bar>").Accepts(AcceptedCharacters.None))),
new RazorError(RazorResources.FormatParseError_MissingEndTag("p"), new SourceLocation(0, 0, 0))); new RazorError(
RazorResources.FormatParseError_MissingEndTag("p"),
new SourceLocation(1, 0, 1),
length: 1));
} }
[Fact] [Fact]
@ -88,7 +103,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
new MarkupTagBlock( new MarkupTagBlock(
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)), Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
Factory.Markup("blah blah blah blah blah")), Factory.Markup("blah blah blah blah blah")),
new RazorError(RazorResources.FormatParseError_MissingEndTag("foo"), new SourceLocation(0, 0, 0))); new RazorError(
RazorResources.FormatParseError_MissingEndTag("foo"),
new SourceLocation(1, 0, 1),
length: 3));
} }
[Fact] [Fact]
@ -101,7 +119,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
new MarkupBlock(new AttributeBlockChunkGenerator("bar", new LocationTagged<string>(" bar=", 4, 0, 4), new LocationTagged<string>(string.Empty, 12, 0, 12)), new MarkupBlock(new AttributeBlockChunkGenerator("bar", new LocationTagged<string>(" bar=", 4, 0, 4), new LocationTagged<string>(string.Empty, 12, 0, 12)),
Factory.Markup(" bar=").With(SpanChunkGenerator.Null), Factory.Markup(" bar=").With(SpanChunkGenerator.Null),
Factory.Markup("baz").With(new LiteralAttributeChunkGenerator(new LocationTagged<string>(string.Empty, 9, 0, 9), new LocationTagged<string>("baz", 9, 0, 9)))))), Factory.Markup("baz").With(new LiteralAttributeChunkGenerator(new LocationTagged<string>(string.Empty, 9, 0, 9), new LocationTagged<string>("baz", 9, 0, 9)))))),
new RazorError(RazorResources.FormatParseError_UnfinishedTag("foo"), new SourceLocation(0, 0, 0))); new RazorError(
RazorResources.FormatParseError_UnfinishedTag("foo"),
new SourceLocation(1, 0, 1),
length: 3));
} }
} }
} }

View File

@ -41,7 +41,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
BlockFactory.MarkupTagBlock("<p>", AcceptedCharacters.None), BlockFactory.MarkupTagBlock("<p>", AcceptedCharacters.None),
BlockFactory.MarkupTagBlock("</>", AcceptedCharacters.None), BlockFactory.MarkupTagBlock("</>", AcceptedCharacters.None),
Factory.Markup(" ").Accepts(AcceptedCharacters.None)), Factory.Markup(" ").Accepts(AcceptedCharacters.None)),
new RazorError(RazorResources.FormatParseError_MissingEndTag("p"), 0, 0, 0)); new RazorError(
RazorResources.FormatParseError_MissingEndTag("p"),
new SourceLocation(1, 0, 1),
length: 1));
} }
[Fact] [Fact]

View File

@ -41,8 +41,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser
var errorSink = new ErrorSink(); var errorSink = new ErrorSink();
List<RazorError> errors = new List<RazorError> List<RazorError> errors = new List<RazorError>
{ {
new RazorError("Foo", 1, 0, 1), new RazorError("Foo", new SourceLocation(1, 0, 1), length: 3),
new RazorError("Bar", 2, 0, 2), new RazorError("Bar", new SourceLocation(2, 0, 2), length: 3),
}; };
foreach (var error in errors) foreach (var error in errors)
{ {
@ -65,8 +65,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser
Mock<ParserVisitor> targetMock = new Mock<ParserVisitor>(); Mock<ParserVisitor> targetMock = new Mock<ParserVisitor>();
var root = new BlockBuilder() { Type = BlockType.Comment }.Build(); var root = new BlockBuilder() { Type = BlockType.Comment }.Build();
var errorSink = new ErrorSink(); var errorSink = new ErrorSink();
errorSink.OnError(new RazorError("Foo", 1, 0, 1)); errorSink.OnError(new RazorError("Foo", new SourceLocation(1, 0, 1), length: 3));
errorSink.OnError(new RazorError("Bar", 2, 0, 2)); errorSink.OnError(new RazorError("Bar", new SourceLocation(2, 0, 2), length: 3));
var results = new ParserResults(root, Enumerable.Empty<TagHelperDescriptor>(), errorSink); var results = new ParserResults(root, Enumerable.Empty<TagHelperDescriptor>(), errorSink);
// Act // Act

View File

@ -237,7 +237,8 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
SourceLocation.Zero) new SourceLocation(1, 0, 1),
length: 1)
} }
}, },
{ {
@ -252,7 +253,8 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
SourceLocation.Zero) new SourceLocation(1, 0, 1),
length: 1)
} }
}, },
{ {
@ -269,10 +271,12 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
SourceLocation.Zero) new SourceLocation(1, 0, 1),
length: 1)
} }
}, },
{ {
@ -291,10 +295,12 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
SourceLocation.Zero) new SourceLocation(1, 0, 1),
length: 1)
} }
}, },
{ {
@ -311,15 +317,16 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
"TagHelper attributes must be well-formed.", "TagHelper attributes must be well-formed.",
absoluteIndex: 12, new SourceLocation(12, 0, 12),
lineIndex: 0, length: 1)
columnIndex: 12)
} }
}, },
{ {
@ -336,10 +343,12 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
SourceLocation.Zero) new SourceLocation(1, 0, 1),
length: 1)
} }
}, },
{ {
@ -358,10 +367,12 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
SourceLocation.Zero) new SourceLocation(1, 0, 1),
length: 1)
} }
}, },
{ {
@ -378,13 +389,16 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "strong"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "strong"),
absoluteIndex: 10, lineIndex: 0, columnIndex: 10) new SourceLocation(11, 0, 11),
length: 6)
} }
}, },
{ {
@ -399,7 +413,8 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
SourceLocation.Zero) new SourceLocation(1, 0, 1),
length: 1)
} }
}, },
{ {
@ -414,7 +429,8 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
SourceLocation.Zero) new SourceLocation(1, 0, 1),
length: 1)
} }
}, },
{ {
@ -433,13 +449,16 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "strong"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "strong"),
absoluteIndex: 23, lineIndex: 0, columnIndex: 23) new SourceLocation(24, 0, 24),
length: 6)
} }
}, },
{ {
@ -463,7 +482,7 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCSharp, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCSharp, "p"),
absoluteIndex: 3, lineIndex: 0 , columnIndex: 3) absoluteIndex: 3, lineIndex: 0 , columnIndex: 3, length: 13)
} }
}, },
{ {
@ -474,7 +493,7 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCSharp, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCSharp, "p"),
absoluteIndex: 3, lineIndex: 0 , columnIndex: 3) absoluteIndex: 3, lineIndex: 0 , columnIndex: 3, length: 13)
} }
}, },
{ {
@ -502,7 +521,8 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
SourceLocation.Zero) new SourceLocation(1, 0, 1),
length: 1)
} }
}, },
{ {
@ -519,13 +539,15 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("do", "}", "{"), RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("do", "}", "{"),
absoluteIndex: 11, lineIndex: 0, columnIndex: 11) absoluteIndex: 11, lineIndex: 0, columnIndex: 11, length: 1)
} }
}, },
{ {
@ -540,16 +562,18 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("do", "}", "{"), RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("do", "}", "{"),
absoluteIndex: 11, lineIndex: 0, columnIndex: 11), absoluteIndex: 11, lineIndex: 0, columnIndex: 11, length: 1),
new RazorError( new RazorError(
RazorResources.ParseError_Unterminated_String_Literal, RazorResources.ParseError_Unterminated_String_Literal,
absoluteIndex: 15, lineIndex: 0, columnIndex: 15) absoluteIndex: 15, lineIndex: 0, columnIndex: 15, length: 1)
} }
}, },
{ {
@ -560,19 +584,21 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCSharp, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCSharp, "p"),
absoluteIndex: 3, lineIndex: 0 , columnIndex: 3), absoluteIndex: 3, lineIndex: 0 , columnIndex: 3, length: 30),
new RazorError( new RazorError(
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("do", "}", "{"), RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("do", "}", "{"),
absoluteIndex: 4, lineIndex: 0, columnIndex: 4), absoluteIndex: 4, lineIndex: 0, columnIndex: 4, length: 1),
new RazorError( new RazorError(
RazorResources.FormatParseError_UnexpectedEndTag("p"), RazorResources.FormatParseError_UnexpectedEndTag("p"),
absoluteIndex: 29, lineIndex: 0, columnIndex: 29) absoluteIndex: 31, lineIndex: 0, columnIndex: 31, length: 1)
} }
} }
}; };
@ -609,10 +635,12 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
SourceLocation.Zero) new SourceLocation(1, 0, 1),
length: 1)
} }
}, },
{ {
@ -623,7 +651,7 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"),
absoluteIndex: 3, lineIndex: 0, columnIndex: 3) absoluteIndex: 5, lineIndex: 0, columnIndex: 5, length: 1)
} }
}, },
{ {
@ -635,13 +663,16 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "strong"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "strong"),
absoluteIndex: 3, lineIndex: 0, columnIndex: 3), new SourceLocation(4, 0, 4),
length: 6),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "strong"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "strong"),
absoluteIndex: 3, lineIndex: 0, columnIndex: 3) new SourceLocation(4, 0, 4),
length: 6)
} }
}, },
{ {
@ -653,13 +684,16 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "strong"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "strong"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 6),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "strong"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "strong"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 6),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
absoluteIndex: 8, lineIndex: 0, columnIndex: 8) new SourceLocation(9, 0, 9),
length: 1)
} }
}, },
{ {
@ -670,10 +704,12 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "strong"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "strong"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 6),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "strong"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "strong"),
absoluteIndex: 8, lineIndex: 0, columnIndex: 8) new SourceLocation(10, 0, 10),
length: 6)
} }
}, },
{ {
@ -689,10 +725,12 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "strong"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "strong"),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2), new SourceLocation(4, 0, 4),
length: 6),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
absoluteIndex: 13, lineIndex: 0, columnIndex: 13) new SourceLocation(14, 0, 14),
length: 1)
} }
}, },
{ {
@ -709,7 +747,8 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "strong"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "strong"),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2) new SourceLocation(3, 0, 3),
length: 6)
} }
}, },
{ {
@ -722,7 +761,8 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
absoluteIndex: 12, lineIndex: 0, columnIndex: 12) new SourceLocation(14, 0, 14),
length: 1)
} }
} }
}; };
@ -1091,10 +1131,10 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, malformedErrorFormat, "strong"), string.Format(CultureInfo.InvariantCulture, malformedErrorFormat, "strong"),
absoluteIndex: 52, lineIndex: 0, columnIndex: 52), absoluteIndex: 53, lineIndex: 0, columnIndex: 53, length: 6),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, malformedErrorFormat, "strong"), string.Format(CultureInfo.InvariantCulture, malformedErrorFormat, "strong"),
absoluteIndex: 64, lineIndex: 0, columnIndex: 64) absoluteIndex: 66, lineIndex: 0, columnIndex: 66, length: 6)
} }
}; };
yield return new object[] yield return new object[]
@ -1111,7 +1151,7 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, malformedErrorFormat, "p"), string.Format(CultureInfo.InvariantCulture, malformedErrorFormat, "p"),
absoluteIndex: 5, lineIndex: 0, columnIndex: 5) absoluteIndex: 6, lineIndex: 0, columnIndex: 6, length: 1)
} }
}; };
yield return new object[] yield return new object[]
@ -1128,10 +1168,10 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, malformedErrorFormat, "p"), string.Format(CultureInfo.InvariantCulture, malformedErrorFormat, "p"),
absoluteIndex: 5, lineIndex: 0, columnIndex: 5), absoluteIndex: 6, lineIndex: 0, columnIndex: 6, length: 1),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, malformedErrorFormat, "strong"), string.Format(CultureInfo.InvariantCulture, malformedErrorFormat, "strong"),
absoluteIndex: 14, lineIndex: 0, columnIndex: 14) absoluteIndex: 15, lineIndex: 0, columnIndex: 15, length: 6)
} }
}; };
yield return new object[] yield return new object[]
@ -1154,7 +1194,8 @@ namespace Microsoft.AspNet.Razor.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, malformedErrorFormat, "p"), string.Format(CultureInfo.InvariantCulture, malformedErrorFormat, "p"),
SourceLocation.Zero) new SourceLocation(1, 0, 1),
length: 1)
} }
}; };
} }
@ -3463,8 +3504,14 @@ namespace Microsoft.AspNet.Razor.TagHelpers
})), })),
new[] new[]
{ {
new RazorError(string.Format(errorFormatNoCloseAngle, "input"), SourceLocation.Zero), new RazorError(
new RazorError(string.Format(errorFormatUnclosed, "input"), SourceLocation.Zero), string.Format(errorFormatNoCloseAngle, "input"),
new SourceLocation(1, 0, 1),
length: 5),
new RazorError(
string.Format(errorFormatUnclosed, "input"),
new SourceLocation(1, 0, 1),
length: 5),
} }
}, },
{ {
@ -3479,8 +3526,14 @@ namespace Microsoft.AspNet.Razor.TagHelpers
})), })),
new[] new[]
{ {
new RazorError(string.Format(errorFormatNoCloseAngle, "input"), SourceLocation.Zero), new RazorError(
new RazorError(string.Format(errorFormatUnclosed, "input"), SourceLocation.Zero), string.Format(errorFormatNoCloseAngle, "input"),
new SourceLocation(1, 0, 1),
length: 5),
new RazorError(
string.Format(errorFormatUnclosed, "input"),
new SourceLocation(1, 0, 1),
length: 5),
new RazorError( new RazorError(
string.Format(errorFormatNoValue, "bound-required-string", "input", stringType), string.Format(errorFormatNoValue, "bound-required-string", "input", stringType),
absoluteIndex: 7, absoluteIndex: 7,
@ -3501,8 +3554,14 @@ namespace Microsoft.AspNet.Razor.TagHelpers
})), })),
new[] new[]
{ {
new RazorError(string.Format(errorFormatNoCloseAngle, "input"), SourceLocation.Zero), new RazorError(
new RazorError(string.Format(errorFormatUnclosed, "input"), SourceLocation.Zero), string.Format(errorFormatNoCloseAngle, "input"),
new SourceLocation(1, 0, 1),
length: 5),
new RazorError(
string.Format(errorFormatUnclosed, "input"),
new SourceLocation(1, 0, 1),
length: 5),
new RazorError( new RazorError(
string.Format(errorFormatNoValue, "bound-required-int", "input", intType), string.Format(errorFormatNoValue, "bound-required-int", "input", intType),
absoluteIndex: 7, absoluteIndex: 7,
@ -3525,8 +3584,14 @@ namespace Microsoft.AspNet.Razor.TagHelpers
})), })),
new[] new[]
{ {
new RazorError(string.Format(errorFormatNoCloseAngle, "input"), SourceLocation.Zero), new RazorError(
new RazorError(string.Format(errorFormatUnclosed, "input"), SourceLocation.Zero), string.Format(errorFormatNoCloseAngle, "input"),
new SourceLocation(1, 0, 1),
length: 5),
new RazorError(
string.Format(errorFormatUnclosed, "input"),
new SourceLocation(1, 0, 1),
length: 5),
new RazorError( new RazorError(
string.Format(errorFormatNoValue, "bound-required-int", "input", intType), string.Format(errorFormatNoValue, "bound-required-int", "input", intType),
absoluteIndex: 7, absoluteIndex: 7,
@ -3553,8 +3618,14 @@ namespace Microsoft.AspNet.Razor.TagHelpers
})), })),
new[] new[]
{ {
new RazorError(string.Format(errorFormatNoCloseAngle, "p"), SourceLocation.Zero), new RazorError(
new RazorError(string.Format(errorFormatUnclosed, "p"), SourceLocation.Zero), string.Format(errorFormatNoCloseAngle, "p"),
new SourceLocation(1, 0, 1),
length: 1),
new RazorError(
string.Format(errorFormatUnclosed, "p"),
new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
string.Format(errorFormatNoValue, "bound-string", "p", stringType), 3, 0, 3, 12), string.Format(errorFormatNoValue, "bound-string", "p", stringType), 3, 0, 3, 12),
} }
@ -3571,8 +3642,14 @@ namespace Microsoft.AspNet.Razor.TagHelpers
})), })),
new[] new[]
{ {
new RazorError(string.Format(errorFormatNoCloseAngle, "p"), SourceLocation.Zero), new RazorError(
new RazorError(string.Format(errorFormatUnclosed, "p"), SourceLocation.Zero), string.Format(errorFormatNoCloseAngle, "p"),
new SourceLocation(1, 0, 1),
length: 1),
new RazorError(
string.Format(errorFormatUnclosed, "p"),
new SourceLocation(1, 0, 1),
length: 1),
new RazorError(string.Format(errorFormatNoValue, "bound-int", "p", intType), 3, 0, 3, 9), new RazorError(string.Format(errorFormatNoValue, "bound-int", "p", intType), 3, 0, 3, 9),
} }
}, },
@ -3589,8 +3666,14 @@ namespace Microsoft.AspNet.Razor.TagHelpers
})), })),
new[] new[]
{ {
new RazorError(string.Format(errorFormatNoCloseAngle, "p"), SourceLocation.Zero), new RazorError(
new RazorError(string.Format(errorFormatUnclosed, "p"), SourceLocation.Zero), string.Format(errorFormatNoCloseAngle, "p"),
new SourceLocation(1, 0, 1),
length: 1),
new RazorError(
string.Format(errorFormatUnclosed, "p"),
new SourceLocation(1, 0, 1),
length: 1),
new RazorError(string.Format(errorFormatNoValue, "bound-int", "p", intType), 3, 0, 3, 9), new RazorError(string.Format(errorFormatNoValue, "bound-int", "p", intType), 3, 0, 3, 9),
new RazorError( new RazorError(
string.Format(errorFormatNoValue, "bound-string", "p", stringType), 13, 0, 13, 12), string.Format(errorFormatNoValue, "bound-string", "p", stringType), 13, 0, 13, 12),
@ -3618,8 +3701,14 @@ namespace Microsoft.AspNet.Razor.TagHelpers
}))), }))),
new[] new[]
{ {
new RazorError(string.Format(errorFormatNoCloseAngle, "input"), SourceLocation.Zero), new RazorError(
new RazorError(string.Format(errorFormatUnclosed, "input"), SourceLocation.Zero), string.Format(errorFormatNoCloseAngle, "input"),
new SourceLocation(1, 0, 1),
length: 5),
new RazorError(
string.Format(errorFormatUnclosed, "input"),
new SourceLocation(1, 0, 1),
length: 5),
new RazorError( new RazorError(
string.Format(errorFormatNoValue, "bound-required-int", "input", intType), 7, 0, 7, 18), string.Format(errorFormatNoValue, "bound-required-int", "input", intType), 7, 0, 7, 18),
new RazorError( new RazorError(
@ -3628,8 +3717,14 @@ namespace Microsoft.AspNet.Razor.TagHelpers
lineIndex: 0, lineIndex: 0,
columnIndex: 43, columnIndex: 43,
length: 21), length: 21),
new RazorError(string.Format(errorFormatNoCloseAngle, "p"), 64, 0, 64), new RazorError(
new RazorError(string.Format(errorFormatUnclosed, "p"), 64, 0, 64), string.Format(errorFormatNoCloseAngle, "p"),
new SourceLocation(65, 0, 65),
length: 1),
new RazorError(
string.Format(errorFormatUnclosed, "p"),
new SourceLocation(65, 0, 65),
length: 1),
new RazorError(string.Format(errorFormatNoValue, "bound-int", "p", intType), 67, 0, 67, 9), new RazorError(string.Format(errorFormatNoValue, "bound-int", "p", intType), 67, 0, 67, 9),
new RazorError( new RazorError(
string.Format(errorFormatNoValue, "bound-string", "p", stringType), string.Format(errorFormatNoValue, "bound-string", "p", stringType),

View File

@ -30,22 +30,22 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
var expectedErrors = new[] { var expectedErrors = new[] {
new RazorError( new RazorError(
RazorResources.FormatTagHelperParseTreeRewriter_InvalidNestedTag("strong", "p", "br"), RazorResources.FormatTagHelperParseTreeRewriter_InvalidNestedTag("strong", "p", "br"),
absoluteIndex: 7 + newLineLength, absoluteIndex: 8 + newLineLength,
lineIndex: 1, lineIndex: 1,
columnIndex: 9 + newLineLength, columnIndex: 5,
length: 8), length: 6),
new RazorError( new RazorError(
RazorResources.FormatTagHelperParseTreeRewriter_CannotHaveNonTagContent("p", "br"), RazorResources.FormatTagHelperParseTreeRewriter_CannotHaveNonTagContent("p", "br"),
absoluteIndex: 23 + newLineLength * 2, absoluteIndex: 23 + newLineLength * 2,
lineIndex: 2, lineIndex: 2,
columnIndex: 23 + newLineLength * 2, columnIndex: 8,
length: 5), length: 5),
new RazorError( new RazorError(
RazorResources.FormatTagHelperParseTreeRewriter_InvalidNestedTag("strong", "p", "br"), RazorResources.FormatTagHelperParseTreeRewriter_InvalidNestedTag("strong", "p", "br"),
absoluteIndex: 32 + newLineLength * 3, absoluteIndex: 34 + newLineLength * 3,
lineIndex: 3, lineIndex: 3,
columnIndex: 32 + newLineLength * 3, columnIndex: 5,
length: 9), length: 6),
}; };
var expectedOutput = new MarkupBlock( var expectedOutput = new MarkupBlock(
new MarkupTagHelperBlock("p", new MarkupTagHelperBlock("p",
@ -81,16 +81,16 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
var expectedErrors = new[] { var expectedErrors = new[] {
new RazorError( new RazorError(
RazorResources.FormatTagHelperParseTreeRewriter_InvalidNestedTag("strong", "strong", "br"), RazorResources.FormatTagHelperParseTreeRewriter_InvalidNestedTag("strong", "strong", "br"),
absoluteIndex: 17, absoluteIndex: 18,
lineIndex: 0, lineIndex: 0,
columnIndex: 17, columnIndex: 18,
length: 8), length: 6),
new RazorError( new RazorError(
RazorResources.FormatTagHelperParseTreeRewriter_InvalidNestedTag("strong", "strong", "br"), RazorResources.FormatTagHelperParseTreeRewriter_InvalidNestedTag("strong", "strong", "br"),
absoluteIndex: 25, absoluteIndex: 27,
lineIndex: 0, lineIndex: 0,
columnIndex: 25, columnIndex: 27,
length: 9), length: 6),
}; };
var expectedOutput = new MarkupBlock( var expectedOutput = new MarkupBlock(
new MarkupTagHelperBlock("strong", new MarkupTagHelperBlock("strong",
@ -260,7 +260,7 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
new MarkupBlock( new MarkupBlock(
new MarkupTagHelperBlock("p", new MarkupTagHelperBlock("p",
new MarkupTagHelperBlock("br", TagMode.StartTagOnly))), new MarkupTagHelperBlock("br", TagMode.StartTagOnly))),
new[] { nestedTagError("br", "p", "strong", 3, 4) } new[] { nestedTagError("br", "p", "strong", 4, 2) }
}, },
{ {
"<p>Hello</p>", "<p>Hello</p>",
@ -272,7 +272,7 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
"<p><hr /></p>", "<p><hr /></p>",
new[] { "br", "strong" }, new[] { "br", "strong" },
new MarkupBlock(new MarkupTagHelperBlock("p", blockFactory.MarkupTagBlock("<hr />"))), new MarkupBlock(new MarkupTagHelperBlock("p", blockFactory.MarkupTagBlock("<hr />"))),
new[] { nestedTagError("hr", "p", "br, strong", 3, 6) } new[] { nestedTagError("hr", "p", "br, strong", 4, 2) }
}, },
{ {
"<p><br>Hello</p>", "<p><br>Hello</p>",
@ -281,7 +281,7 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
new MarkupTagHelperBlock("p", new MarkupTagHelperBlock("p",
new MarkupTagHelperBlock("br", TagMode.StartTagOnly), new MarkupTagHelperBlock("br", TagMode.StartTagOnly),
factory.Markup("Hello"))), factory.Markup("Hello"))),
new[] { nestedTagError("br", "p", "strong", 3, 4), nestedContentError("p", "strong", 7, 5) } new[] { nestedTagError("br", "p", "strong", 4, 2), nestedContentError("p", "strong", 7, 5) }
}, },
{ {
"<p><strong>Title:</strong><br />Something</p>", "<p><strong>Title:</strong><br />Something</p>",
@ -294,7 +294,7 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
new[] new[]
{ {
nestedContentError("strong", "strong", 11, 6), nestedContentError("strong", "strong", 11, 6),
nestedTagError("br", "p", "strong", 26, 6), nestedTagError("br", "p", "strong", 27, 2),
nestedContentError("p", "strong", 32, 9), nestedContentError("p", "strong", 32, 9),
} }
}, },
@ -344,11 +344,11 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
new[] new[]
{ {
nestedContentError("strong", "strong", 11, 6), nestedContentError("strong", "strong", 11, 6),
nestedTagError("br", "strong", "strong", 17, 4), nestedTagError("br", "strong", "strong", 18, 2),
nestedTagError("em", "strong", "strong", 21, 4), nestedTagError("em", "strong", "strong", 22, 2),
nestedContentError("strong", "strong", 25, 11), nestedContentError("strong", "strong", 25, 11),
nestedTagError("em", "strong", "strong", 36, 5), nestedTagError("em", "strong", "strong", 38, 2),
nestedTagError("br", "p", "strong", 50, 6), nestedTagError("br", "p", "strong", 51, 2),
nestedContentError("p", "strong", 56, 9) nestedContentError("p", "strong", 56, 9)
} }
}, },
@ -368,14 +368,14 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
factory.Markup("Something"))), factory.Markup("Something"))),
new[] new[]
{ {
nestedTagError("custom", "p", "custom", 3, 8), nestedTagError("custom", "p", "custom", 4, 6),
nestedContentError("p", "custom", 11, 6), nestedContentError("p", "custom", 11, 6),
nestedTagError("br", "p", "custom", 17, 4), nestedTagError("br", "p", "custom", 18, 2),
nestedTagError("em", "p", "custom", 21, 4), nestedTagError("em", "p", "custom", 22, 2),
nestedContentError("p", "custom", 25, 11), nestedContentError("p", "custom", 25, 11),
nestedTagError("em", "p", "custom", 36, 5), nestedTagError("em", "p", "custom", 38, 2),
nestedTagError("custom", "p", "custom", 41, 9), nestedTagError("custom", "p", "custom", 43, 6),
nestedTagError("br", "p", "custom", 50, 6), nestedTagError("br", "p", "custom", 51, 2),
nestedContentError("p", "custom", 56, 9) nestedContentError("p", "custom", 56, 9)
} }
} }
@ -455,10 +455,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
"input", "input",
"InputTagHelper", "InputTagHelper",
TagStructure.WithoutEndTag), TagStructure.WithoutEndTag),
absoluteIndex: 0, absoluteIndex: 2,
lineIndex: 0, lineIndex: 0,
columnIndex: 0, columnIndex: 2,
length: 8); length: 5);
var documentContent = "</input>"; var documentContent = "</input>";
var expectedOutput = new MarkupBlock(blockFactory.MarkupTagBlock("</input>")); var expectedOutput = new MarkupBlock(blockFactory.MarkupTagBlock("</input>"));
var descriptors = new TagHelperDescriptor[] var descriptors = new TagHelperDescriptor[]
@ -1237,10 +1237,12 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
SourceLocation.Zero) new SourceLocation(1, 0, 1),
length: 1)
} }
}, },
{ {
@ -1257,10 +1259,12 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
SourceLocation.Zero) new SourceLocation(1, 0, 1),
length: 1)
} }
}, },
{ {
@ -1283,7 +1287,8 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"),
absoluteIndex: 15, lineIndex: 0, columnIndex: 15) new SourceLocation(17, 0, 17),
length: 1)
} }
}, },
{ {
@ -1300,7 +1305,8 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"),
absoluteIndex: 32, lineIndex: 0, columnIndex: 32) new SourceLocation(34, 0, 34),
length: 1)
} }
}, },
{ {
@ -1316,10 +1322,12 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
} }
}, },
{ {
@ -1336,10 +1344,12 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
} }
}, },
{ {
@ -1355,10 +1365,12 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"),
absoluteIndex: 15, lineIndex: 0, columnIndex: 15) new SourceLocation(17, 0, 17),
length: 1)
} }
}, },
{ {
@ -1375,10 +1387,12 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"),
SourceLocation.Zero), new SourceLocation(1, 0, 1),
length: 1),
new RazorError( new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"), string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"),
absoluteIndex: 32, lineIndex: 0, columnIndex: 32) new SourceLocation(34, 0, 34),
length: 1)
} }
}, },
}; };
@ -1794,10 +1808,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
errorMatchingBrace, errorMatchingBrace,
absoluteIndex: 1, lineIndex: 0, columnIndex: 1), absoluteIndex: 1, lineIndex: 0, columnIndex: 1, length: 1),
new RazorError( new RazorError(
string.Format(errorFormatNormalUnclosed, "!text"), string.Format(errorFormatNormalUnclosed, "!text"),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2) absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 5)
} }
}, },
{ {
@ -1974,10 +1988,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
errorMatchingBrace, errorMatchingBrace,
absoluteIndex: 1, lineIndex: 0, columnIndex: 1), absoluteIndex: 1, lineIndex: 0, columnIndex: 1, length: 1),
new RazorError( new RazorError(
string.Format(errorFormatNormalUnclosed, "!text", CultureInfo.InvariantCulture), string.Format(errorFormatNormalUnclosed, "!text", CultureInfo.InvariantCulture),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2), absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 5),
} }
}, },
{ {
@ -1989,7 +2003,7 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(errorFormatNormalNotStarted, "!text", CultureInfo.InvariantCulture), string.Format(errorFormatNormalNotStarted, "!text", CultureInfo.InvariantCulture),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2), absoluteIndex: 4, lineIndex: 0, columnIndex: 4, length: 5),
} }
}, },
{ {
@ -2019,10 +2033,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(errorFormatNormalUnclosed, "!text", CultureInfo.InvariantCulture), string.Format(errorFormatNormalUnclosed, "!text", CultureInfo.InvariantCulture),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2), absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 5),
new RazorError( new RazorError(
string.Format(errorFormatMalformed, "text", CultureInfo.InvariantCulture), string.Format(errorFormatMalformed, "text", CultureInfo.InvariantCulture),
absoluteIndex: 9, lineIndex: 0, columnIndex: 9) absoluteIndex: 11, lineIndex: 0, columnIndex: 11, length: 4)
} }
}, },
{ {
@ -2038,7 +2052,7 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(errorFormatNormalUnclosed, "text", CultureInfo.InvariantCulture), string.Format(errorFormatNormalUnclosed, "text", CultureInfo.InvariantCulture),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2) absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 4)
} }
}, },
{ {
@ -2069,10 +2083,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
errorMatchingBrace, errorMatchingBrace,
absoluteIndex: 1, lineIndex: 0, columnIndex: 1), absoluteIndex: 1, lineIndex: 0, columnIndex: 1, length: 1),
new RazorError( new RazorError(
string.Format(errorFormatNormalUnclosed, "text", CultureInfo.InvariantCulture), string.Format(errorFormatNormalUnclosed, "text", CultureInfo.InvariantCulture),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2) absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 4)
} }
}, },
{ {
@ -2094,10 +2108,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(errorFormatNormalNotStarted, "text", CultureInfo.InvariantCulture), string.Format(errorFormatNormalNotStarted, "text", CultureInfo.InvariantCulture),
absoluteIndex: 17, lineIndex: 0, columnIndex: 17), absoluteIndex: 19, lineIndex: 0, columnIndex: 19, length: 4),
new RazorError( new RazorError(
string.Format(errorFormatMalformed, "text", CultureInfo.InvariantCulture), string.Format(errorFormatMalformed, "text", CultureInfo.InvariantCulture),
absoluteIndex: 17, lineIndex: 0, columnIndex: 17) absoluteIndex: 19, lineIndex: 0, columnIndex: 19, length: 4)
} }
}, },
}; };
@ -2152,10 +2166,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
errorMatchingBrace, errorMatchingBrace,
absoluteIndex: 1, lineIndex: 0, columnIndex: 1), absoluteIndex: 1, lineIndex: 0, columnIndex: 1, length: 1),
new RazorError( new RazorError(
string.Format(errorEOFMatchingBrace, "!text}"), string.Format(errorEOFMatchingBrace, "!text}"),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2) absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 6)
} }
}, },
{ {
@ -2170,10 +2184,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
errorMatchingBrace, errorMatchingBrace,
absoluteIndex: 1, lineIndex: 0, columnIndex: 1), absoluteIndex: 1, lineIndex: 0, columnIndex: 1, length: 1),
new RazorError( new RazorError(
string.Format(errorEOFMatchingBrace, "!text"), string.Format(errorEOFMatchingBrace, "!text"),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2) absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 5)
} }
}, },
{ {
@ -2198,10 +2212,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
errorMatchingBrace, errorMatchingBrace,
absoluteIndex: 1, lineIndex: 0, columnIndex: 1), absoluteIndex: 1, lineIndex: 0, columnIndex: 1, length: 1),
new RazorError( new RazorError(
string.Format(errorEOFMatchingBrace, "!text"), string.Format(errorEOFMatchingBrace, "!text"),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2) absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 5)
} }
}, },
{ {
@ -2226,10 +2240,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
errorMatchingBrace, errorMatchingBrace,
absoluteIndex: 1, lineIndex: 0, columnIndex: 1), absoluteIndex: 1, lineIndex: 0, columnIndex: 1, length: 1),
new RazorError( new RazorError(
string.Format(errorEOFMatchingBrace, "!text"), string.Format(errorEOFMatchingBrace, "!text"),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2) absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 5)
} }
}, },
{ {
@ -2257,10 +2271,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
errorMatchingBrace, errorMatchingBrace,
absoluteIndex: 1, lineIndex: 0, columnIndex: 1), absoluteIndex: 1, lineIndex: 0, columnIndex: 1, length: 1),
new RazorError( new RazorError(
string.Format(errorEOFMatchingBrace, "!text"), string.Format(errorEOFMatchingBrace, "!text"),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2) absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 5)
} }
}, },
{ {
@ -2289,10 +2303,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
errorMatchingBrace, errorMatchingBrace,
absoluteIndex: 1, lineIndex: 0, columnIndex: 1), absoluteIndex: 1, lineIndex: 0, columnIndex: 1, length: 1),
new RazorError( new RazorError(
string.Format(errorEOFMatchingBrace, "!text"), string.Format(errorEOFMatchingBrace, "!text"),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2) absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 5)
} }
} }
}; };
@ -2346,10 +2360,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
errorMatchingBrace, errorMatchingBrace,
absoluteIndex: 1, lineIndex: 0, columnIndex: 1), absoluteIndex: 1, lineIndex: 0, columnIndex: 1, length: 1),
new RazorError( new RazorError(
string.Format(errorEOFMatchingBrace, "!}"), string.Format(errorEOFMatchingBrace, "!}"),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2) absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 2)
} }
}, },
{ {
@ -2360,10 +2374,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
errorMatchingBrace, errorMatchingBrace,
absoluteIndex: 1, lineIndex: 0, columnIndex: 1), absoluteIndex: 1, lineIndex: 0, columnIndex: 1, length: 1),
new RazorError( new RazorError(
string.Format(errorEOFMatchingBrace, "!p}"), string.Format(errorEOFMatchingBrace, "!p}"),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2) absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 3)
} }
}, },
{ {
@ -2375,10 +2389,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
errorMatchingBrace, errorMatchingBrace,
absoluteIndex: 1, lineIndex: 0, columnIndex: 1), absoluteIndex: 1, lineIndex: 0, columnIndex: 1, length: 1),
new RazorError( new RazorError(
string.Format(errorEOFMatchingBrace, "!p"), string.Format(errorEOFMatchingBrace, "!p"),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2) absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 2)
} }
}, },
{ {
@ -2403,10 +2417,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
errorMatchingBrace, errorMatchingBrace,
absoluteIndex: 1, lineIndex: 0, columnIndex: 1), absoluteIndex: 1, lineIndex: 0, columnIndex: 1, length: 1),
new RazorError( new RazorError(
string.Format(errorEOFMatchingBrace, "!p"), string.Format(errorEOFMatchingBrace, "!p"),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2) absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 2)
} }
}, },
{ {
@ -2431,10 +2445,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
errorMatchingBrace, errorMatchingBrace,
absoluteIndex: 1, lineIndex: 0, columnIndex: 1), absoluteIndex: 1, lineIndex: 0, columnIndex: 1, length: 1),
new RazorError( new RazorError(
string.Format(errorEOFMatchingBrace, "!p"), string.Format(errorEOFMatchingBrace, "!p"),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2) absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 2)
} }
}, },
{ {
@ -2466,10 +2480,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
errorMatchingBrace, errorMatchingBrace,
absoluteIndex: 1, lineIndex: 0, columnIndex: 1), absoluteIndex: 1, lineIndex: 0, columnIndex: 1, length: 1),
new RazorError( new RazorError(
string.Format(errorEOFMatchingBrace, "!p"), string.Format(errorEOFMatchingBrace, "!p"),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2) absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 2)
} }
}, },
{ {
@ -2497,10 +2511,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
errorMatchingBrace, errorMatchingBrace,
absoluteIndex: 1, lineIndex: 0, columnIndex: 1), absoluteIndex: 1, lineIndex: 0, columnIndex: 1, length: 1),
new RazorError( new RazorError(
string.Format(errorEOFMatchingBrace, "!p"), string.Format(errorEOFMatchingBrace, "!p"),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2) absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 2)
} }
}, },
{ {
@ -2530,10 +2544,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
errorMatchingBrace, errorMatchingBrace,
absoluteIndex: 1, lineIndex: 0, columnIndex: 1), absoluteIndex: 1, lineIndex: 0, columnIndex: 1, length: 1),
new RazorError( new RazorError(
string.Format(errorEOFMatchingBrace, "!p"), string.Format(errorEOFMatchingBrace, "!p"),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2) absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 2)
} }
} }
}; };
@ -2707,10 +2721,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
errorMatchingBrace, errorMatchingBrace,
absoluteIndex: 1, lineIndex: 0, columnIndex: 1), absoluteIndex: 1, lineIndex: 0, columnIndex: 1, length: 1),
new RazorError( new RazorError(
string.Format(errorFormatNormalUnclosed, "!p", CultureInfo.InvariantCulture), string.Format(errorFormatNormalUnclosed, "!p", CultureInfo.InvariantCulture),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2), absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 2),
} }
}, },
{ {
@ -2722,7 +2736,7 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(errorFormatNormalNotStarted, "!p", CultureInfo.InvariantCulture), string.Format(errorFormatNormalNotStarted, "!p", CultureInfo.InvariantCulture),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2), absoluteIndex: 4, lineIndex: 0, columnIndex: 4, length: 2),
} }
}, },
{ {
@ -2752,10 +2766,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(errorFormatNormalUnclosed, "!p", CultureInfo.InvariantCulture), string.Format(errorFormatNormalUnclosed, "!p", CultureInfo.InvariantCulture),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2), absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 2),
new RazorError( new RazorError(
string.Format(errorFormatMalformed, "p", CultureInfo.InvariantCulture), string.Format(errorFormatMalformed, "p", CultureInfo.InvariantCulture),
absoluteIndex: 6, lineIndex: 0, columnIndex: 6) absoluteIndex: 8, lineIndex: 0, columnIndex: 8, length: 1)
} }
}, },
{ {
@ -2768,10 +2782,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(errorFormatNormalUnclosed, "p", CultureInfo.InvariantCulture), string.Format(errorFormatNormalUnclosed, "p", CultureInfo.InvariantCulture),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2), absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 1),
new RazorError( new RazorError(
string.Format(errorFormatMalformed, "p", CultureInfo.InvariantCulture), string.Format(errorFormatMalformed, "p", CultureInfo.InvariantCulture),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2) absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 1)
} }
}, },
{ {
@ -2799,13 +2813,13 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
errorMatchingBrace, errorMatchingBrace,
absoluteIndex: 1, lineIndex: 0, columnIndex: 1), absoluteIndex: 1, lineIndex: 0, columnIndex: 1, length: 1),
new RazorError( new RazorError(
string.Format(errorFormatNormalUnclosed, "p", CultureInfo.InvariantCulture), string.Format(errorFormatNormalUnclosed, "p", CultureInfo.InvariantCulture),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2), absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 1),
new RazorError( new RazorError(
string.Format(errorFormatMalformed, "p", CultureInfo.InvariantCulture), string.Format(errorFormatMalformed, "p", CultureInfo.InvariantCulture),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2) absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 1)
} }
}, },
{ {
@ -2827,10 +2841,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(errorFormatNormalNotStarted, "p", CultureInfo.InvariantCulture), string.Format(errorFormatNormalNotStarted, "p", CultureInfo.InvariantCulture),
absoluteIndex: 11, lineIndex: 0, columnIndex: 11), absoluteIndex: 13, lineIndex: 0, columnIndex: 13, length: 1),
new RazorError( new RazorError(
string.Format(errorFormatMalformed, "p", CultureInfo.InvariantCulture), string.Format(errorFormatMalformed, "p", CultureInfo.InvariantCulture),
absoluteIndex: 11, lineIndex: 0, columnIndex: 11) absoluteIndex: 13, lineIndex: 0, columnIndex: 13, length: 1)
} }
}, },
{ {
@ -2852,16 +2866,16 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(errorFormatNormalUnclosed, "strong", CultureInfo.InvariantCulture), string.Format(errorFormatNormalUnclosed, "strong", CultureInfo.InvariantCulture),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2), absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 6),
new RazorError( new RazorError(
string.Format(errorFormatMalformed, "strong", CultureInfo.InvariantCulture), string.Format(errorFormatMalformed, "strong", CultureInfo.InvariantCulture),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2), absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 6),
new RazorError( new RazorError(
string.Format(errorFormatNormalNotStarted, "strong", CultureInfo.InvariantCulture), string.Format(errorFormatNormalNotStarted, "strong", CultureInfo.InvariantCulture),
absoluteIndex: 15, lineIndex: 0, columnIndex: 15), absoluteIndex: 17, lineIndex: 0, columnIndex: 17, length: 6),
new RazorError( new RazorError(
string.Format(errorFormatMalformed, "strong", CultureInfo.InvariantCulture), string.Format(errorFormatMalformed, "strong", CultureInfo.InvariantCulture),
absoluteIndex: 15, lineIndex: 0, columnIndex: 15) absoluteIndex: 17, lineIndex: 0, columnIndex: 17, length: 6)
} }
}, },
{ {
@ -2904,22 +2918,22 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(errorFormatNormalUnclosed, "p", CultureInfo.InvariantCulture), string.Format(errorFormatNormalUnclosed, "p", CultureInfo.InvariantCulture),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2), absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 1),
new RazorError( new RazorError(
string.Format(errorFormatMalformed, "p", CultureInfo.InvariantCulture), string.Format(errorFormatMalformed, "p", CultureInfo.InvariantCulture),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2), absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 1),
new RazorError( new RazorError(
string.Format(errorFormatMalformed, "strong", CultureInfo.InvariantCulture), string.Format(errorFormatMalformed, "strong", CultureInfo.InvariantCulture),
absoluteIndex: 5, lineIndex: 0, columnIndex: 5), absoluteIndex: 6, lineIndex: 0, columnIndex: 6, length: 6),
new RazorError( new RazorError(
string.Format(errorFormatNormalUnclosed, "!p", CultureInfo.InvariantCulture), string.Format(errorFormatNormalUnclosed, "!p", CultureInfo.InvariantCulture),
absoluteIndex: 23, lineIndex: 0, columnIndex: 23), absoluteIndex: 24, lineIndex: 0, columnIndex: 24, length: 2),
new RazorError( new RazorError(
string.Format(errorFormatMalformed, "strong", CultureInfo.InvariantCulture), string.Format(errorFormatMalformed, "strong", CultureInfo.InvariantCulture),
absoluteIndex: 27, lineIndex: 0, columnIndex: 27), absoluteIndex: 29, lineIndex: 0, columnIndex: 29, length: 6),
new RazorError( new RazorError(
string.Format(errorFormatNormalNotStarted, "!p", CultureInfo.InvariantCulture), string.Format(errorFormatNormalNotStarted, "!p", CultureInfo.InvariantCulture),
absoluteIndex: 36, lineIndex: 0, columnIndex: 36), absoluteIndex: 38, lineIndex: 0, columnIndex: 38, length: 2),
} }
}, },
}; };
@ -2985,10 +2999,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
errorMatchingBrace, errorMatchingBrace,
absoluteIndex: 1, lineIndex: 0, columnIndex: 1), absoluteIndex: 1, lineIndex: 0, columnIndex: 1, length: 1),
new RazorError( new RazorError(
string.Format(errorFormatNormalUnclosed, "!p"), string.Format(errorFormatNormalUnclosed, "!p"),
absoluteIndex: 2, lineIndex: 0, columnIndex: 2) absoluteIndex: 3, lineIndex: 0, columnIndex: 3, length: 2)
} }
}, },
{ {
@ -3174,7 +3188,7 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{ {
new RazorError( new RazorError(
string.Format(errorFormatUnclosed, "p", CultureInfo.InvariantCulture), string.Format(errorFormatUnclosed, "p", CultureInfo.InvariantCulture),
absoluteIndex: 4, lineIndex: 0, columnIndex: 4) absoluteIndex: 6, lineIndex: 0, columnIndex: 6, length: 1)
} }
}, },
{ {
@ -3183,8 +3197,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
new MarkupTagHelperBlock("p", blockFactory.EscapedMarkupTagBlock("</", "p>"))), new MarkupTagHelperBlock("p", blockFactory.EscapedMarkupTagBlock("</", "p>"))),
new [] new []
{ {
new RazorError(string.Format(errorFormatUnclosed, "p", CultureInfo.InvariantCulture), new RazorError(
SourceLocation.Zero) string.Format(errorFormatUnclosed, "p", CultureInfo.InvariantCulture),
new SourceLocation(1, 0, 1),
length: 1)
} }
}, },
{ {
@ -3203,8 +3219,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
blockFactory.EscapedMarkupTagBlock("</", "p>"))), blockFactory.EscapedMarkupTagBlock("</", "p>"))),
new [] new []
{ {
new RazorError(string.Format(errorFormatUnclosed, "p", CultureInfo.InvariantCulture), new RazorError(
SourceLocation.Zero) string.Format(errorFormatUnclosed, "p", CultureInfo.InvariantCulture),
new SourceLocation(1, 0, 1),
length: 1)
} }
}, },
{ {
@ -3215,8 +3233,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
blockFactory.MarkupTagBlock("</p>")), blockFactory.MarkupTagBlock("</p>")),
new [] new []
{ {
new RazorError(string.Format(errorFormatUnclosed, "p", CultureInfo.InvariantCulture), new RazorError(
absoluteIndex: 9, lineIndex: 0, columnIndex: 9) string.Format(errorFormatUnclosed, "p", CultureInfo.InvariantCulture),
new SourceLocation(11, 0, 11),
length: 1)
} }
}, },
{ {
@ -3244,8 +3264,10 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
blockFactory.EscapedMarkupTagBlock("</", "p>"))), blockFactory.EscapedMarkupTagBlock("</", "p>"))),
new [] new []
{ {
new RazorError(string.Format(errorFormatUnclosed, "p", CultureInfo.InvariantCulture), new RazorError(
SourceLocation.Zero) string.Format(errorFormatUnclosed, "p", CultureInfo.InvariantCulture),
new SourceLocation(1, 0, 1),
length: 1)
} }
}, },
}; };