Skip to content
This repository was archived by the owner on Dec 19, 2018. It is now read-only.

Commit

Permalink
Fix tests to work with new TagBlock parsing format.
Browse files Browse the repository at this point in the history
- These are the fixes to the tests that could not be fixed by altering the core parsing code base.
- Most involve adding TagBlock's, breaking out existing markup blocks and altering some AcceptedCharacter formats.
- Was able to loosen the restrictions on AcceptedCharacter's to allow the body of html tags to accept any character.

#75
  • Loading branch information
NTaylorMullen committed Aug 14, 2014
1 parent 3303648 commit 9eefbaf
Show file tree
Hide file tree
Showing 22 changed files with 1,355 additions and 586 deletions.
17 changes: 16 additions & 1 deletion test/Microsoft.AspNet.Razor.Test/Framework/BlockTypes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -134,12 +134,27 @@ public HelperBlock(IEnumerable<SyntaxTreeNode> children)
}
}

public class MarkupTagBlock : Block
{
private const BlockType ThisBlockType = BlockType.Tag;

public MarkupTagBlock(params SyntaxTreeNode[] children)
: base(ThisBlockType, children, BlockCodeGenerator.Null)
{
}
}

public class MarkupBlock : Block
{
private const BlockType ThisBlockType = BlockType.Markup;

public MarkupBlock(BlockType blockType, IBlockCodeGenerator codeGenerator, IEnumerable<SyntaxTreeNode> children)
: base(blockType, children, codeGenerator)
{
}

public MarkupBlock(IBlockCodeGenerator codeGenerator, IEnumerable<SyntaxTreeNode> children)
: base(ThisBlockType, children, codeGenerator)
: this(ThisBlockType, codeGenerator, children)
{
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -432,7 +432,10 @@ private void OpenedIf(bool withTabs)
tabTest: withTabs ? TabTest.Tabs : TabTest.NoTabs,
spans: new TestSpan[]
{
new TestSpan(SpanKind.Markup, 0, 16),
new TestSpan(SpanKind.Markup, 0, 6),
new TestSpan(SpanKind.Markup, 6, 8),
new TestSpan(SpanKind.Markup, 8, 14),
new TestSpan(SpanKind.Markup, 14, 16),
new TestSpan(SpanKind.Transition, 16, 17),
new TestSpan(SpanKind.Code, 17, 31),
new TestSpan(SpanKind.Markup, 31, 38),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ public void VerifyPaddingForIfSpanWith4Spaces(bool designTime, bool isIndentingW

// no new lines involved
Span spanFlat = GenerateSpan(" @if (true)", SpanKind.Code, 2, "if (true)");
Span spanNewlines = GenerateSpan("\t<div>\r\n @if (true)", SpanKind.Code, 3, "if (true)");
Span spanNewlines = GenerateSpan("\t<div>\r\n @if (true)", SpanKind.Code, 5, "if (true)");

var paddingBuilder = new CSharpPaddingBuilder(host);

Expand Down Expand Up @@ -127,7 +127,7 @@ public void VerifyPaddingForIfSpanWithTwoTabs(bool designTime, bool isIndentingW

// no new lines involved
Span spanFlat = GenerateSpan("\t\t@if (true)", SpanKind.Code, 2, "if (true)");
Span spanNewlines = GenerateSpan("\t<div>\r\n\t\t@if (true)", SpanKind.Code, 3, "if (true)");
Span spanNewlines = GenerateSpan("\t<div>\r\n\t\t@if (true)", SpanKind.Code, 5, "if (true)");

var paddingBuilder = new CSharpPaddingBuilder(host);

Expand Down Expand Up @@ -162,7 +162,7 @@ public void CalculatePaddingForOpenedIf(bool designTime, bool isIndentingWithTab

string text = "\r\n<html>\r\n<body>\r\n\t\t@if (true) { \r\n</body>\r\n</html>";

Span span = GenerateSpan(text, SpanKind.Code, 3, "if (true) { \r\n");
Span span = GenerateSpan(text, SpanKind.Code, 7, "if (true) { \r\n");

var paddingBuilder = new CSharpPaddingBuilder(host);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,10 +121,10 @@ public void HelperDirectiveAutoCompleteAtStartOfFile()
.AsStatement()
.With(new AutoCompleteEditHandler(CSharpLanguageCharacteristics.Instance.TokenizeString) { AutoCompleteString = "}" }),
new MarkupBlock(
Factory.Markup(@"<p></p>")
.With(new MarkupCodeGenerator())
.Accepts(AcceptedCharacters.None)
),
new MarkupTagBlock(
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
new MarkupTagBlock(
Factory.Markup("</p>").Accepts(AcceptedCharacters.None))),
Factory.Span(SpanKind.Code, new CSharpSymbol(Factory.LocationTracker.CurrentLocation, String.Empty, CSharpSymbolType.Unknown))
.With(new StatementCodeGenerator())
)
Expand All @@ -144,7 +144,12 @@ public void SectionDirectiveAutoCompleteAtStartOfFile()
.AutoCompleteWith("}", atEndOfSpan: true)
.Accepts(AcceptedCharacters.Any),
new MarkupBlock(
Factory.Markup("\r\n<p>Foo</p>"))),
Factory.Markup("\r\n"),
new MarkupTagBlock(
Factory.Markup("<p>")),
Factory.Markup("Foo"),
new MarkupTagBlock(
Factory.Markup("</p>")))),
new RazorError(RazorResources.FormatParseError_Expected_X("}"),
29, 1, 10));
}
Expand All @@ -161,10 +166,10 @@ public void VerbatimBlockAutoCompleteAtStartOfFile()
.AsStatement()
.With(new AutoCompleteEditHandler(CSharpLanguageCharacteristics.Instance.TokenizeString) { AutoCompleteString = "}" }),
new MarkupBlock(
Factory.Markup(@"<p></p>")
.With(new MarkupCodeGenerator())
.Accepts(AcceptedCharacters.None)
),
new MarkupTagBlock(
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
new MarkupTagBlock(
Factory.Markup("</p>").Accepts(AcceptedCharacters.None))),
Factory.Span(SpanKind.Code, new CSharpSymbol(Factory.LocationTracker.CurrentLocation, String.Empty, CSharpSymbolType.Unknown))
.With(new StatementCodeGenerator())
),
Expand Down
124 changes: 99 additions & 25 deletions test/Microsoft.AspNet.Razor.Test/Parser/CSharp/CSharpBlockTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,13 @@ public void ParseBlockCorrectlyParsesMarkupInDoWhileBlock()
Factory.CodeTransition(),
Factory.Code("do { var foo = bar;").AsStatement(),
new MarkupBlock(
Factory.Markup(" <p>Foo</p> ").Accepts(AcceptedCharacters.None)
Factory.Markup(" "),
new MarkupTagBlock(
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
Factory.Markup("Foo"),
new MarkupTagBlock(
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
Factory.Markup(" ").Accepts(AcceptedCharacters.None)
),
Factory.Code("foo++; } while (foo<bar>);").AsStatement().Accepts(AcceptedCharacters.None)
));
Expand Down Expand Up @@ -478,7 +484,18 @@ public void ParseBlockSupportsTryStatementWithNoAdditionalClauses()
[Fact]
public void ParseBlockSupportsMarkupWithinTryClause()
{
RunSimpleWrappedMarkupTest("try {", " <p>Foo</p> ", "}");
RunSimpleWrappedMarkupTest(
prefix: "try {",
markup: " <p>Foo</p> ",
suffix: "}",
expectedMarkup: new MarkupBlock(
Factory.Markup(" "),
new MarkupTagBlock(
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
Factory.Markup("Foo"),
new MarkupTagBlock(
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
Factory.Markup(" ").Accepts(AcceptedCharacters.None)));
}

[Fact]
Expand All @@ -490,7 +507,18 @@ public void ParseBlockSupportsTryStatementWithOneCatchClause()
[Fact]
public void ParseBlockSupportsMarkupWithinCatchClause()
{
RunSimpleWrappedMarkupTest("try { var foo = new { } } catch(Foo Bar Baz) {", " <p>Foo</p> ", "}");
RunSimpleWrappedMarkupTest(
prefix: "try { var foo = new { } } catch(Foo Bar Baz) {",
markup: " <p>Foo</p> ",
suffix: "}",
expectedMarkup: new MarkupBlock(
Factory.Markup(" "),
new MarkupTagBlock(
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
Factory.Markup("Foo"),
new MarkupTagBlock(
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
Factory.Markup(" ").Accepts(AcceptedCharacters.None)));
}

[Fact]
Expand All @@ -508,7 +536,18 @@ public void ParseBlockSupportsExceptionLessCatchClauses()
[Fact]
public void ParseBlockSupportsMarkupWithinAdditionalCatchClauses()
{
RunSimpleWrappedMarkupTest("try { var foo = new { } } catch(Foo Bar Baz) { var foo = new { } } catch(Foo Bar Baz) { var foo = new { } } catch(Foo Bar Baz) {", " <p>Foo</p> ", "}");
RunSimpleWrappedMarkupTest(
prefix: "try { var foo = new { } } catch(Foo Bar Baz) { var foo = new { } } catch(Foo Bar Baz) { var foo = new { } } catch(Foo Bar Baz) {",
markup: " <p>Foo</p> ",
suffix: "}",
expectedMarkup: new MarkupBlock(
Factory.Markup(" "),
new MarkupTagBlock(
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
Factory.Markup("Foo"),
new MarkupTagBlock(
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
Factory.Markup(" ").Accepts(AcceptedCharacters.None)));
}

[Fact]
Expand All @@ -520,7 +559,19 @@ public void ParseBlockSupportsTryStatementWithFinallyClause()
[Fact]
public void ParseBlockSupportsMarkupWithinFinallyClause()
{
RunSimpleWrappedMarkupTest("try { var foo = new { } } finally {", " <p>Foo</p> ", "}", acceptedCharacters: AcceptedCharacters.None);
RunSimpleWrappedMarkupTest(
prefix: "try { var foo = new { } } finally {",
markup: " <p>Foo</p> ",
suffix: "}",
expectedMarkup: new MarkupBlock(
Factory.Markup(" "),
new MarkupTagBlock(
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
Factory.Markup("Foo"),
new MarkupTagBlock(
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
Factory.Markup(" ").Accepts(AcceptedCharacters.None)),
acceptedCharacters: AcceptedCharacters.None);
}

[Fact]
Expand Down Expand Up @@ -638,38 +689,63 @@ public void ParsersCanNestRecursively()
new StatementBlock(
Factory.Code("foreach(var c in db.Categories) {\r\n").AsStatement(),
new MarkupBlock(
Factory.Markup(" <div>\r\n <h1>"),
Factory.Markup(" "),
new MarkupTagBlock(
Factory.Markup("<div>").Accepts(AcceptedCharacters.None)),
Factory.Markup("\r\n "),
new MarkupTagBlock(
Factory.Markup("<h1>").Accepts(AcceptedCharacters.None)),
Factory.EmptyHtml(),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("c.Name")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharacters.NonWhiteSpace)),
Factory.Markup("</h1>\r\n <ul>\r\n"),
new MarkupTagBlock(
Factory.Markup("</h1>").Accepts(AcceptedCharacters.None)),
Factory.Markup("\r\n "),
new MarkupTagBlock(
Factory.Markup("<ul>").Accepts(AcceptedCharacters.None)),
Factory.Markup("\r\n"),
new StatementBlock(
Factory.Code(@" ").AsStatement(),
Factory.CodeTransition(),
Factory.Code("foreach(var p in c.Products) {\r\n").AsStatement(),
new MarkupBlock(
Factory.Markup(" <li><a"),
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href=\"", 193, 5, 30), new LocationTagged<string>("\"", 256, 5, 93)),
Factory.Markup(" href=\"").With(SpanCodeGenerator.Null),
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(String.Empty, 200, 5, 37), 200, 5, 37),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("Html.ActionUrl(\"Products\", \"Detail\", new { id = p.Id })")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharacters.NonWhiteSpace))),
Factory.Markup("\"").With(SpanCodeGenerator.Null)),
Factory.Markup(">"),
Factory.Markup(" "),
new MarkupTagBlock(
Factory.Markup("<li>").Accepts(AcceptedCharacters.None)),
new MarkupTagBlock(
Factory.Markup("<a"),
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href=\"", 193, 5, 30), new LocationTagged<string>("\"", 256, 5, 93)),
Factory.Markup(" href=\"").With(SpanCodeGenerator.Null),
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(String.Empty, 200, 5, 37), 200, 5, 37),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("Html.ActionUrl(\"Products\", \"Detail\", new { id = p.Id })")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharacters.NonWhiteSpace))),
Factory.Markup("\"").With(SpanCodeGenerator.Null)),
Factory.Markup(">").Accepts(AcceptedCharacters.None)),
Factory.EmptyHtml(),
new ExpressionBlock(
Factory.CodeTransition(),
Factory.Code("p.Name")
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
.Accepts(AcceptedCharacters.NonWhiteSpace)),
Factory.Markup("</a></li>\r\n").Accepts(AcceptedCharacters.None)),
new MarkupTagBlock(
Factory.Markup("</a>").Accepts(AcceptedCharacters.None)),
new MarkupTagBlock(
Factory.Markup("</li>").Accepts(AcceptedCharacters.None)),
Factory.Markup("\r\n").Accepts(AcceptedCharacters.None)),
Factory.Code(" }\r\n").AsStatement().Accepts(AcceptedCharacters.None)),
Factory.Markup(" </ul>\r\n </div>\r\n")
.Accepts(AcceptedCharacters.None)),
Factory.Markup(" "),
new MarkupTagBlock(
Factory.Markup("</ul>").Accepts(AcceptedCharacters.None)),
Factory.Markup("\r\n "),
new MarkupTagBlock(
Factory.Markup("</div>").Accepts(AcceptedCharacters.None)),
Factory.Markup("\r\n").Accepts(AcceptedCharacters.None)),
Factory.Code(" }").AsStatement().Accepts(AcceptedCharacters.None)));
}

