Merge branch 'release' into dev

This commit is contained in:
Ajay Bhargav Baaskaran 2015-09-30 14:55:29 -07:00
commit ef799223de
5 changed files with 73 additions and 21 deletions

View File

@ -215,34 +215,29 @@ namespace Microsoft.AspNet.Razor.Parser.TagHelpers.Internal
// The coming symbols will either be a quote or value (in the case that the value is unquoted).
// TODO: Handle malformed tags, if there's an '=' then there MUST be a value.
// https://github.com/aspnet/Razor/issues/104
SourceLocation symbolStartLocation;
// Skip the whitespace preceding the start of the attribute value.
var valueStartIndex = i + 1; // Start from the symbol after '='.
while (valueStartIndex < htmlSymbols.Length &&
(htmlSymbols[valueStartIndex].Type == HtmlSymbolType.WhiteSpace ||
htmlSymbols[valueStartIndex].Type == HtmlSymbolType.NewLine))
do
{
valueStartIndex++;
}
i++; // Start from the symbol after '='.
} while (i < htmlSymbols.Length &&
(htmlSymbols[i].Type == HtmlSymbolType.WhiteSpace ||
htmlSymbols[i].Type == HtmlSymbolType.NewLine));
// Check for attribute start values, aka single or double quote
if (valueStartIndex < htmlSymbols.Length && IsQuote(htmlSymbols[valueStartIndex]))
if (i < htmlSymbols.Length && IsQuote(htmlSymbols[i]))
{
// Move past the attribute start so we can accept the true value.
valueStartIndex++;
symbolStartLocation = htmlSymbols[valueStartIndex].Start;
symbolStartLocation = htmlSymbols[i].Start;
// If there's a start quote then there must be an end quote to be valid, skip it.
symbolOffset = 1;
i = valueStartIndex - 1;
}
else
{
// We are at the symbol after equals. Go back to equals to ensure we don't skip past that symbol.
i--;
symbolStartLocation = symbol.Start;
}

View File

@ -920,9 +920,9 @@ namespace Microsoft.AspNet.Razor.Test.Generator
characterOffsetIndex: 14,
contentLength: 11),
BuildLineMapping(
documentAbsoluteIndex: 63,
documentAbsoluteIndex: 62,
documentLineIndex: 3,
documentCharacterOffsetIndex: 27,
documentCharacterOffsetIndex: 26,
generatedAbsoluteIndex: 1289,
generatedLineIndex: 39,
generatedCharacterOffsetIndex: 28,
@ -935,9 +935,9 @@ namespace Microsoft.AspNet.Razor.Test.Generator
characterOffsetIndex: 30,
contentLength: 0),
BuildLineMapping(
documentAbsoluteIndex: 89,
documentAbsoluteIndex: 88,
documentLineIndex: 4,
documentCharacterOffsetIndex: 13,
documentCharacterOffsetIndex: 12,
generatedAbsoluteIndex: 1789,
generatedLineIndex: 54,
generatedCharacterOffsetIndex: 19,
@ -1650,6 +1650,7 @@ namespace Microsoft.AspNet.Razor.Test.Generator
// Note: The baseline resource name is equivalent to the test resource name.
return new TheoryData<string, string, IEnumerable<TagHelperDescriptor>>
{
{ "IncompleteTagHelper", null, DefaultPAndInputTagHelperDescriptors },
{ "SingleTagHelper", null, DefaultPAndInputTagHelperDescriptors },
{ "SingleTagHelperWithNewlineBeforeAttributes", null, DefaultPAndInputTagHelperDescriptors },
{ "TagHelpersWithWeirdlySpacedAttributes", null, DefaultPAndInputTagHelperDescriptors },

View File

@ -377,12 +377,21 @@ namespace Microsoft.AspNet.Razor.TagHelpers
return new TheoryData<string, MarkupBlock, RazorError[]>
{
{
"<p =\"false\"\" ></p>",
"<p class='",
new MarkupBlock(
new MarkupTagHelperBlock("p",
new List<KeyValuePair<string, SyntaxTreeNode>>())),
new List<KeyValuePair<string, SyntaxTreeNode>>
{
new KeyValuePair<string, SyntaxTreeNode>(
"class",
factory.Markup(string.Empty).With(SpanChunkGenerator.Null))
})),
new []
{
new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatNoCloseAngle, "p"),
new SourceLocation(1, 0, 1),
length: 1),
new RazorError(
string.Format(CultureInfo.InvariantCulture, errorFormatUnclosed, "p"),
new SourceLocation(1, 0, 1),

View File

@ -0,0 +1,44 @@
#pragma checksum "IncompleteTagHelper.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "dba409dce3afe321d920e4e62a5701c09d7bbea8"
namespace TestOutput
{
using Microsoft.AspNet.Razor.Runtime.TagHelpers;
using System;
using System.Threading.Tasks;
public class IncompleteTagHelper
{
#line hidden
#pragma warning disable 0414
private TagHelperContent __tagHelperStringValueBuffer = null;
#pragma warning restore 0414
private TagHelperExecutionContext __tagHelperExecutionContext = null;
private TagHelperRunner __tagHelperRunner = null;
private TagHelperScopeManager __tagHelperScopeManager = new TagHelperScopeManager();
private PTagHelper __PTagHelper = null;
#line hidden
public IncompleteTagHelper()
{
}
#pragma warning disable 1998
public override async Task ExecuteAsync()
{
__tagHelperRunner = __tagHelperRunner ?? new TagHelperRunner();
Instrumentation.BeginContext(33, 2, true);
WriteLiteral("\r\n");
Instrumentation.EndContext();
__tagHelperExecutionContext = __tagHelperScopeManager.Begin("p", TagMode.StartTagAndEndTag, "test", async() => {
}
, StartTagHelperWritingScope, EndTagHelperWritingScope);
__PTagHelper = CreateTagHelper<PTagHelper>();
__tagHelperExecutionContext.Add(__PTagHelper);
__tagHelperExecutionContext.AddHtmlAttribute("class", Html.Raw(""));
__tagHelperExecutionContext.Output = await __tagHelperRunner.RunAsync(__tagHelperExecutionContext);
Instrumentation.BeginContext(35, 10, false);
await WriteTagHelperAsync(__tagHelperExecutionContext);
Instrumentation.EndContext();
__tagHelperExecutionContext = __tagHelperScopeManager.End();
}
#pragma warning restore 1998
}
}

View File

@ -0,0 +1,3 @@
@addTagHelper "something, nice"
<p class="