Fix test to work with TH rewriters.

- Added understanding to the ParserTestBase for TagHelperBlock's
- Added a helper class MarkupTagHelperBlock to make building test TagHelpers easier.
- Fixed some existing tests that "new"d up the RazorParser and didn't obide by the new contract (to provide optimizers).

#71
This commit is contained in:
N. Taylor Mullen 2014-09-11 11:04:18 -07:00
parent 3cba84104d
commit bb3ad0ede4
3 changed files with 82 additions and 20 deletions

View File

@ -2,8 +2,10 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNet.Razor.Generator;
using Microsoft.AspNet.Razor.Parser.SyntaxTree;
using Microsoft.AspNet.Razor.Parser.TagHelpers;
namespace Microsoft.AspNet.Razor.Test.Framework
{
@ -174,6 +176,33 @@ namespace Microsoft.AspNet.Razor.Test.Framework
}
}
public class MarkupTagHelperBlock : TagHelperBlock
{
public MarkupTagHelperBlock(string tagName)
: this(tagName, new Dictionary<string, SyntaxTreeNode>())
{
}
public MarkupTagHelperBlock(string tagName,
IDictionary<string, SyntaxTreeNode> attributes)
: this(tagName, attributes, new SyntaxTreeNode[0])
{
}
public MarkupTagHelperBlock(string tagName,
params SyntaxTreeNode[] children)
: this(tagName, new Dictionary<string, SyntaxTreeNode>(), children)
{
}
public MarkupTagHelperBlock(string tagName,
IDictionary<string, SyntaxTreeNode> attributes,
params SyntaxTreeNode[] children)
: base(new TagHelperBlockBuilder(tagName, attributes, children))
{
}
}
public class SectionBlock : Block
{
private const BlockType ThisBlockType = BlockType.Section;

View File

@ -11,6 +11,7 @@ using System.Text;
using Microsoft.AspNet.Razor.Generator;
using Microsoft.AspNet.Razor.Parser;
using Microsoft.AspNet.Razor.Parser.SyntaxTree;
using Microsoft.AspNet.Razor.Parser.TagHelpers;
using Microsoft.AspNet.Razor.Text;
using Xunit;
@ -291,6 +292,22 @@ namespace Microsoft.AspNet.Razor.Test.Framework
}
}
private static void EvaluateTagHelperAttribute(ErrorCollector collector,
KeyValuePair<string, SyntaxTreeNode> actual,
KeyValuePair<string, SyntaxTreeNode> expected)
{
if (actual.Key != expected.Key)
{
collector.AddError("{0} - FAILED :: Attribute names do not match", expected.Key);
}
else
{
collector.AddMessage("{0} - PASSED :: Attribute names match", expected.Key);
}
EvaluateSyntaxTreeNode(collector, actual.Value, expected.Value);
}
private static void EvaluateSpan(ErrorCollector collector, Span actual, Span expected)
{
if (!Equals(expected, actual))
@ -311,11 +328,16 @@ namespace Microsoft.AspNet.Razor.Test.Framework
}
else
{
if (actual is TagHelperBlock)
{
EvaluateTagHelperBlock(collector, actual as TagHelperBlock, expected as TagHelperBlock);
}
AddPassedMessage(collector, expected);
using (collector.Indent())
{
IEnumerator<SyntaxTreeNode> expectedNodes = expected.Children.GetEnumerator();
IEnumerator<SyntaxTreeNode> actualNodes = actual.Children.GetEnumerator();
var expectedNodes = expected.Children.GetEnumerator();
var actualNodes = actual.Children.GetEnumerator();
while (expectedNodes.MoveNext())
{
if (!actualNodes.MoveNext())
@ -335,6 +357,35 @@ namespace Microsoft.AspNet.Razor.Test.Framework
}
}
private static void EvaluateTagHelperBlock(ErrorCollector collector, TagHelperBlock actual, TagHelperBlock expected)
{
if (expected == null)
{
AddMismatchError(collector, actual, expected);
}
else
{
var expectedAttributes = expected.Attributes.GetEnumerator();
var actualAttributes = actual.Attributes.GetEnumerator();
while (expectedAttributes.MoveNext())
{
if (!actualAttributes.MoveNext())
{
collector.AddError("{0} - FAILED :: No more attributes on this node", expectedAttributes.Current);
}
else
{
EvaluateTagHelperAttribute(collector, actualAttributes.Current, expectedAttributes.Current);
}
}
while (actualAttributes.MoveNext())
{
collector.AddError("End of Attributes - FAILED :: Found Attribute: {0}", actualAttributes.Current.Key);
}
}
}
private static void AddPassedMessage(ErrorCollector collector, SyntaxTreeNode expected)
{
collector.AddMessage("{0} - PASSED", expected);

View File

@ -28,24 +28,6 @@ namespace Microsoft.AspNet.Razor.Test.Parser
Assert.Same(block, span.Parent);
}
[Fact]
public void ConstructorCopiesBasicValuesFromBlockBuilder()
{
// Arrange
BlockBuilder builder = new BlockBuilder()
{
Name = "Foo",
Type = BlockType.Helper
};
// Act
Block actual = builder.Build();
// Assert
Assert.Equal("Foo", actual.Name);
Assert.Equal(BlockType.Helper, actual.Type);
}
[Fact]
public void ConstructorTransfersInstanceOfCodeGeneratorFromBlockBuilder()
{