Expand All @@ -696,14 +772,12 @@ private void RunRazorCommentBetweenClausesTest(string preComment, string postCom
Factory.Code(postComment).AsStatement().Accepts(acceptedCharacters)));
}

private void RunSimpleWrappedMarkupTest(string prefix, string markup, string suffix, AcceptedCharacters acceptedCharacters = AcceptedCharacters.Any)
private void RunSimpleWrappedMarkupTest(string prefix, string markup, string suffix, MarkupBlock expectedMarkup, AcceptedCharacters acceptedCharacters = AcceptedCharacters.Any)
{
ParseBlockTest(prefix + markup + suffix,
new StatementBlock(
Factory.Code(prefix).AsStatement(),
new MarkupBlock(
Factory.Markup(markup).Accepts(AcceptedCharacters.None)
),
expectedMarkup,
Factory.Code(suffix).AsStatement().Accepts(acceptedCharacters)
));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,13 @@ public void SectionDirective()
.AutoCompleteWith(null, atEndOfSpan: true)
.Accepts(AcceptedCharacters.Any),
new MarkupBlock(
Factory.Markup(" <p>F", "{", "o", "}", "o", "</p> ")),
Factory.Markup(" "),
new MarkupTagBlock(
Factory.Markup("<p>")),
Factory.Markup("F", "{", "o", "}", "o"),
new MarkupTagBlock(
Factory.Markup("</p>")),
Factory.Markup(" ")),
Factory.MetaCode("}")
.Accepts(AcceptedCharacters.None)));
}
Expand Down
Loading

0 comments on commit 9eefbaf

Please sign in to comment.