Fix tests to work with new TagBlock parsing format.
- 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
This commit is contained in:
parent
6114d5d269
commit
acefdf5f2e
|
|
@ -0,0 +1,30 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using Microsoft.AspNet.Razor.Parser.SyntaxTree;
|
||||
|
||||
namespace Microsoft.AspNet.Razor.Test.Framework
|
||||
{
|
||||
public class BlockFactory
|
||||
{
|
||||
private SpanFactory _factory;
|
||||
|
||||
public BlockFactory(SpanFactory factory)
|
||||
{
|
||||
_factory = factory;
|
||||
}
|
||||
|
||||
public Block MarkupTagBlock(string content)
|
||||
{
|
||||
return MarkupTagBlock(content, AcceptedCharacters.Any);
|
||||
}
|
||||
|
||||
public Block MarkupTagBlock(string content, AcceptedCharacters acceptedCharacters)
|
||||
{
|
||||
return new MarkupTagBlock(
|
||||
_factory.Markup(content).Accepts(acceptedCharacters)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -134,12 +134,27 @@ namespace Microsoft.AspNet.Razor.Test.Framework
|
|||
}
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,11 @@ namespace Microsoft.AspNet.Razor.Test.Framework
|
|||
get { return CSharpCodeParser.DefaultKeywords; }
|
||||
}
|
||||
|
||||
protected override BlockFactory CreateBlockFactory()
|
||||
{
|
||||
return new BlockFactory(Factory ?? CreateSpanFactory());
|
||||
}
|
||||
|
||||
protected override SpanFactory CreateSpanFactory()
|
||||
{
|
||||
return SpanFactory.CreateCsHtml();
|
||||
|
|
|
|||
|
|
@ -13,6 +13,11 @@ namespace Microsoft.AspNet.Razor.Test.Framework
|
|||
get { return CSharpCodeParser.DefaultKeywords; }
|
||||
}
|
||||
|
||||
protected override BlockFactory CreateBlockFactory()
|
||||
{
|
||||
return new BlockFactory(Factory ?? CreateSpanFactory());
|
||||
}
|
||||
|
||||
protected override SpanFactory CreateSpanFactory()
|
||||
{
|
||||
return SpanFactory.CreateCsHtml();
|
||||
|
|
|
|||
|
|
@ -21,10 +21,12 @@ namespace Microsoft.AspNet.Razor.Test.Framework
|
|||
protected static Block IgnoreOutput = new IgnoreOutputBlock();
|
||||
|
||||
public SpanFactory Factory { get; private set; }
|
||||
public BlockFactory BlockFactory { get; private set; }
|
||||
|
||||
protected ParserTestBase()
|
||||
{
|
||||
Factory = CreateSpanFactory();
|
||||
BlockFactory = CreateBlockFactory();
|
||||
}
|
||||
|
||||
public abstract ParserBase CreateMarkupParser();
|
||||
|
|
@ -38,6 +40,7 @@ namespace Microsoft.AspNet.Razor.Test.Framework
|
|||
}
|
||||
|
||||
protected abstract SpanFactory CreateSpanFactory();
|
||||
protected abstract BlockFactory CreateBlockFactory();
|
||||
|
||||
protected virtual void ParseBlockTest(string document)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -432,7 +432,10 @@ namespace Microsoft.AspNet.Razor.Test.Generator
|
|||
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),
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
|
@ -17,14 +18,14 @@ namespace Microsoft.AspNet.Razor.Test.Generator
|
|||
public void CalculatePaddingForEmptySpanReturnsZero()
|
||||
{
|
||||
// Arrange
|
||||
RazorEngineHost host = CreateHost(designTime: true);
|
||||
var host = CreateHost(designTime: true);
|
||||
|
||||
Span span = new Span(new SpanBuilder());
|
||||
var span = new Span(new SpanBuilder());
|
||||
|
||||
var paddingBuilder = new CSharpPaddingBuilder(host);
|
||||
|
||||
// Act
|
||||
int padding = paddingBuilder.CalculatePadding(span, 0);
|
||||
var padding = paddingBuilder.CalculatePadding(span, 0);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(0, padding);
|
||||
|
|
@ -35,9 +36,9 @@ namespace Microsoft.AspNet.Razor.Test.Generator
|
|||
public void CalculatePaddingForEmptySpanWith4Spaces(bool designTime, bool isIndentingWithTabs, int tabSize)
|
||||
{
|
||||
// Arrange
|
||||
RazorEngineHost host = CreateHost(designTime, isIndentingWithTabs, tabSize);
|
||||
var host = CreateHost(designTime, isIndentingWithTabs, tabSize);
|
||||
|
||||
Span span = GenerateSpan(@" @{", SpanKind.Code, 3, "");
|
||||
var span = GenerateSpan(@" @{", SpanKind.Code, 3, "");
|
||||
|
||||
var paddingBuilder = new CSharpPaddingBuilder(host);
|
||||
|
||||
|
|
@ -53,14 +54,14 @@ namespace Microsoft.AspNet.Razor.Test.Generator
|
|||
public void CalculatePaddingForIfSpanWith5Spaces(bool designTime, bool isIndentingWithTabs, int tabSize)
|
||||
{
|
||||
// Arrange
|
||||
RazorEngineHost host = CreateHost(designTime, isIndentingWithTabs, tabSize);
|
||||
var host = CreateHost(designTime, isIndentingWithTabs, tabSize);
|
||||
|
||||
Span span = GenerateSpan(@" @if (true)", SpanKind.Code, 2, "if (true)");
|
||||
var span = GenerateSpan(@" @if (true)", SpanKind.Code, 2, "if (true)");
|
||||
|
||||
var paddingBuilder = new CSharpPaddingBuilder(host);
|
||||
|
||||
// Act
|
||||
int padding = paddingBuilder.CalculatePadding(span, 1);
|
||||
var padding = paddingBuilder.CalculatePadding(span, 1);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(4, padding);
|
||||
|
|
@ -85,22 +86,20 @@ namespace Microsoft.AspNet.Razor.Test.Generator
|
|||
public void VerifyPaddingForIfSpanWith4Spaces(bool designTime, bool isIndentingWithTabs, int tabSize, int numTabs, int numSpaces)
|
||||
{
|
||||
// Arrange
|
||||
RazorEngineHost host = CreateHost(designTime, isIndentingWithTabs, tabSize);
|
||||
var host = CreateHost(designTime, isIndentingWithTabs, tabSize);
|
||||
|
||||
// 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)");
|
||||
var spanFlat = GenerateSpan(" @if (true)", SpanKind.Code, 2, "if (true)");
|
||||
var spanNewlines = GenerateSpan("\t<div>" + Environment.NewLine + " @if (true)", SpanKind.Code, 5, "if (true)");
|
||||
|
||||
var paddingBuilder = new CSharpPaddingBuilder(host);
|
||||
|
||||
// Act
|
||||
string paddingFlat = paddingBuilder.BuildStatementPadding(spanFlat);
|
||||
|
||||
|
||||
string paddingNewlines = paddingBuilder.BuildStatementPadding(spanNewlines);
|
||||
var paddingFlat = paddingBuilder.BuildStatementPadding(spanFlat);
|
||||
var paddingNewlines = paddingBuilder.BuildStatementPadding(spanNewlines);
|
||||
|
||||
// Assert
|
||||
string code = " if (true)";
|
||||
var code = " if (true)";
|
||||
VerifyPadded(numTabs, numSpaces, code, paddingFlat);
|
||||
VerifyPadded(numTabs, numSpaces, code, paddingNewlines);
|
||||
}
|
||||
|
|
@ -123,20 +122,20 @@ namespace Microsoft.AspNet.Razor.Test.Generator
|
|||
public void VerifyPaddingForIfSpanWithTwoTabs(bool designTime, bool isIndentingWithTabs, int tabSize, int numTabs, int numSpaces)
|
||||
{
|
||||
// Arrange
|
||||
RazorEngineHost host = CreateHost(designTime, isIndentingWithTabs, tabSize);
|
||||
var host = CreateHost(designTime, isIndentingWithTabs, tabSize);
|
||||
|
||||
// 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)");
|
||||
var spanFlat = GenerateSpan("\t\t@if (true)", SpanKind.Code, 2, "if (true)");
|
||||
var spanNewlines = GenerateSpan("\t<div>" + Environment.NewLine + "\t\t@if (true)", SpanKind.Code, 5, "if (true)");
|
||||
|
||||
var paddingBuilder = new CSharpPaddingBuilder(host);
|
||||
|
||||
// Act
|
||||
string paddingFlat = paddingBuilder.BuildStatementPadding(spanFlat);
|
||||
string paddingNewlines = paddingBuilder.BuildStatementPadding(spanNewlines);
|
||||
var paddingFlat = paddingBuilder.BuildStatementPadding(spanFlat);
|
||||
var paddingNewlines = paddingBuilder.BuildStatementPadding(spanNewlines);
|
||||
|
||||
// Assert
|
||||
string code = " if (true)";
|
||||
var code = " if (true)";
|
||||
VerifyPadded(numTabs, numSpaces, code, paddingFlat);
|
||||
VerifyPadded(numTabs, numSpaces, code, paddingNewlines);
|
||||
}
|
||||
|
|
@ -158,27 +157,26 @@ namespace Microsoft.AspNet.Razor.Test.Generator
|
|||
public void CalculatePaddingForOpenedIf(bool designTime, bool isIndentingWithTabs, int tabSize, int numTabs, int numSpaces)
|
||||
{
|
||||
// Arrange
|
||||
RazorEngineHost host = CreateHost(designTime, isIndentingWithTabs, tabSize);
|
||||
var host = CreateHost(designTime, isIndentingWithTabs, tabSize);
|
||||
|
||||
string text = "\r\n<html>\r\n<body>\r\n\t\t@if (true) { \r\n</body>\r\n</html>";
|
||||
var text = string.Format("{0}<html>{0}<body>{0}\t\t@if (true) {{ {0}</body>{0}</html>", Environment.NewLine);
|
||||
|
||||
Span span = GenerateSpan(text, SpanKind.Code, 3, "if (true) { \r\n");
|
||||
var code = "if (true) { " + Environment.NewLine;
|
||||
var span = GenerateSpan(text, SpanKind.Code, 7, code);
|
||||
|
||||
var paddingBuilder = new CSharpPaddingBuilder(host);
|
||||
|
||||
// Act
|
||||
string padding = paddingBuilder.BuildStatementPadding(span);
|
||||
var padding = paddingBuilder.BuildStatementPadding(span);
|
||||
|
||||
// Assert
|
||||
string code = " if (true) { \r\n";
|
||||
|
||||
VerifyPadded(numTabs, numSpaces, code, padding);
|
||||
}
|
||||
|
||||
private static void VerifyPadded(int numTabs, int numSpaces, string code, string padding)
|
||||
{
|
||||
string padded = padding + code;
|
||||
string expectedPadding = new string('\t', numTabs) + new string(' ', numSpaces);
|
||||
var padded = padding + code;
|
||||
var expectedPadding = new string('\t', numTabs) + new string(' ', numSpaces);
|
||||
|
||||
Assert.Equal(expectedPadding, padding);
|
||||
Assert.Equal(numTabs + numSpaces + code.Length, padded.Length);
|
||||
|
|
@ -214,7 +212,7 @@ namespace Microsoft.AspNet.Razor.Test.Generator
|
|||
|
||||
private static Span GenerateSpan(string text, SpanKind spanKind, int spanIndex, string spanText)
|
||||
{
|
||||
Span[] spans = GenerateSpans(text, spanKind, spanIndex, spanText);
|
||||
var spans = GenerateSpans(text, spanKind, spanIndex, spanText);
|
||||
|
||||
return spans[spanIndex];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -121,10 +121,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
.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())
|
||||
)
|
||||
|
|
@ -144,7 +144,12 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
.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));
|
||||
}
|
||||
|
|
@ -161,10 +166,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
.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())
|
||||
),
|
||||
|
|
|
|||
|
|
@ -312,7 +312,11 @@ while(true);", BlockType.Statement, SpanKind.Code, acceptedCharacters: AcceptedC
|
|||
Factory.CodeTransition(),
|
||||
Factory.Code("do { var foo = bar;").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>Foo</p> ").Accepts(AcceptedCharacters.None)
|
||||
Factory.Markup(" "),
|
||||
BlockFactory.MarkupTagBlock("<p>", AcceptedCharacters.None),
|
||||
Factory.Markup("Foo"),
|
||||
BlockFactory.MarkupTagBlock("</p>", AcceptedCharacters.None),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
Factory.Code("foo++; } while (foo<bar>);").AsStatement().Accepts(AcceptedCharacters.None)
|
||||
));
|
||||
|
|
@ -478,7 +482,16 @@ catch(bar) { baz(); }", BlockType.Statement, SpanKind.Code);
|
|||
[Fact]
|
||||
public void ParseBlockSupportsMarkupWithinTryClause()
|
||||
{
|
||||
RunSimpleWrappedMarkupTest("try {", " <p>Foo</p> ", "}");
|
||||
RunSimpleWrappedMarkupTest(
|
||||
prefix: "try {",
|
||||
markup: " <p>Foo</p> ",
|
||||
suffix: "}",
|
||||
expectedMarkup: new MarkupBlock(
|
||||
Factory.Markup(" "),
|
||||
BlockFactory.MarkupTagBlock("<p>", AcceptedCharacters.None),
|
||||
Factory.Markup("Foo"),
|
||||
BlockFactory.MarkupTagBlock("</p>", AcceptedCharacters.None),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -490,7 +503,16 @@ catch(bar) { baz(); }", BlockType.Statement, SpanKind.Code);
|
|||
[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(" "),
|
||||
BlockFactory.MarkupTagBlock("<p>", AcceptedCharacters.None),
|
||||
Factory.Markup("Foo"),
|
||||
BlockFactory.MarkupTagBlock("</p>", AcceptedCharacters.None),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -508,7 +530,16 @@ catch(bar) { baz(); }", BlockType.Statement, SpanKind.Code);
|
|||
[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(" "),
|
||||
BlockFactory.MarkupTagBlock("<p>", AcceptedCharacters.None),
|
||||
Factory.Markup("Foo"),
|
||||
BlockFactory.MarkupTagBlock("</p>", AcceptedCharacters.None),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -520,7 +551,17 @@ catch(bar) { baz(); }", BlockType.Statement, SpanKind.Code);
|
|||
[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(" "),
|
||||
BlockFactory.MarkupTagBlock("<p>", AcceptedCharacters.None),
|
||||
Factory.Markup("Foo"),
|
||||
BlockFactory.MarkupTagBlock("</p>", AcceptedCharacters.None),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)),
|
||||
acceptedCharacters: AcceptedCharacters.None);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -638,38 +679,54 @@ catch(bar) { baz(); }", BlockType.Statement, SpanKind.Code);
|
|||
new StatementBlock(
|
||||
Factory.Code("foreach(var c in db.Categories) {\r\n").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <div>\r\n <h1>"),
|
||||
Factory.Markup(" "),
|
||||
BlockFactory.MarkupTagBlock("<div>", AcceptedCharacters.None),
|
||||
Factory.Markup("\r\n "),
|
||||
BlockFactory.MarkupTagBlock("<h1>", 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"),
|
||||
BlockFactory.MarkupTagBlock("</h1>", AcceptedCharacters.None),
|
||||
Factory.Markup("\r\n "),
|
||||
BlockFactory.MarkupTagBlock("<ul>", 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(" "),
|
||||
BlockFactory.MarkupTagBlock("<li>", 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)),
|
||||
BlockFactory.MarkupTagBlock("</a>", AcceptedCharacters.None),
|
||||
BlockFactory.MarkupTagBlock("</li>", 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(" "),
|
||||
BlockFactory.MarkupTagBlock("</ul>", AcceptedCharacters.None),
|
||||
Factory.Markup("\r\n "),
|
||||
BlockFactory.MarkupTagBlock("</div>", AcceptedCharacters.None),
|
||||
Factory.Markup("\r\n").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Code(" }").AsStatement().Accepts(AcceptedCharacters.None)));
|
||||
}
|
||||
|
||||
|
|
@ -696,14 +753,12 @@ catch(bar) { baz(); }", BlockType.Statement, SpanKind.Code);
|
|||
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)
|
||||
));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -136,7 +136,13 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
.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)));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -389,16 +389,21 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
new StatementBlock(
|
||||
Factory.Code("if(foo) ").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<p>Bar</p> ").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
BlockFactory.MarkupTagBlock("<p>", AcceptedCharacters.None),
|
||||
Factory.Markup("Bar"),
|
||||
BlockFactory.MarkupTagBlock("</p>", AcceptedCharacters.None),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Code("else if(bar) ").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<p>Baz</p> ").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
BlockFactory.MarkupTagBlock("<p>", AcceptedCharacters.None),
|
||||
Factory.Markup("Baz"),
|
||||
BlockFactory.MarkupTagBlock("</p>", AcceptedCharacters.None),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Code("else ").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<p>Boz</p>").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
BlockFactory.MarkupTagBlock("<p>", AcceptedCharacters.None),
|
||||
Factory.Markup("Boz"),
|
||||
BlockFactory.MarkupTagBlock("</p>", AcceptedCharacters.None)),
|
||||
Factory.EmptyCSharp().AsStatement()
|
||||
),
|
||||
new RazorError(expectedMessage, 8, 0, 8),
|
||||
|
|
@ -427,8 +432,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
new MarkupBlock(
|
||||
Factory.Markup(" "),
|
||||
Factory.MarkupTransition(),
|
||||
Factory.Markup("<p>Bar</p> ").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
BlockFactory.MarkupTagBlock("<p>", AcceptedCharacters.None),
|
||||
Factory.Markup("Bar"),
|
||||
BlockFactory.MarkupTagBlock("</p>", AcceptedCharacters.None),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Code("}").AsStatement()
|
||||
),
|
||||
new RazorError(
|
||||
|
|
@ -496,8 +503,11 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
new StatementBlock(
|
||||
Factory.Code("if(\r\nelse {").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>Foo</p> ").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
Factory.Markup(" "),
|
||||
BlockFactory.MarkupTagBlock("<p>", AcceptedCharacters.None),
|
||||
Factory.Markup("Foo"),
|
||||
BlockFactory.MarkupTagBlock("</p>", AcceptedCharacters.None),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Code("}").AsStatement().Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
new RazorError(
|
||||
|
|
@ -547,13 +557,15 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
new StatementBlock(
|
||||
Factory.Code("if(foo) {\r\n var foo = \"foo bar baz\r\n ").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<p>Foo is "),
|
||||
BlockFactory.MarkupTagBlock("<p>", AcceptedCharacters.None),
|
||||
Factory.Markup("Foo is "),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("foo")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup("</p>\r\n").Accepts(AcceptedCharacters.None)),
|
||||
BlockFactory.MarkupTagBlock("</p>", AcceptedCharacters.None),
|
||||
Factory.Markup("\r\n").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Code("}").AsStatement()
|
||||
),
|
||||
new RazorError(
|
||||
|
|
@ -581,7 +593,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
Factory.Code("String.Format(")
|
||||
.AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<html></html>").Accepts(AcceptedCharacters.None)),
|
||||
BlockFactory.MarkupTagBlock("<html>", AcceptedCharacters.None),
|
||||
BlockFactory.MarkupTagBlock("</html>", AcceptedCharacters.None)),
|
||||
Factory.EmptyCSharp().AsStatement(),
|
||||
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
|
||||
expectedErrors: new[] {
|
||||
|
|
|
|||
|
|
@ -205,7 +205,12 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
.AsStatement()
|
||||
.AutoCompleteWith("}"),
|
||||
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.EmptyCSharp().AsStatement()))),
|
||||
new RazorError(
|
||||
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("helper", "}", "{"),
|
||||
|
|
@ -227,13 +232,18 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
new StatementBlock(
|
||||
Factory.Code(" \r\n").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>"),
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.EmptyHtml(),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("foo")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup("</p>\r\n").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("\r\n").Accepts(AcceptedCharacters.None)),
|
||||
Factory.EmptyCSharp().AsStatement()),
|
||||
Factory.Code("}").Hidden().Accepts(AcceptedCharacters.None)),
|
||||
Factory.EmptyHtml()));
|
||||
|
|
@ -258,13 +268,18 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
new StatementBlock(
|
||||
Factory.Code(" \r\n").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(@" <p>"),
|
||||
Factory.Markup(@" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.EmptyHtml(),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("foo")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup("</p>\r\n").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("\r\n").Accepts(AcceptedCharacters.None)),
|
||||
Factory.EmptyCSharp().AsStatement()),
|
||||
Factory.Code("}").Hidden().Accepts(AcceptedCharacters.None)),
|
||||
Factory.EmptyHtml()));
|
||||
|
|
|
|||
|
|
@ -92,9 +92,14 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
Factory.Code("while(true) {")
|
||||
.AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>Hello</p> ")
|
||||
.With(new MarkupCodeGenerator())
|
||||
.Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Hello"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
Factory.Code("}")
|
||||
.AsStatement()
|
||||
.Accepts(AcceptedCharacters.None)));
|
||||
|
|
|
|||
|
|
@ -125,8 +125,9 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
Factory.Code("\r\n").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" "),
|
||||
Factory.MarkupTransition("<text").Accepts(AcceptedCharacters.Any),
|
||||
Factory.Markup("\r\n "),
|
||||
new MarkupTagBlock(
|
||||
Factory.MarkupTransition("<text").Accepts(AcceptedCharacters.Any)),
|
||||
Factory.Markup("\r\n ").Accepts(AcceptedCharacters.None),
|
||||
new CommentBlock(
|
||||
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
|
||||
.Accepts(AcceptedCharacters.None),
|
||||
|
|
|
|||
|
|
@ -79,7 +79,13 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
new SectionBlock(new SectionCodeGenerator(string.Empty),
|
||||
Factory.CodeTransition(),
|
||||
Factory.MetaCode("section ")),
|
||||
Factory.Markup("9 { <p>Foo</p> }")),
|
||||
Factory.Markup("9 { "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>")),
|
||||
Factory.Markup("Foo"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>")),
|
||||
Factory.Markup(" }")),
|
||||
new RazorError(
|
||||
RazorResources.FormatParseError_Unexpected_Character_At_Section_Name_Start(RazorResources.FormatErrorComponent_Character("9")),
|
||||
9, 0, 9));
|
||||
|
|
@ -94,7 +100,13 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
new SectionBlock(new SectionCodeGenerator("foo"),
|
||||
Factory.CodeTransition(),
|
||||
Factory.MetaCode("section foo")),
|
||||
Factory.Markup("-bar { <p>Foo</p> }")),
|
||||
Factory.Markup("-bar { "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>")),
|
||||
Factory.Markup("Foo"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>")),
|
||||
Factory.Markup(" }")),
|
||||
new RazorError(RazorResources.ParseError_MissingOpenBraceAfterSection, 12, 0, 12));
|
||||
}
|
||||
|
||||
|
|
@ -115,7 +127,13 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
Factory.MetaCode("section bar {")
|
||||
.AutoCompleteWith(null, atEndOfSpan: true),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>Foo</p> ")),
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>")),
|
||||
Factory.Markup("Foo"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>")),
|
||||
Factory.Markup(" ")),
|
||||
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup(" ")),
|
||||
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
|
||||
|
|
@ -152,8 +170,13 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
Factory.MetaCode("section foo {")
|
||||
.AutoCompleteWith("}", atEndOfSpan: true),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>")),
|
||||
// Need to provide the markup span as fragments, since the parser will split the {} into separate symbols.
|
||||
Factory.Markup(" <p>Foo", "{", "}", "</p>")))),
|
||||
Factory.Markup("Foo", "{", "}"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>"))))),
|
||||
new RazorError(
|
||||
RazorResources.FormatParseError_Expected_X("}"),
|
||||
27, 0, 27));
|
||||
|
|
@ -190,7 +213,13 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
Factory.MetaCode("section foo \r\n\r\n\r\n\r\n\r\n\r\n{")
|
||||
.AutoCompleteWith(null, atEndOfSpan: true),
|
||||
new MarkupBlock(
|
||||
Factory.Markup("\r\n<p>Foo</p>\r\n")),
|
||||
Factory.Markup("\r\n"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>")),
|
||||
Factory.Markup("Foo"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>")),
|
||||
Factory.Markup("\r\n")),
|
||||
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
|
||||
Factory.EmptyHtml()));
|
||||
}
|
||||
|
|
@ -206,7 +235,13 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
Factory.MetaCode("section foo {")
|
||||
.AutoCompleteWith(null, atEndOfSpan: true),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>Foo</p> ")),
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>")),
|
||||
Factory.Markup("Foo"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>")),
|
||||
Factory.Markup(" ")),
|
||||
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
|
||||
Factory.EmptyHtml()));
|
||||
}
|
||||
|
|
@ -222,7 +257,13 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
Factory.MetaCode("section foo{")
|
||||
.AutoCompleteWith(null, atEndOfSpan: true),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>Foo</p> ")),
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>")),
|
||||
Factory.Markup("Foo"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>")),
|
||||
Factory.Markup(" ")),
|
||||
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
|
||||
Factory.EmptyHtml()));
|
||||
}
|
||||
|
|
@ -238,7 +279,13 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
Factory.MetaCode("section foo {")
|
||||
.AutoCompleteWith(null, atEndOfSpan: true),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <script>(function foo() { return 1; })();</script> ")),
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<script>")),
|
||||
Factory.Markup("(function foo() { return 1; })();"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</script>")),
|
||||
Factory.Markup(" ")),
|
||||
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
|
||||
Factory.EmptyHtml()));
|
||||
}
|
||||
|
|
@ -372,7 +419,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
Factory.MetaCode("section s {")
|
||||
.AutoCompleteWith(null, atEndOfSpan: true),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(Environment.NewLine + "<a" + Environment.NewLine + "<!-- > \" '-->")),
|
||||
Factory.Markup(Environment.NewLine),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a" + Environment.NewLine)),
|
||||
Factory.Markup("<!-- > \" '-->")),
|
||||
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
|
||||
Factory.EmptyHtml()));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -189,8 +189,13 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
new StatementBlock(
|
||||
Factory.Code("if(!false) {\r\n // Foo\r\n").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup("\t<p>A real tag!</p>\r\n")
|
||||
.Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("\t"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("A real tag!"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("\r\n").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Code("}").AsStatement()
|
||||
));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,14 +21,17 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
return new TemplateBlock(
|
||||
new MarkupBlock(
|
||||
Factory.MarkupTransition(),
|
||||
Factory.Markup("<p>Foo #"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Foo #"),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("item")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)
|
||||
),
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None))
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
@ -40,7 +43,9 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
return new TemplateBlock(
|
||||
new MarkupBlock(
|
||||
Factory.MarkupTransition(),
|
||||
Factory.Markup("<p>Foo #"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Foo #"),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("Html.Repeat(10, ")
|
||||
|
|
@ -48,21 +53,25 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
new TemplateBlock(
|
||||
new MarkupBlock(
|
||||
Factory.MarkupTransition(),
|
||||
Factory.Markup("<p>"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.EmptyHtml(),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("item")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)
|
||||
),
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None))
|
||||
)
|
||||
),
|
||||
Factory.Code(")")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)
|
||||
),
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None))
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,7 +34,11 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
new TemplateBlock(
|
||||
new MarkupBlock(
|
||||
Factory.MarkupTransition(),
|
||||
Factory.Markup("<p>Foo</p>").Accepts(AcceptedCharacters.None)
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Foo"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None))
|
||||
)
|
||||
),
|
||||
Factory.Code(" )")
|
||||
|
|
@ -75,7 +79,11 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
Factory.MetaCode("{").Accepts(AcceptedCharacters.None),
|
||||
Factory.Code("\r\n ").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<p>Foo</p>").Accepts(AcceptedCharacters.None)
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Foo"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None))
|
||||
),
|
||||
Factory.Code(" \r\n").AsStatement(),
|
||||
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)
|
||||
|
|
@ -93,7 +101,11 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
Factory.Code("\r\n ").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.MarkupTransition(),
|
||||
Factory.Markup("<p>Foo</p>").Accepts(AcceptedCharacters.None)
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Foo"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None))
|
||||
),
|
||||
Factory.Code(" \r\n").AsStatement(),
|
||||
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)
|
||||
|
|
@ -172,13 +184,17 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
.With(new SingleLineMarkupEditHandler(CSharpLanguageCharacteristics.Instance.TokenizeString, AcceptedCharacters.None))
|
||||
),
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<br/>\r\n")
|
||||
.Accepts(AcceptedCharacters.None)
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<br/>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("\r\n").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<a>Foo</a>\r\n")
|
||||
.Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Foo"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</a>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("\r\n").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupBlock(
|
||||
Factory.MarkupTransition(),
|
||||
Factory.MetaMarkup(":", HtmlSymbolType.Colon),
|
||||
|
|
@ -204,13 +220,19 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
new StatementBlock(
|
||||
Factory.Code("if(foo) {\r\n var foo = \"After this statement there are 10 spaces\"; \r\n").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>\r\n Foo\r\n"),
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("\r\n Foo\r\n"),
|
||||
new ExpressionBlock(
|
||||
Factory.Code(" ").AsStatement(),
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("bar").AsImplicitExpression(CSharpCodeParser.DefaultKeywords).Accepts(AcceptedCharacters.NonWhiteSpace)
|
||||
),
|
||||
Factory.Markup("\r\n </p>\r\n").Accepts(AcceptedCharacters.None)
|
||||
Factory.Markup("\r\n "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("\r\n").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" "),
|
||||
|
|
@ -228,15 +250,33 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
new StatementBlock(
|
||||
Factory.Code("if(foo) {").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>Bar</p> ").Accepts(AcceptedCharacters.None)
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Bar"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
Factory.Code("} else if(bar) {").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>Baz</p> ").Accepts(AcceptedCharacters.None)
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Baz"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
Factory.Code("} else {").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>Boz</p> ").Accepts(AcceptedCharacters.None)
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Boz"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
Factory.Code("}").AsStatement().Accepts(AcceptedCharacters.None)
|
||||
));
|
||||
|
|
@ -250,15 +290,33 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
Factory.MetaCode("{").Accepts(AcceptedCharacters.None),
|
||||
Factory.Code(" if(foo) {").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>Bar</p> ").Accepts(AcceptedCharacters.None)
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Bar"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
Factory.Code("} else if(bar) {").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>Baz</p> ").Accepts(AcceptedCharacters.None)
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Baz"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
Factory.Code("} else {").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>Boz</p> ").Accepts(AcceptedCharacters.None)
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Boz"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
Factory.Code("} ").AsStatement(),
|
||||
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)
|
||||
|
|
@ -287,22 +345,52 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
new StatementBlock(
|
||||
Factory.Code("switch(foo) {\r\n case 0:\r\n").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>Foo</p>\r\n").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("\r\n").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
Factory.Code(" break;\r\n case 1:\r\n").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>Bar</p>\r\n").Accepts(AcceptedCharacters.None)
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Bar"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("\r\n").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
Factory.Code(" return;\r\n case 2:\r\n {\r\n").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>Baz</p>\r\n").Accepts(AcceptedCharacters.None)
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Baz"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("\r\n").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>Boz</p>\r\n").Accepts(AcceptedCharacters.None)
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Boz"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("\r\n").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
Factory.Code(" }\r\n default:\r\n").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>Biz</p>\r\n").Accepts(AcceptedCharacters.None)
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Biz"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("\r\n").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
Factory.Code("}").AsStatement().Accepts(AcceptedCharacters.None)));
|
||||
}
|
||||
|
|
@ -330,22 +418,52 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
Factory.MetaCode("{").Accepts(AcceptedCharacters.None),
|
||||
Factory.Code(" switch(foo) {\r\n case 0:\r\n").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>Foo</p>\r\n").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("\r\n").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
Factory.Code(" break;\r\n case 1:\r\n").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>Bar</p>\r\n").Accepts(AcceptedCharacters.None)
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Bar"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("\r\n").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
Factory.Code(" return;\r\n case 2:\r\n {\r\n").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>Baz</p>\r\n").Accepts(AcceptedCharacters.None)
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Baz"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("\r\n").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>Boz</p>\r\n").Accepts(AcceptedCharacters.None)
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Boz"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("\r\n").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
Factory.Code(" }\r\n default:\r\n").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>Biz</p>\r\n").Accepts(AcceptedCharacters.None)
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Biz"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("\r\n").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
Factory.Code("} ").AsStatement(),
|
||||
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)));
|
||||
|
|
@ -358,7 +476,13 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
new StatementBlock(
|
||||
Factory.Code("for(int i = 0; i < 10; i++) {").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("}").AsStatement().Accepts(AcceptedCharacters.None)
|
||||
));
|
||||
|
|
@ -372,7 +496,13 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
Factory.MetaCode("{").Accepts(AcceptedCharacters.None),
|
||||
Factory.Code(" for(int i = 0; i < 10; i++) {").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("} ").AsStatement(),
|
||||
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)));
|
||||
|
|
@ -422,9 +552,11 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
Factory.Code("if (i > 0) {").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" "),
|
||||
Factory.MarkupTransition("<text>").Accepts(AcceptedCharacters.None),
|
||||
Factory.Markup(";"),
|
||||
Factory.MarkupTransition("</text>").Accepts(AcceptedCharacters.None),
|
||||
new MarkupTagBlock(
|
||||
Factory.MarkupTransition("<text>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup(";").Accepts(AcceptedCharacters.None),
|
||||
new MarkupTagBlock(
|
||||
Factory.MarkupTransition("</text>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
Factory.Code("}").AsStatement()));
|
||||
|
|
@ -439,9 +571,11 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
Factory.Code(" if (i > 0) {").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" "),
|
||||
Factory.MarkupTransition("<text>").Accepts(AcceptedCharacters.None),
|
||||
Factory.Markup(";"),
|
||||
Factory.MarkupTransition("</text>").Accepts(AcceptedCharacters.None),
|
||||
new MarkupTagBlock(
|
||||
Factory.MarkupTransition("<text>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup(";").Accepts(AcceptedCharacters.None),
|
||||
new MarkupTagBlock(
|
||||
Factory.MarkupTransition("</text>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
Factory.Code("} ").AsStatement(),
|
||||
|
|
@ -474,18 +608,26 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
|
|||
Factory.Code(" }\r\n foreach (var p in Enumerable.Range(1, 10)) {\r\n").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" "),
|
||||
Factory.MarkupTransition("<text>").Accepts(AcceptedCharacters.None),
|
||||
Factory.Markup("The number is "),
|
||||
new MarkupTagBlock(
|
||||
Factory.MarkupTransition("<text>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("The number is ").Accepts(AcceptedCharacters.None),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("p").AsImplicitExpression(CSharpCodeParser.DefaultKeywords).Accepts(AcceptedCharacters.NonWhiteSpace)
|
||||
),
|
||||
Factory.MarkupTransition("</text>").Accepts(AcceptedCharacters.None),
|
||||
new MarkupTagBlock(
|
||||
Factory.MarkupTransition("</text>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("\r\n").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
Factory.Code(" }\r\n if(!false) {\r\n").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <p>A real tag!</p>\r\n").Accepts(AcceptedCharacters.None)
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("A real tag!"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("\r\n").Accepts(AcceptedCharacters.None)
|
||||
),
|
||||
Factory.Code(" }\r\n").AsStatement(),
|
||||
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)));
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using Microsoft.AspNet.Razor.Editor;
|
||||
using Microsoft.AspNet.Razor.Generator;
|
||||
using Microsoft.AspNet.Razor.Parser;
|
||||
|
|
@ -19,12 +20,13 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<a href='Foo' />",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator(name: "href", prefix: new LocationTagged<string>(" href='", 2, 0, 2), suffix: new LocationTagged<string>("'", 12, 0, 12)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("Foo").With(new LiteralAttributeCodeGenerator(prefix: new LocationTagged<string>(string.Empty, 9, 0, 9), value: new LocationTagged<string>("Foo", 9, 0, 9))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None)));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator(name: "href", prefix: new LocationTagged<string>(" href='", 2, 0, 2), suffix: new LocationTagged<string>("'", 12, 0, 12)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("Foo").With(new LiteralAttributeCodeGenerator(prefix: new LocationTagged<string>(string.Empty, 9, 0, 9), value: new LocationTagged<string>("Foo", 9, 0, 9))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -32,14 +34,15 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<a href='Foo Bar Baz' />",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator(name: "href", prefix: new LocationTagged<string>(" href='", 2, 0, 2), suffix: new LocationTagged<string>("'", 20, 0, 20)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("Foo").With(new LiteralAttributeCodeGenerator(prefix: new LocationTagged<string>(string.Empty, 9, 0, 9), value: new LocationTagged<string>("Foo", 9, 0, 9))),
|
||||
Factory.Markup(" Bar").With(new LiteralAttributeCodeGenerator(prefix: new LocationTagged<string>(" ", 12, 0, 12), value: new LocationTagged<string>("Bar", 13, 0, 13))),
|
||||
Factory.Markup(" Baz").With(new LiteralAttributeCodeGenerator(prefix: new LocationTagged<string>(" ", 16, 0, 16), value: new LocationTagged<string>("Baz", 17, 0, 17))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None)));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator(name: "href", prefix: new LocationTagged<string>(" href='", 2, 0, 2), suffix: new LocationTagged<string>("'", 20, 0, 20)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("Foo").With(new LiteralAttributeCodeGenerator(prefix: new LocationTagged<string>(string.Empty, 9, 0, 9), value: new LocationTagged<string>("Foo", 9, 0, 9))),
|
||||
Factory.Markup(" Bar").With(new LiteralAttributeCodeGenerator(prefix: new LocationTagged<string>(" ", 12, 0, 12), value: new LocationTagged<string>("Bar", 13, 0, 13))),
|
||||
Factory.Markup(" Baz").With(new LiteralAttributeCodeGenerator(prefix: new LocationTagged<string>(" ", 16, 0, 16), value: new LocationTagged<string>("Baz", 17, 0, 17))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -47,14 +50,15 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<a href=\"Foo Bar Baz\" />",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator(name: "href", prefix: new LocationTagged<string>(" href=\"", 2, 0, 2), suffix: new LocationTagged<string>("\"", 20, 0, 20)),
|
||||
Factory.Markup(" href=\"").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("Foo").With(new LiteralAttributeCodeGenerator(prefix: new LocationTagged<string>(string.Empty, 9, 0, 9), value: new LocationTagged<string>("Foo", 9, 0, 9))),
|
||||
Factory.Markup(" Bar").With(new LiteralAttributeCodeGenerator(prefix: new LocationTagged<string>(" ", 12, 0, 12), value: new LocationTagged<string>("Bar", 13, 0, 13))),
|
||||
Factory.Markup(" Baz").With(new LiteralAttributeCodeGenerator(prefix: new LocationTagged<string>(" ", 16, 0, 16), value: new LocationTagged<string>("Baz", 17, 0, 17))),
|
||||
Factory.Markup("\"").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None)));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator(name: "href", prefix: new LocationTagged<string>(" href=\"", 2, 0, 2), suffix: new LocationTagged<string>("\"", 20, 0, 20)),
|
||||
Factory.Markup(" href=\"").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("Foo").With(new LiteralAttributeCodeGenerator(prefix: new LocationTagged<string>(string.Empty, 9, 0, 9), value: new LocationTagged<string>("Foo", 9, 0, 9))),
|
||||
Factory.Markup(" Bar").With(new LiteralAttributeCodeGenerator(prefix: new LocationTagged<string>(" ", 12, 0, 12), value: new LocationTagged<string>("Bar", 13, 0, 13))),
|
||||
Factory.Markup(" Baz").With(new LiteralAttributeCodeGenerator(prefix: new LocationTagged<string>(" ", 16, 0, 16), value: new LocationTagged<string>("Baz", 17, 0, 17))),
|
||||
Factory.Markup("\"").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -62,11 +66,12 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<a href=Foo Bar Baz />",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator(name: "href", prefix: new LocationTagged<string>(" href=", 2, 0, 2), suffix: new LocationTagged<string>(string.Empty, 11, 0, 11)),
|
||||
Factory.Markup(" href=").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("Foo").With(new LiteralAttributeCodeGenerator(prefix: new LocationTagged<string>(string.Empty, 8, 0, 8), value: new LocationTagged<string>("Foo", 8, 0, 8)))),
|
||||
Factory.Markup(" Bar Baz />").Accepts(AcceptedCharacters.None)));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator(name: "href", prefix: new LocationTagged<string>(" href=", 2, 0, 2), suffix: new LocationTagged<string>(string.Empty, 11, 0, 11)),
|
||||
Factory.Markup(" href=").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("Foo").With(new LiteralAttributeCodeGenerator(prefix: new LocationTagged<string>(string.Empty, 8, 0, 8), value: new LocationTagged<string>("Foo", 8, 0, 8)))),
|
||||
Factory.Markup(" Bar Baz />").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -74,17 +79,18 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<a href='@foo' />",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator(name: "href", prefix: new LocationTagged<string>(" href='", 2, 0, 2), suffix: new LocationTagged<string>("'", 13, 0, 13)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(string.Empty, 9, 0, 9), 9, 0, 9),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("foo")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None)));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator(name: "href", prefix: new LocationTagged<string>(" href='", 2, 0, 2), suffix: new LocationTagged<string>("'", 13, 0, 13)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(string.Empty, 9, 0, 9), 9, 0, 9),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("foo")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -92,25 +98,26 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<a href='@foo bar @baz' />",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator(name: "href", prefix: new LocationTagged<string>(" href='", 2, 0, 2), suffix: new LocationTagged<string>("'", 22, 0, 22)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(string.Empty, 9, 0, 9), 9, 0, 9),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("foo")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace))),
|
||||
Factory.Markup(" bar").With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(" ", 13, 0, 13), new LocationTagged<string>("bar", 14, 0, 14))),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(" ", 17, 0, 17), 18, 0, 18),
|
||||
Factory.Markup(" ").With(SpanCodeGenerator.Null),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("baz")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None)));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator(name: "href", prefix: new LocationTagged<string>(" href='", 2, 0, 2), suffix: new LocationTagged<string>("'", 22, 0, 22)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(string.Empty, 9, 0, 9), 9, 0, 9),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("foo")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace))),
|
||||
Factory.Markup(" bar").With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(" ", 13, 0, 13), new LocationTagged<string>("bar", 14, 0, 14))),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(" ", 17, 0, 17), 18, 0, 18),
|
||||
Factory.Markup(" ").With(SpanCodeGenerator.Null),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("baz")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -118,22 +125,23 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<a href='@foo ~/Foo/Bar' />",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator(name: "href", prefix: new LocationTagged<string>(" href='", 2, 0, 2), suffix: new LocationTagged<string>("'", 23, 0, 23)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(string.Empty, 9, 0, 9), 9, 0, 9),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("foo")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace))),
|
||||
Factory.Markup(" ~/Foo/Bar")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(" ", 13, 0, 13),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 14, 0, 14))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None)));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator(name: "href", prefix: new LocationTagged<string>(" href='", 2, 0, 2), suffix: new LocationTagged<string>("'", 23, 0, 23)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(string.Empty, 9, 0, 9), 9, 0, 9),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("foo")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace))),
|
||||
Factory.Markup(" ~/Foo/Bar")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(" ", 13, 0, 13),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 14, 0, 14))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -141,16 +149,17 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<input value=@foo />",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<input"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator(name: "value", prefix: new LocationTagged<string>(" value=", 6, 0, 6), suffix: new LocationTagged<string>(string.Empty, 17, 0, 17)),
|
||||
Factory.Markup(" value=").With(SpanCodeGenerator.Null),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(string.Empty, 13, 0, 13), 13, 0, 13),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("foo")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)))),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None)));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<input"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator(name: "value", prefix: new LocationTagged<string>(" value=", 6, 0, 6), suffix: new LocationTagged<string>(string.Empty, 17, 0, 17)),
|
||||
Factory.Markup(" value=").With(SpanCodeGenerator.Null),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(string.Empty, 13, 0, 13), 13, 0, 13),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("foo")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)))),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -158,16 +167,17 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseDocumentTest("<input value=@foo />",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<input"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator(name: "value", prefix: new LocationTagged<string>(" value=", 6, 0, 6), suffix: new LocationTagged<string>(string.Empty, 17, 0, 17)),
|
||||
Factory.Markup(" value=").With(SpanCodeGenerator.Null),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(string.Empty, 13, 0, 13), 13, 0, 13),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("foo")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)))),
|
||||
Factory.Markup(" />")));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<input"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator(name: "value", prefix: new LocationTagged<string>(" value=", 6, 0, 6), suffix: new LocationTagged<string>(string.Empty, 17, 0, 17)),
|
||||
Factory.Markup(" value=").With(SpanCodeGenerator.Null),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(string.Empty, 13, 0, 13), 13, 0, 13),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("foo")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)))),
|
||||
Factory.Markup(" />"))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -182,16 +192,17 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
Assert.Equal(0, results.ParserErrors.Count);
|
||||
EvaluateParseTree(rewritten,
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator(name: "href", prefix: new LocationTagged<string>(" href='", 2, 0, 2), suffix: new LocationTagged<string>("'", 18, 0, 18)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("~/Foo/Bar")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(string.Empty, 9, 0, 9),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 9, 0, 9))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />")));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator(name: "href", prefix: new LocationTagged<string>(" href='", 2, 0, 2), suffix: new LocationTagged<string>("'", 18, 0, 18)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("~/Foo/Bar")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(string.Empty, 9, 0, 9),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 9, 0, 9))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />"))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -264,7 +275,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
|
||||
// Assert
|
||||
Assert.Equal(0, results.ParserErrors.Count);
|
||||
EvaluateParseTree(rewritten, new MarkupBlock(Factory.Markup(code)));
|
||||
Assert.Equal(rewritten.Children.Count(), results.Document.Children.Count());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -272,16 +283,19 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<span data-foo='@foo'></span>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<span"),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" data-foo='"),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("foo")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup("'")),
|
||||
Factory.Markup("></span>").Accepts(AcceptedCharacters.None)));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<span"),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" data-foo='"),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("foo")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup("'")),
|
||||
Factory.Markup(">").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</span>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -289,16 +303,19 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseDocumentTest("<span data-foo='@foo'></span>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<span"),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" data-foo='"),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("foo")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup("'")),
|
||||
Factory.Markup("></span>")));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<span"),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" data-foo='"),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("foo")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup("'")),
|
||||
Factory.Markup(">")),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</span>"))));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,7 +38,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
Factory.MetaCode("{").Accepts(AcceptedCharacters.None),
|
||||
Factory.Code("\r\n").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<")))),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<"))))),
|
||||
new RazorError(
|
||||
RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_Code, "}", "{"),
|
||||
1, 0, 1));
|
||||
|
|
@ -57,10 +58,12 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
Factory.MetaCode("{").Accepts(AcceptedCharacters.None),
|
||||
Factory.Code("\r\n").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<\r\n")
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<\r\n"))
|
||||
),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(@"</html>").Accepts(AcceptedCharacters.None)
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</html>").Accepts(AcceptedCharacters.None))
|
||||
),
|
||||
Factory.EmptyCSharp().AsStatement()
|
||||
)
|
||||
|
|
@ -79,7 +82,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
ParseBlockTest("< " + Environment.NewLine
|
||||
+ " ",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("< \r\n ")),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("< \r\n "))),
|
||||
designTimeParser: true,
|
||||
expectedErrors: new RazorError(RazorResources.FormatParseError_UnfinishedTag(string.Empty), 0, 0, 0));
|
||||
}
|
||||
|
|
@ -87,7 +91,18 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
[Fact]
|
||||
public void ParseBlockAllowsStartAndEndTagsToDifferInCase()
|
||||
{
|
||||
SingleSpanBlockTest("<li><p>Foo</P></lI>", BlockType.Markup, SpanKind.Markup, acceptedCharacters: AcceptedCharacters.None);
|
||||
ParseBlockTest("<li><p>Foo</P></lI>",
|
||||
new MarkupBlock(
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<li>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Foo"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</P>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</lI>").Accepts(AcceptedCharacters.None))
|
||||
));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -118,31 +133,77 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
[Fact]
|
||||
public void ParseBlockStopsAtMatchingCloseTagToStartTag()
|
||||
{
|
||||
SingleSpanBlockTest("<a><b></b></a><c></c>", "<a><b></b></a>", BlockType.Markup, SpanKind.Markup, acceptedCharacters: AcceptedCharacters.None);
|
||||
ParseBlockTest("<a><b></b></a><c></c>",
|
||||
new MarkupBlock(
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<b>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</b>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</a>").Accepts(AcceptedCharacters.None))
|
||||
));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseBlockParsesUntilMatchingEndTagIfFirstNonWhitespaceCharacterIsStartTag()
|
||||
{
|
||||
SingleSpanBlockTest("<baz><boz><biz></biz></boz></baz>", BlockType.Markup, SpanKind.Markup, acceptedCharacters: AcceptedCharacters.None);
|
||||
ParseBlockTest("<baz><boz><biz></biz></boz></baz>",
|
||||
new MarkupBlock(
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<baz>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<boz>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<biz>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</biz>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</boz>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</baz>").Accepts(AcceptedCharacters.None))
|
||||
));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseBlockAllowsUnclosedTagsAsLongAsItCanRecoverToAnExpectedEndTag()
|
||||
{
|
||||
SingleSpanBlockTest("<foo><bar><baz></foo>", BlockType.Markup, SpanKind.Markup, acceptedCharacters: AcceptedCharacters.None);
|
||||
ParseBlockTest("<foo><bar><baz></foo>",
|
||||
new MarkupBlock(
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<bar>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<baz>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None))
|
||||
));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseBlockWithSelfClosingTagJustEmitsTag()
|
||||
{
|
||||
SingleSpanBlockTest("<foo />", BlockType.Markup, SpanKind.Markup, acceptedCharacters: AcceptedCharacters.None);
|
||||
ParseBlockTest("<foo />",
|
||||
new MarkupBlock(
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo />").Accepts(AcceptedCharacters.None))
|
||||
));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseBlockCanHandleSelfClosingTagsWithinBlock()
|
||||
{
|
||||
SingleSpanBlockTest("<foo><bar /></foo>", BlockType.Markup, SpanKind.Markup, acceptedCharacters: AcceptedCharacters.None);
|
||||
ParseBlockTest("<foo><bar /></foo>",
|
||||
new MarkupBlock(
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<bar />").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None))
|
||||
));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -150,16 +211,25 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<foo bar=\"baz\"><biz><boz zoop=zork/></biz></foo>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<foo"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("bar", new LocationTagged<string>(" bar=\"", 4, 0, 4), new LocationTagged<string>("\"", 13, 0, 13)),
|
||||
Factory.Markup(" bar=\"").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("baz").With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 10, 0, 10), new LocationTagged<string>("baz", 10, 0, 10))),
|
||||
Factory.Markup("\"").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup("><biz><boz"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("zoop", new LocationTagged<string>(" zoop=", 24, 0, 24), new LocationTagged<string>(String.Empty, 34, 0, 34)),
|
||||
Factory.Markup(" zoop=").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("zork").With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 30, 0, 30), new LocationTagged<string>("zork", 30, 0, 30)))),
|
||||
Factory.Markup("/></biz></foo>").Accepts(AcceptedCharacters.None)));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("bar", new LocationTagged<string>(" bar=\"", 4, 0, 4), new LocationTagged<string>("\"", 13, 0, 13)),
|
||||
Factory.Markup(" bar=\"").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("baz").With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 10, 0, 10), new LocationTagged<string>("baz", 10, 0, 10))),
|
||||
Factory.Markup("\"").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(">").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<biz>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<boz"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("zoop", new LocationTagged<string>(" zoop=", 24, 0, 24), new LocationTagged<string>(String.Empty, 34, 0, 34)),
|
||||
Factory.Markup(" zoop=").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("zork").With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 30, 0, 30), new LocationTagged<string>("zork", 30, 0, 30)))),
|
||||
Factory.Markup("/>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</biz>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -167,12 +237,17 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<foo><bar baz=\">\" /></foo>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<foo><bar"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("baz", new LocationTagged<string>(" baz=\"", 9, 0, 9), new LocationTagged<string>("\"", 16, 0, 16)),
|
||||
Factory.Markup(" baz=\"").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup(">").With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 15, 0, 15), new LocationTagged<string>(">", 15, 0, 15))),
|
||||
Factory.Markup("\"").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" /></foo>").Accepts(AcceptedCharacters.None)));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<bar"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("baz", new LocationTagged<string>(" baz=\"", 9, 0, 9), new LocationTagged<string>("\"", 16, 0, 16)),
|
||||
Factory.Markup(" baz=\"").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup(">").With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 15, 0, 15), new LocationTagged<string>(">", 15, 0, 15))),
|
||||
Factory.Markup("\"").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -180,12 +255,17 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<foo><bar baz=\'>\' /></foo>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<foo><bar"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("baz", new LocationTagged<string>(" baz='", 9, 0, 9), new LocationTagged<string>("'", 16, 0, 16)),
|
||||
Factory.Markup(" baz='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup(">").With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 15, 0, 15), new LocationTagged<string>(">", 15, 0, 15))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" /></foo>").Accepts(AcceptedCharacters.None)));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<bar"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("baz", new LocationTagged<string>(" baz='", 9, 0, 9), new LocationTagged<string>("'", 16, 0, 16)),
|
||||
Factory.Markup(" baz='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup(">").With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 15, 0, 15), new LocationTagged<string>(">", 15, 0, 15))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -193,12 +273,19 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<foo><bar baz=\"/\"></bar></foo>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<foo><bar"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("baz", new LocationTagged<string>(" baz=\"", 9, 0, 9), new LocationTagged<string>("\"", 16, 0, 16)),
|
||||
Factory.Markup(" baz=\"").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("/").With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 15, 0, 15), new LocationTagged<string>("/", 15, 0, 15))),
|
||||
Factory.Markup("\"").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup("></bar></foo>").Accepts(AcceptedCharacters.None)));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<bar"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("baz", new LocationTagged<string>(" baz=\"", 9, 0, 9), new LocationTagged<string>("\"", 16, 0, 16)),
|
||||
Factory.Markup(" baz=\"").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("/").With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 15, 0, 15), new LocationTagged<string>("/", 15, 0, 15))),
|
||||
Factory.Markup("\"").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(">").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</bar>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -206,19 +293,29 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<foo><bar baz=\'/\'></bar></foo>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<foo><bar"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("baz", new LocationTagged<string>(" baz='", 9, 0, 9), new LocationTagged<string>("'", 16, 0, 16)),
|
||||
Factory.Markup(" baz='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("/").With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 15, 0, 15), new LocationTagged<string>("/", 15, 0, 15))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup("></bar></foo>").Accepts(AcceptedCharacters.None)));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<bar"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("baz", new LocationTagged<string>(" baz='", 9, 0, 9), new LocationTagged<string>("'", 16, 0, 16)),
|
||||
Factory.Markup(" baz='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("/").With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 15, 0, 15), new LocationTagged<string>("/", 15, 0, 15))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(">").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</bar>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseBlockTerminatesAtEOF()
|
||||
{
|
||||
SingleSpanBlockTest("<foo>", "<foo>", BlockType.Markup, SpanKind.Markup,
|
||||
new RazorError(RazorResources.FormatParseError_MissingEndTag("foo"), new SourceLocation(0, 0, 0)));
|
||||
ParseBlockTest("<foo>",
|
||||
new MarkupBlock(
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None))),
|
||||
new RazorError(RazorResources.FormatParseError_MissingEndTag("foo"), new SourceLocation(0, 0, 0)));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -230,7 +327,15 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
[Fact]
|
||||
public void ParseBlockSupportsCommentWithinBlock()
|
||||
{
|
||||
SingleSpanBlockTest("<foo>bar<!-- zoop -->baz</foo>", BlockType.Markup, SpanKind.Markup, acceptedCharacters: AcceptedCharacters.None);
|
||||
ParseBlockTest("<foo>bar<!-- zoop -->baz</foo>",
|
||||
new MarkupBlock(
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("bar"),
|
||||
Factory.Markup("<!-- zoop -->").Accepts(AcceptedCharacters.None),
|
||||
Factory.Markup("baz"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -254,18 +359,25 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
[Fact]
|
||||
public void ParseBlockTerminatesCommentAtFirstOccurrenceOfEndSequence()
|
||||
{
|
||||
SingleSpanBlockTest("<foo><!--<foo></bar-->--></foo>", BlockType.Markup, SpanKind.Markup, acceptedCharacters: AcceptedCharacters.None);
|
||||
ParseBlockTest("<foo><!--<foo></bar-->--></foo>",
|
||||
new MarkupBlock(
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("<!--<foo></bar-->").Accepts(AcceptedCharacters.None),
|
||||
Factory.Markup("-->"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseBlockTreatsMalformedTagsAsContent()
|
||||
{
|
||||
SingleSpanBlockTest(
|
||||
"<foo></!-- bar --></foo>",
|
||||
"<foo></!-- bar -->",
|
||||
BlockType.Markup,
|
||||
SpanKind.Markup,
|
||||
AcceptedCharacters.None,
|
||||
ParseBlockTest("<foo></!-- bar --></foo>",
|
||||
new MarkupBlock(
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</!-- bar -->").Accepts(AcceptedCharacters.None))),
|
||||
new RazorError(RazorResources.FormatParseError_MissingEndTag("foo"), 0, 0, 0));
|
||||
}
|
||||
|
||||
|
|
@ -273,43 +385,87 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
[Fact]
|
||||
public void ParseBlockParsesSGMLDeclarationAsEmptyTag()
|
||||
{
|
||||
SingleSpanBlockTest("<foo><!DOCTYPE foo bar baz></foo>", BlockType.Markup, SpanKind.Markup, acceptedCharacters: AcceptedCharacters.None);
|
||||
ParseBlockTest("<foo><!DOCTYPE foo bar baz></foo>",
|
||||
new MarkupBlock(
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("<!DOCTYPE foo bar baz>").Accepts(AcceptedCharacters.None),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseBlockTerminatesSGMLDeclarationAtFirstCloseAngle()
|
||||
{
|
||||
SingleSpanBlockTest("<foo><!DOCTYPE foo bar> baz></foo>", BlockType.Markup, SpanKind.Markup, acceptedCharacters: AcceptedCharacters.None);
|
||||
ParseBlockTest("<foo><!DOCTYPE foo bar> baz></foo>",
|
||||
new MarkupBlock(
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("<!DOCTYPE foo bar>").Accepts(AcceptedCharacters.None),
|
||||
Factory.Markup(" baz>"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseBlockParsesXMLProcessingInstructionAsEmptyTag()
|
||||
{
|
||||
SingleSpanBlockTest("<foo><?xml foo bar baz?></foo>", BlockType.Markup, SpanKind.Markup, acceptedCharacters: AcceptedCharacters.None);
|
||||
ParseBlockTest("<foo><?xml foo bar baz?></foo>",
|
||||
new MarkupBlock(
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("<?xml foo bar baz?>").Accepts(AcceptedCharacters.None),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseBlockTerminatesXMLProcessingInstructionAtQuestionMarkCloseAnglePair()
|
||||
{
|
||||
SingleSpanBlockTest("<foo><?xml foo bar?> baz</foo>", BlockType.Markup, SpanKind.Markup, acceptedCharacters: AcceptedCharacters.None);
|
||||
ParseBlockTest("<foo><?xml foo bar baz?> baz</foo>",
|
||||
new MarkupBlock(
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("<?xml foo bar baz?>").Accepts(AcceptedCharacters.None),
|
||||
Factory.Markup(" baz"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseBlockDoesNotTerminateXMLProcessingInstructionAtCloseAngleUnlessPreceededByQuestionMark()
|
||||
{
|
||||
SingleSpanBlockTest("<foo><?xml foo bar> baz?></foo>", BlockType.Markup, SpanKind.Markup, acceptedCharacters: AcceptedCharacters.None);
|
||||
ParseBlockTest("<foo><?xml foo bar> baz?></foo>",
|
||||
new MarkupBlock(
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("<?xml foo bar> baz?>").Accepts(AcceptedCharacters.None),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseBlockSupportsScriptTagsWithLessThanSignsInThem()
|
||||
{
|
||||
SingleSpanBlockTest(@"<script>if(foo<bar) { alert(""baz"");)</script>", BlockType.Markup, SpanKind.Markup, acceptedCharacters: AcceptedCharacters.None);
|
||||
ParseBlockTest(@"<script>if(foo<bar) { alert(""baz"");)</script>",
|
||||
new MarkupBlock(
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<script>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup(@"if(foo<bar) { alert(""baz"");)"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</script>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseBlockSupportsScriptTagsWithSpacedLessThanSignsInThem()
|
||||
{
|
||||
SingleSpanBlockTest(@"<script>if(foo < bar) { alert(""baz"");)</script>", BlockType.Markup, SpanKind.Markup, acceptedCharacters: AcceptedCharacters.None);
|
||||
ParseBlockTest(@"<script>if(foo < bar) { alert(""baz"");)</script>",
|
||||
new MarkupBlock(
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<script>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup(@"if(foo < bar) { alert(""baz"");)"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</script>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -317,7 +473,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<text/>",
|
||||
new MarkupBlock(
|
||||
Factory.MarkupTransition("<text/>")
|
||||
new MarkupTagBlock(
|
||||
Factory.MarkupTransition("<text/>"))
|
||||
));
|
||||
}
|
||||
|
||||
|
|
@ -326,9 +483,14 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<text>Foo Bar <foo> Baz</text> zoop",
|
||||
new MarkupBlock(
|
||||
Factory.MarkupTransition("<text>"),
|
||||
Factory.Markup("Foo Bar <foo> Baz"),
|
||||
Factory.MarkupTransition("</text>"),
|
||||
new MarkupTagBlock(
|
||||
Factory.MarkupTransition("<text>")),
|
||||
Factory.Markup("Foo Bar ").Accepts(AcceptedCharacters.None),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup(" Baz"),
|
||||
new MarkupTagBlock(
|
||||
Factory.MarkupTransition("</text>")),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)
|
||||
));
|
||||
}
|
||||
|
|
@ -338,9 +500,18 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<text><text>Foo Bar <foo> Baz</text></text> zoop",
|
||||
new MarkupBlock(
|
||||
Factory.MarkupTransition("<text>"),
|
||||
Factory.Markup("<text>Foo Bar <foo> Baz</text>"),
|
||||
Factory.MarkupTransition("</text>"),
|
||||
new MarkupTagBlock(
|
||||
Factory.MarkupTransition("<text>")),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<text>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Foo Bar "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup(" Baz"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</text>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.MarkupTransition("</text>")),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)
|
||||
));
|
||||
}
|
||||
|
|
@ -350,7 +521,16 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<foo><text><bar></bar></foo>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<foo><text><bar></bar></foo>").Accepts(AcceptedCharacters.None)
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<text>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<bar>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</bar>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None))
|
||||
));
|
||||
}
|
||||
|
||||
|
|
@ -359,8 +539,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<br/",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<br/")
|
||||
),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<br/"))),
|
||||
new RazorError(RazorResources.FormatParseError_UnfinishedTag("br"), SourceLocation.Zero));
|
||||
}
|
||||
|
||||
|
|
@ -369,11 +549,15 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<div>Foo @if(true) {} Bar</div>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<div>Foo "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<div>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Foo "),
|
||||
new StatementBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("if(true) {}").AsStatement()),
|
||||
Factory.Markup(" Bar</div>").Accepts(AcceptedCharacters.None)));
|
||||
Factory.Markup(" Bar"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</div>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -381,14 +565,17 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest(@"<script>foo<bar baz='@boz'></script>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<script>foo<bar baz='"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<script>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("foo<bar baz='"),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("boz")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords, acceptTrailingDot: false)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup("'></script>")
|
||||
.Accepts(AcceptedCharacters.None)));
|
||||
Factory.Markup("'>"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</script>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,16 +64,30 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
new RazorError(RazorResources.ParseError_Unexpected_EndOfFile_At_Start_Of_CodeBlock, 1, 0, 1));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseDocumentCorrectlyHandlesOddlySpacedHTMLElements()
|
||||
{
|
||||
ParseDocumentTest("<div ><p class = 'bar'> Foo </p></div >",
|
||||
new MarkupBlock(
|
||||
BlockFactory.MarkupTagBlock("<div >"),
|
||||
BlockFactory.MarkupTagBlock("<p class = 'bar'>"),
|
||||
Factory.Markup(" Foo "),
|
||||
BlockFactory.MarkupTagBlock("</p>"),
|
||||
BlockFactory.MarkupTagBlock("</div >")));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseDocumentCorrectlyHandlesSingleLineOfMarkupWithEmbeddedStatement()
|
||||
{
|
||||
ParseDocumentTest("<div>Foo @if(true) {} Bar</div>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<div>Foo "),
|
||||
BlockFactory.MarkupTagBlock("<div>"),
|
||||
Factory.Markup("Foo "),
|
||||
new StatementBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("if(true) {}").AsStatement()),
|
||||
Factory.Markup(" Bar</div>")));
|
||||
Factory.Markup(" Bar"),
|
||||
BlockFactory.MarkupTagBlock("</div>")));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -89,7 +103,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
Factory.MetaCode("section Foo {")
|
||||
.AutoCompleteWith(null, atEndOfSpan: true),
|
||||
new MarkupBlock(
|
||||
Factory.Markup("\r\n <html></html>\r\n")),
|
||||
Factory.Markup("\r\n "),
|
||||
BlockFactory.MarkupTagBlock("<html>"),
|
||||
BlockFactory.MarkupTagBlock("</html>"),
|
||||
Factory.Markup("\r\n")),
|
||||
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
|
||||
Factory.EmptyHtml()));
|
||||
}
|
||||
|
|
@ -97,7 +114,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
[Fact]
|
||||
public void ParseDocumentParsesWholeContentAsOneSpanIfNoSwapCharacterEncountered()
|
||||
{
|
||||
SingleSpanDocumentTest("foo <bar>baz</bar>", BlockType.Markup, SpanKind.Markup);
|
||||
SingleSpanDocumentTest("foo baz", BlockType.Markup, SpanKind.Markup);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -146,7 +163,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
[Fact]
|
||||
public void ParseDocumentDoesNotSwitchToCodeOnEmailAddressInText()
|
||||
{
|
||||
SingleSpanDocumentTest("<foo>anurse@microsoft.com</foo>", BlockType.Markup, SpanKind.Markup);
|
||||
SingleSpanDocumentTest("anurse@microsoft.com", BlockType.Markup, SpanKind.Markup);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -154,37 +171,56 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseDocumentTest("<a href=\"mailto:anurse@microsoft.com\">Email me</a>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href=\"", 2, 0, 2), new LocationTagged<string>("\"", 36, 0, 36)),
|
||||
Factory.Markup(" href=\"").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("mailto:anurse@microsoft.com")
|
||||
.With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 9, 0, 9), new LocationTagged<string>("mailto:anurse@microsoft.com", 9, 0, 9))),
|
||||
Factory.Markup("\"").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(">Email me</a>")));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href=\"", 2, 0, 2), new LocationTagged<string>("\"", 36, 0, 36)),
|
||||
Factory.Markup(" href=\"").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("mailto:anurse@microsoft.com")
|
||||
.With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 9, 0, 9), new LocationTagged<string>("mailto:anurse@microsoft.com", 9, 0, 9))),
|
||||
Factory.Markup("\"").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(">")),
|
||||
Factory.Markup("Email me"),
|
||||
BlockFactory.MarkupTagBlock("</a>")));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseDocumentDoesNotReturnErrorOnMismatchedTags()
|
||||
{
|
||||
SingleSpanDocumentTest("Foo <div><p></p></p> Baz", BlockType.Markup, SpanKind.Markup);
|
||||
ParseDocumentTest("Foo <div><p></p></p> Baz",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("Foo "),
|
||||
BlockFactory.MarkupTagBlock("<div>"),
|
||||
BlockFactory.MarkupTagBlock("<p>"),
|
||||
BlockFactory.MarkupTagBlock("</p>"),
|
||||
BlockFactory.MarkupTagBlock("</p>"),
|
||||
Factory.Markup(" Baz")));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseDocumentReturnsOneMarkupSegmentIfNoCodeBlocksEncountered()
|
||||
{
|
||||
SingleSpanDocumentTest("Foo <p>Baz<!--Foo-->Bar<!-F> Qux", BlockType.Markup, SpanKind.Markup);
|
||||
SingleSpanDocumentTest("Foo Baz<!--Foo-->Bar<!-F> Qux", BlockType.Markup, SpanKind.Markup);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseDocumentRendersTextPseudoTagAsMarkup()
|
||||
{
|
||||
SingleSpanDocumentTest("Foo <text>Foo</text>", BlockType.Markup, SpanKind.Markup);
|
||||
ParseDocumentTest("Foo <text>Foo</text>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("Foo "),
|
||||
BlockFactory.MarkupTagBlock("<text>"),
|
||||
Factory.Markup("Foo"),
|
||||
BlockFactory.MarkupTagBlock("</text>")));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseDocumentAcceptsEndTagWithNoMatchingStartTag()
|
||||
{
|
||||
SingleSpanDocumentTest("Foo </div> Bar", BlockType.Markup, SpanKind.Markup);
|
||||
ParseDocumentTest("Foo </div> Bar",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("Foo "),
|
||||
BlockFactory.MarkupTagBlock("</div>"),
|
||||
Factory.Markup(" Bar")));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -192,7 +228,9 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseDocumentTest("<foo>${bar}</foo>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<foo>${bar}</foo>")));
|
||||
BlockFactory.MarkupTagBlock("<foo>"),
|
||||
Factory.Markup("${bar}"),
|
||||
BlockFactory.MarkupTagBlock("</foo>")));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -200,13 +238,15 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseDocumentTest(@"<script>foo<bar baz='@boz'></script>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<script>foo<bar baz='"),
|
||||
BlockFactory.MarkupTagBlock("<script>"),
|
||||
Factory.Markup("foo<bar baz='"),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("boz")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords, acceptTrailingDot: false)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup("'></script>")));
|
||||
Factory.Markup("'>"),
|
||||
BlockFactory.MarkupTagBlock("</script>")));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -219,13 +259,17 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
Factory.CodeTransition(),
|
||||
Factory.MetaCode("section Foo {"),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <script>foo<bar baz='"),
|
||||
Factory.Markup(" "),
|
||||
BlockFactory.MarkupTagBlock("<script>"),
|
||||
Factory.Markup("foo<bar baz='"),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("boz")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords, acceptTrailingDot: false)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup("'></script> ")),
|
||||
Factory.Markup("'>"),
|
||||
BlockFactory.MarkupTagBlock("</script>"),
|
||||
Factory.Markup(" ")),
|
||||
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
|
||||
Factory.EmptyHtml()));
|
||||
}
|
||||
|
|
@ -234,7 +278,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
public void ParseBlockCanParse1000NestedElements()
|
||||
{
|
||||
string content = Nested1000.ReadAllText();
|
||||
SingleSpanDocumentTest(content, BlockType.Markup, SpanKind.Markup);
|
||||
ParseDocument(content);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,13 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
[Fact]
|
||||
public void ParseBlockAllowsInvalidTagNamesAsLongAsParserCanIdentifyEndTag()
|
||||
{
|
||||
SingleSpanBlockTest("<1-foo+bar>foo</1-foo+bar>", BlockType.Markup, SpanKind.Markup, acceptedCharacters: AcceptedCharacters.None);
|
||||
ParseBlockTest("<1-foo+bar>foo</1-foo+bar>",
|
||||
new MarkupBlock(
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<1-foo+bar>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("foo"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</1-foo+bar>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -23,9 +29,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<text foo bar></text>",
|
||||
new MarkupBlock(
|
||||
Factory.MarkupTransition("<text").Accepts(AcceptedCharacters.Any),
|
||||
Factory.Markup(" foo bar>"),
|
||||
Factory.MarkupTransition("</text>")),
|
||||
new MarkupTagBlock(
|
||||
Factory.MarkupTransition("<text foo bar>").Accepts(AcceptedCharacters.Any)),
|
||||
new MarkupTagBlock(
|
||||
Factory.MarkupTransition("</text>"))),
|
||||
new RazorError(RazorResources.ParseError_TextTagCannotContainAttributes, SourceLocation.Zero));
|
||||
}
|
||||
|
||||
|
|
@ -34,9 +41,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<text></text foo bar>",
|
||||
new MarkupBlock(
|
||||
Factory.MarkupTransition("<text>"),
|
||||
Factory.MarkupTransition("</text").Accepts(AcceptedCharacters.Any),
|
||||
Factory.Markup(" ")),
|
||||
new MarkupTagBlock(
|
||||
Factory.MarkupTransition("<text>")),
|
||||
new MarkupTagBlock(
|
||||
Factory.MarkupTransition("</text foo bar>").Accepts(AcceptedCharacters.Any))),
|
||||
new RazorError(RazorResources.ParseError_TextTagCannotContainAttributes, 6, 0, 6));
|
||||
}
|
||||
|
||||
|
|
@ -53,7 +61,9 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("</foo> bar baz",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("</foo> ").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)),
|
||||
new RazorError(RazorResources.FormatParseError_UnexpectedEndTag("foo"), SourceLocation.Zero));
|
||||
}
|
||||
|
||||
|
|
@ -62,7 +72,12 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<p><foo></bar>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<p><foo></bar>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</bar>").Accepts(AcceptedCharacters.None))),
|
||||
new RazorError(RazorResources.FormatParseError_MissingEndTag("p"), new SourceLocation(0, 0, 0)));
|
||||
}
|
||||
|
||||
|
|
@ -71,7 +86,9 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<foo>blah blah blah blah blah",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<foo>blah blah blah blah blah")),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("blah blah blah blah blah")),
|
||||
new RazorError(RazorResources.FormatParseError_MissingEndTag("foo"), new SourceLocation(0, 0, 0)));
|
||||
}
|
||||
|
||||
|
|
@ -80,10 +97,11 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<foo bar=baz",
|
||||
new MarkupBlock(
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("bar", new LocationTagged<string>(" bar=", 4, 0, 4), new LocationTagged<string>(String.Empty, 12, 0, 12)),
|
||||
Factory.Markup(" bar=").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("baz").With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(string.Empty, 9, 0, 9), new LocationTagged<string>("baz", 9, 0, 9))))),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("bar", new LocationTagged<string>(" bar=", 4, 0, 4), new LocationTagged<string>(String.Empty, 12, 0, 12)),
|
||||
Factory.Markup(" bar=").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("baz").With(new LiteralAttributeCodeGenerator(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)));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,9 +15,12 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
var factory = SpanFactory.CreateCsHtml();
|
||||
testMethod("<foo>@@bar</foo>",
|
||||
new MarkupBlock(
|
||||
factory.Markup("<foo>"),
|
||||
new MarkupTagBlock(
|
||||
factory.Markup("<foo>").Accepts(lastSpanAcceptedCharacters)),
|
||||
factory.Markup("@").Hidden(),
|
||||
factory.Markup("@bar</foo>").Accepts(lastSpanAcceptedCharacters)));
|
||||
factory.Markup("@bar"),
|
||||
new MarkupTagBlock(
|
||||
factory.Markup("</foo>").Accepts(lastSpanAcceptedCharacters))));
|
||||
}
|
||||
|
||||
public static void RunMultiAtEscapeTest(Action<string, Block> testMethod, AcceptedCharacters lastSpanAcceptedCharacters = AcceptedCharacters.None)
|
||||
|
|
@ -25,7 +28,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
var factory = SpanFactory.CreateCsHtml();
|
||||
testMethod("<foo>@@@@@bar</foo>",
|
||||
new MarkupBlock(
|
||||
factory.Markup("<foo>"),
|
||||
new MarkupTagBlock(
|
||||
factory.Markup("<foo>").Accepts(lastSpanAcceptedCharacters)),
|
||||
factory.Markup("@").Hidden(),
|
||||
factory.Markup("@"),
|
||||
factory.Markup("@").Hidden(),
|
||||
|
|
@ -35,7 +39,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
factory.Code("bar")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
factory.Markup("</foo>").Accepts(lastSpanAcceptedCharacters)));
|
||||
new MarkupTagBlock(
|
||||
factory.Markup("</foo>").Accepts(lastSpanAcceptedCharacters))));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,16 +38,22 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<p></> Bar",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<p></> ").Accepts(AcceptedCharacters.None)),
|
||||
BlockFactory.MarkupTagBlock("<p>", AcceptedCharacters.None),
|
||||
BlockFactory.MarkupTagBlock("</>", AcceptedCharacters.None),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)),
|
||||
new RazorError(RazorResources.FormatParseError_MissingEndTag("p"), 0, 0, 0));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyTag()
|
||||
{
|
||||
// This can happen in situations where a user is in VS' HTML editor and they're modifying
|
||||
// the contents of an HTML tag.
|
||||
ParseBlockTest("<></> Bar",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<></> ").Accepts(AcceptedCharacters.None)));
|
||||
BlockFactory.MarkupTagBlock("<>", AcceptedCharacters.None),
|
||||
BlockFactory.MarkupTagBlock("</>", AcceptedCharacters.None),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -55,7 +61,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<!--Foo--> Bar",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<!--Foo--> ").Accepts(AcceptedCharacters.None)));
|
||||
Factory.Markup("<!--Foo-->").Accepts(AcceptedCharacters.None),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -63,7 +70,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<!DOCTYPE html> foo",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<!DOCTYPE html> ").Accepts(AcceptedCharacters.None)));
|
||||
Factory.Markup("<!DOCTYPE html>").Accepts(AcceptedCharacters.None),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -71,7 +79,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<?xml version=\"1.0\" ?> foo",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<?xml version=\"1.0\" ?> ").Accepts(AcceptedCharacters.None)));
|
||||
Factory.Markup("<?xml version=\"1.0\" ?>").Accepts(AcceptedCharacters.None),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -79,7 +88,10 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<p>Foo</p> Bar",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<p>Foo</p> ").Accepts(AcceptedCharacters.None)));
|
||||
BlockFactory.MarkupTagBlock("<p>", AcceptedCharacters.None),
|
||||
Factory.Markup("Foo"),
|
||||
BlockFactory.MarkupTagBlock("</p>", AcceptedCharacters.None),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -87,9 +99,11 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<text>Foo</text>}",
|
||||
new MarkupBlock(
|
||||
Factory.MarkupTransition("<text>"),
|
||||
Factory.Markup("Foo"),
|
||||
Factory.MarkupTransition("</text>")));
|
||||
new MarkupTagBlock(
|
||||
Factory.MarkupTransition("<text>")),
|
||||
Factory.Markup("Foo").Accepts(AcceptedCharacters.None),
|
||||
new MarkupTagBlock(
|
||||
Factory.MarkupTransition("</text>"))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -97,7 +111,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<![CDATA[Foo]]> Bar",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<![CDATA[Foo]]> ").Accepts(AcceptedCharacters.None)));
|
||||
Factory.Markup("<![CDATA[Foo]]>").Accepts(AcceptedCharacters.None),
|
||||
Factory.Markup(" ").Accepts(AcceptedCharacters.None)));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -105,7 +120,9 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseDocumentTest("<script>foo < bar && quantity.toString() !== orderQty.val()</script>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<script>foo < bar && quantity.toString() !== orderQty.val()</script>")));
|
||||
BlockFactory.MarkupTagBlock("<script>"),
|
||||
Factory.Markup("foo < bar && quantity.toString() !== orderQty.val()"),
|
||||
BlockFactory.MarkupTagBlock("</script>")));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
|
|
@ -114,8 +131,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<" + tagName + ">foo",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<" + tagName + ">")
|
||||
.Accepts(AcceptedCharacters.None)));
|
||||
BlockFactory.MarkupTagBlock("<" + tagName + ">", AcceptedCharacters.None)));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
|
|
@ -124,8 +140,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<" + tagName + "><other>foo",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<" + tagName + ">")
|
||||
.Accepts(AcceptedCharacters.None)));
|
||||
BlockFactory.MarkupTagBlock("<" + tagName + ">", AcceptedCharacters.None)));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
|
|
@ -134,8 +149,9 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<" + tagName + "> </" + tagName + ">foo",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<" + tagName + "> </" + tagName + ">")
|
||||
.Accepts(AcceptedCharacters.None)));
|
||||
BlockFactory.MarkupTagBlock("<" + tagName + ">", AcceptedCharacters.None),
|
||||
Factory.Markup(" "),
|
||||
BlockFactory.MarkupTagBlock("</" + tagName + ">", AcceptedCharacters.None)));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
|
|
@ -144,8 +160,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<" + tagName + "></" + tagName,
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<" + tagName + "></" + tagName)
|
||||
.Accepts(AcceptedCharacters.Any)));
|
||||
BlockFactory.MarkupTagBlock("<" + tagName + ">", AcceptedCharacters.None),
|
||||
BlockFactory.MarkupTagBlock("</" + tagName)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,11 +20,14 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<p>foo#@i</p>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<p>foo#"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<p>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("foo#"),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("i").AsImplicitExpression(CSharpCodeParser.DefaultKeywords).Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None)));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</p>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -32,13 +35,14 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<foo @bar />",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<foo "),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("bar")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None)));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo "),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("bar")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -46,17 +50,18 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<foo bar=\"@baz\" />",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<foo"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("bar", new LocationTagged<string>(" bar=\"", 4, 0, 4), new LocationTagged<string>("\"", 14, 0, 14)),
|
||||
Factory.Markup(" bar=\"").With(SpanCodeGenerator.Null),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(String.Empty, 10, 0, 10), 10, 0, 10),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("baz")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace))),
|
||||
Factory.Markup("\"").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None)));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("bar", new LocationTagged<string>(" bar=\"", 4, 0, 4), new LocationTagged<string>("\"", 14, 0, 14)),
|
||||
Factory.Markup(" bar=\"").With(SpanCodeGenerator.Null),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(String.Empty, 10, 0, 10), 10, 0, 10),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("baz")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace))),
|
||||
Factory.Markup("\"").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -64,24 +69,32 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<foo>@bar<baz>@boz</baz></foo>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<foo>"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.EmptyHtml(),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("bar")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup("<baz>"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<baz>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.EmptyHtml(),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("boz")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup("</baz></foo>").Accepts(AcceptedCharacters.None)));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</baz>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseBlockParsesCodeWithinSingleLineMarkup()
|
||||
{
|
||||
// TODO: Fix at a later date, HTML should be a tag block: https://github.com/aspnet/Razor/issues/101
|
||||
ParseBlockTest("@:<li>Foo @Bar Baz" + Environment.NewLine
|
||||
+ "bork",
|
||||
new MarkupBlock(
|
||||
|
|
@ -102,13 +115,17 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<foo><!-- @foo --></foo>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<foo><!-- "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("<!-- "),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("foo")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup(" --></foo>").Accepts(AcceptedCharacters.None)));
|
||||
Factory.Markup(" -->").Accepts(AcceptedCharacters.None),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -116,13 +133,17 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<foo><!DOCTYPE foo @bar baz></foo>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<foo><!DOCTYPE foo "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("<!DOCTYPE foo "),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("bar")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup(" baz></foo>").Accepts(AcceptedCharacters.None)));
|
||||
Factory.Markup(" baz>").Accepts(AcceptedCharacters.None),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -130,13 +151,17 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<foo><![CDATA[ foo @bar baz]]></foo>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<foo><![CDATA[ foo "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("<![CDATA[ foo "),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("bar")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup(" baz]]></foo>").Accepts(AcceptedCharacters.None)));
|
||||
Factory.Markup(" baz]]>").Accepts(AcceptedCharacters.None),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -144,19 +169,29 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<foo><?xml foo @bar baz?></foo>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<foo><?xml foo "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("<?xml foo "),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("bar")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup(" baz?></foo>").Accepts(AcceptedCharacters.None)));
|
||||
Factory.Markup(" baz?>").Accepts(AcceptedCharacters.None),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseBlockDoesNotSwitchToCodeOnEmailAddressInText()
|
||||
{
|
||||
SingleSpanBlockTest("<foo>anurse@microsoft.com</foo>", BlockType.Markup, SpanKind.Markup, acceptedCharacters: AcceptedCharacters.None);
|
||||
ParseBlockTest("<foo>anurse@microsoft.com</foo>",
|
||||
new MarkupBlock(
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("anurse@microsoft.com"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -164,13 +199,17 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<a href=\"mailto:anurse@microsoft.com\">Email me</a>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href=\"", 2, 0, 2), new LocationTagged<string>("\"", 36, 0, 36)),
|
||||
Factory.Markup(" href=\"").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("mailto:anurse@microsoft.com")
|
||||
.With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 9, 0, 9), new LocationTagged<string>("mailto:anurse@microsoft.com", 9, 0, 9))),
|
||||
Factory.Markup("\"").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(">Email me</a>").Accepts(AcceptedCharacters.None)));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href=\"", 2, 0, 2), new LocationTagged<string>("\"", 36, 0, 36)),
|
||||
Factory.Markup(" href=\"").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("mailto:anurse@microsoft.com")
|
||||
.With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 9, 0, 9), new LocationTagged<string>("mailto:anurse@microsoft.com", 9, 0, 9))),
|
||||
Factory.Markup("\"").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(">").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Email me"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</a>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -182,21 +221,31 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
+ " }" + Environment.NewLine
|
||||
+ " </ul>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <ul>\r\n"),
|
||||
Factory.Markup(" "),
|
||||
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 Products) {\r\n").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <li>Product: "),
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<li>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Product: "),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("p.Name")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup("</li>\r\n").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>").Accepts(AcceptedCharacters.None)));
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</ul>").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -208,21 +257,31 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
+ " }" + Environment.NewLine
|
||||
+ " </ul>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <ul>\r\n"),
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<ul>")),
|
||||
Factory.Markup("\r\n"),
|
||||
new StatementBlock(
|
||||
Factory.Code(" ").AsStatement(),
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("foreach(var p in Products) {\r\n").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <li>Product: "),
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<li>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Product: "),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("p.Name")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup("</li>\r\n").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>")));
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</ul>"))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -241,21 +300,32 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
Factory.CodeTransition(),
|
||||
Factory.MetaCode("section foo {").AutoCompleteWith(null, atEndOfSpan: true),
|
||||
new MarkupBlock(
|
||||
Factory.Markup("\r\n <ul>\r\n"),
|
||||
Factory.Markup("\r\n "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<ul>")),
|
||||
Factory.Markup("\r\n"),
|
||||
new StatementBlock(
|
||||
Factory.Code(" ").AsStatement(),
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("foreach(var p in Products) {\r\n").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <li>Product: "),
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<li>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Product: "),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("p.Name")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup("</li>\r\n").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")),
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</ul>")),
|
||||
Factory.Markup("\r\n")),
|
||||
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
|
||||
Factory.EmptyHtml()));
|
||||
}
|
||||
|
|
@ -269,18 +339,26 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
+ " }" + Environment.NewLine
|
||||
+ " </ul>",
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <ul>\r\n "),
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<ul>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("\r\n "),
|
||||
new StatementBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("foreach(var p in Products) {\r\n ").AsStatement(),
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<li>Product: "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<li>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("Product: "),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition(),
|
||||
Factory.Code("p.Name").AsImplicitExpression(CSharpCodeParser.DefaultKeywords).Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup("</li>").Accepts(AcceptedCharacters.None)),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</li>").Accepts(AcceptedCharacters.None))),
|
||||
Factory.Code("\r\n }").AsStatement().Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("\r\n </ul>").Accepts(AcceptedCharacters.None)),
|
||||
Factory.Markup("\r\n "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</ul>").Accepts(AcceptedCharacters.None))),
|
||||
designTimeParser: true);
|
||||
}
|
||||
|
||||
|
|
@ -319,9 +397,14 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
Factory.CodeTransition(),
|
||||
Factory.MetaCode("section Foo {").AutoCompleteWith(null, atEndOfSpan: true),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <foo>"),
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>")),
|
||||
Factory.Markup("@").Hidden(),
|
||||
Factory.Markup("@bar</foo> ")),
|
||||
Factory.Markup("@bar"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>")),
|
||||
Factory.Markup(" ")),
|
||||
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
|
||||
Factory.EmptyHtml()));
|
||||
}
|
||||
|
|
@ -336,7 +419,9 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
Factory.CodeTransition(),
|
||||
Factory.MetaCode("section Foo {").AutoCompleteWith(null, atEndOfSpan: true),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <foo>"),
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<foo>")),
|
||||
Factory.Markup("@").Hidden(),
|
||||
Factory.Markup("@"),
|
||||
Factory.Markup("@").Hidden(),
|
||||
|
|
@ -346,7 +431,9 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
Factory.Code("bar")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace)),
|
||||
Factory.Markup("</foo> ")),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("</foo>")),
|
||||
Factory.Markup(" ")),
|
||||
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
|
||||
Factory.EmptyHtml()));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,16 +19,17 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<a href='~/Foo/Bar/Baz' />",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href='", 2, 0, 2), new LocationTagged<string>("'", 22, 0, 22)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("~/Foo/Bar/Baz")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(String.Empty, 9, 0, 9),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 9, 0, 9))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None)));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href='", 2, 0, 2), new LocationTagged<string>("'", 22, 0, 22)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("~/Foo/Bar/Baz")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(String.Empty, 9, 0, 9),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 9, 0, 9))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -36,16 +37,17 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseDocumentTest("<a href='~/Foo/Bar/Baz' />",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href='", 2, 0, 2), new LocationTagged<string>("'", 22, 0, 22)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("~/Foo/Bar/Baz")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(String.Empty, 9, 0, 9),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 9, 0, 9))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />")));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href='", 2, 0, 2), new LocationTagged<string>("'", 22, 0, 22)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("~/Foo/Bar/Baz")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(String.Empty, 9, 0, 9),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 9, 0, 9))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />"))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -60,16 +62,20 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
.AutoCompleteWith(null, atEndOfSpan: true)
|
||||
.Accepts(AcceptedCharacters.Any),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href='", 17, 0, 17), new LocationTagged<string>("'", 37, 0, 37)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("~/Foo/Bar/Baz")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(String.Empty, 24, 0, 24),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 24, 0, 24))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" /> ")),
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href='", 17, 0, 17), new LocationTagged<string>("'", 37, 0, 37)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("~/Foo/Bar/Baz")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(String.Empty, 24, 0, 24),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 24, 0, 24))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />")),
|
||||
Factory.Markup(" ")
|
||||
),
|
||||
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
|
||||
Factory.EmptyHtml()));
|
||||
}
|
||||
|
|
@ -79,14 +85,41 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<a href='~/Foo/@id/Baz' />",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href='", 2, 0, 2), new LocationTagged<string>("'", 22, 0, 22)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("~/Foo/")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(String.Empty, 9, 0, 9),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 9, 0, 9))),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(String.Empty, 15, 0, 15), 15, 0, 15),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition().Accepts(AcceptedCharacters.None),
|
||||
Factory.Code("id")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace))),
|
||||
Factory.Markup("/Baz")
|
||||
.With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 18, 0, 18), new LocationTagged<string>("/Baz", 18, 0, 18))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void UrlWithExpressionsInAttributeInMarkupDocument()
|
||||
{
|
||||
ParseDocumentTest("<a href='~/Foo/@id/Baz' />",
|
||||
new MarkupBlock(
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href='", 2, 0, 2), new LocationTagged<string>("'", 22, 0, 22)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("~/Foo/")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(String.Empty, 9, 0, 9),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 9, 0, 9))),
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(String.Empty, 9, 0, 9),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 9, 0, 9))),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(String.Empty, 15, 0, 15), 15, 0, 15),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition().Accepts(AcceptedCharacters.None),
|
||||
|
|
@ -96,32 +129,7 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
Factory.Markup("/Baz")
|
||||
.With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 18, 0, 18), new LocationTagged<string>("/Baz", 18, 0, 18))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None)));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void UrlWithExpressionsInAttributeInMarkupDocument()
|
||||
{
|
||||
ParseDocumentTest("<a href='~/Foo/@id/Baz' />",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href='", 2, 0, 2), new LocationTagged<string>("'", 22, 0, 22)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("~/Foo/")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(String.Empty, 9, 0, 9),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 9, 0, 9))),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(String.Empty, 15, 0, 15), 15, 0, 15),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition().Accepts(AcceptedCharacters.None),
|
||||
Factory.Code("id")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace))),
|
||||
Factory.Markup("/Baz")
|
||||
.With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 18, 0, 18), new LocationTagged<string>("/Baz", 18, 0, 18))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />")));
|
||||
Factory.Markup(" />"))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -135,24 +143,28 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
Factory.MetaCode("section Foo {")
|
||||
.AutoCompleteWith(null, atEndOfSpan: true),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href='", 17, 0, 17), new LocationTagged<string>("'", 37, 0, 37)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("~/Foo/")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(String.Empty, 24, 0, 24),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 24, 0, 24))),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(String.Empty, 30, 0, 30), 30, 0, 30),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition().Accepts(AcceptedCharacters.None),
|
||||
Factory.Code("id")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace))),
|
||||
Factory.Markup("/Baz")
|
||||
.With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 33, 0, 33), new LocationTagged<string>("/Baz", 33, 0, 33))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" /> ")),
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href='", 17, 0, 17), new LocationTagged<string>("'", 37, 0, 37)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("~/Foo/")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(String.Empty, 24, 0, 24),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 24, 0, 24))),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(String.Empty, 30, 0, 30), 30, 0, 30),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition().Accepts(AcceptedCharacters.None),
|
||||
Factory.Code("id")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace))),
|
||||
Factory.Markup("/Baz")
|
||||
.With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 33, 0, 33), new LocationTagged<string>("/Baz", 33, 0, 33))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />")),
|
||||
Factory.Markup(" ")
|
||||
),
|
||||
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
|
||||
Factory.EmptyHtml()));
|
||||
}
|
||||
|
|
@ -162,16 +174,17 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<a href='~/Foo+Bar:Baz(Biz),Boz' />",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href='", 2, 0, 2), new LocationTagged<string>("'", 31, 0, 31)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("~/Foo+Bar:Baz(Biz),Boz")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(String.Empty, 9, 0, 9),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 9, 0, 9))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None)));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href='", 2, 0, 2), new LocationTagged<string>("'", 31, 0, 31)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("~/Foo+Bar:Baz(Biz),Boz")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(String.Empty, 9, 0, 9),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 9, 0, 9))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -179,16 +192,17 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseDocumentTest("<a href='~/Foo+Bar:Baz(Biz),Boz' />",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href='", 2, 0, 2), new LocationTagged<string>("'", 31, 0, 31)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("~/Foo+Bar:Baz(Biz),Boz")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(String.Empty, 9, 0, 9),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 9, 0, 9))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />")));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href='", 2, 0, 2), new LocationTagged<string>("'", 31, 0, 31)),
|
||||
Factory.Markup(" href='").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("~/Foo+Bar:Baz(Biz),Boz")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(String.Empty, 9, 0, 9),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 9, 0, 9))),
|
||||
Factory.Markup("'").With(SpanCodeGenerator.Null)),
|
||||
Factory.Markup(" />"))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -196,23 +210,24 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseBlockTest("<a href=~/Foo+Bar:Baz(Biz),Boz/@id/Boz />",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href=", 2, 0, 2), new LocationTagged<string>(String.Empty, 38, 0, 38)),
|
||||
Factory.Markup(" href=").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("~/Foo+Bar:Baz(Biz),Boz/")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(String.Empty, 8, 0, 8),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 8, 0, 8))),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(String.Empty, 31, 0, 31), 31, 0, 31),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition()
|
||||
.Accepts(AcceptedCharacters.None),
|
||||
Factory.Code("id")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace))),
|
||||
Factory.Markup("/Boz").With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 34, 0, 34), new LocationTagged<string>("/Boz", 34, 0, 34)))),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None)));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href=", 2, 0, 2), new LocationTagged<string>(String.Empty, 38, 0, 38)),
|
||||
Factory.Markup(" href=").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("~/Foo+Bar:Baz(Biz),Boz/")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(String.Empty, 8, 0, 8),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 8, 0, 8))),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(String.Empty, 31, 0, 31), 31, 0, 31),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition()
|
||||
.Accepts(AcceptedCharacters.None),
|
||||
Factory.Code("id")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace))),
|
||||
Factory.Markup("/Boz").With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 34, 0, 34), new LocationTagged<string>("/Boz", 34, 0, 34)))),
|
||||
Factory.Markup(" />").Accepts(AcceptedCharacters.None))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -220,23 +235,24 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
{
|
||||
ParseDocumentTest("<a href=~/Foo+Bar:Baz(Biz),Boz/@id/Boz />",
|
||||
new MarkupBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href=", 2, 0, 2), new LocationTagged<string>(String.Empty, 38, 0, 38)),
|
||||
Factory.Markup(" href=").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("~/Foo+Bar:Baz(Biz),Boz/")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(String.Empty, 8, 0, 8),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 8, 0, 8))),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(String.Empty, 31, 0, 31), 31, 0, 31),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition()
|
||||
.Accepts(AcceptedCharacters.None),
|
||||
Factory.Code("id")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace))),
|
||||
Factory.Markup("/Boz").With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 34, 0, 34), new LocationTagged<string>("/Boz", 34, 0, 34)))),
|
||||
Factory.Markup(" />")));
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href=", 2, 0, 2), new LocationTagged<string>(String.Empty, 38, 0, 38)),
|
||||
Factory.Markup(" href=").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("~/Foo+Bar:Baz(Biz),Boz/")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(String.Empty, 8, 0, 8),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 8, 0, 8))),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(String.Empty, 31, 0, 31), 31, 0, 31),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition()
|
||||
.Accepts(AcceptedCharacters.None),
|
||||
Factory.Code("id")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace))),
|
||||
Factory.Markup("/Boz").With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 34, 0, 34), new LocationTagged<string>("/Boz", 34, 0, 34)))),
|
||||
Factory.Markup(" />"))));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -250,23 +266,27 @@ namespace Microsoft.AspNet.Razor.Test.Parser.Html
|
|||
Factory.MetaCode("section Foo {")
|
||||
.AutoCompleteWith(null, atEndOfSpan: true),
|
||||
new MarkupBlock(
|
||||
Factory.Markup(" <a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href=", 17, 0, 17), new LocationTagged<string>(String.Empty, 53, 0, 53)),
|
||||
Factory.Markup(" href=").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("~/Foo+Bar:Baz(Biz),Boz/")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(String.Empty, 23, 0, 23),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 23, 0, 23))),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(String.Empty, 46, 0, 46), 46, 0, 46),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition()
|
||||
.Accepts(AcceptedCharacters.None),
|
||||
Factory.Code("id")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace))),
|
||||
Factory.Markup("/Boz").With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 49, 0, 49), new LocationTagged<string>("/Boz", 49, 0, 49)))),
|
||||
Factory.Markup(" /> ")),
|
||||
Factory.Markup(" "),
|
||||
new MarkupTagBlock(
|
||||
Factory.Markup("<a"),
|
||||
new MarkupBlock(new AttributeBlockCodeGenerator("href", new LocationTagged<string>(" href=", 17, 0, 17), new LocationTagged<string>(String.Empty, 53, 0, 53)),
|
||||
Factory.Markup(" href=").With(SpanCodeGenerator.Null),
|
||||
Factory.Markup("~/Foo+Bar:Baz(Biz),Boz/")
|
||||
.WithEditorHints(EditorHints.VirtualPath)
|
||||
.With(new LiteralAttributeCodeGenerator(
|
||||
new LocationTagged<string>(String.Empty, 23, 0, 23),
|
||||
new LocationTagged<SpanCodeGenerator>(new ResolveUrlCodeGenerator(), 23, 0, 23))),
|
||||
new MarkupBlock(new DynamicAttributeBlockCodeGenerator(new LocationTagged<string>(String.Empty, 46, 0, 46), 46, 0, 46),
|
||||
new ExpressionBlock(
|
||||
Factory.CodeTransition()
|
||||
.Accepts(AcceptedCharacters.None),
|
||||
Factory.Code("id")
|
||||
.AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
|
||||
.Accepts(AcceptedCharacters.NonWhiteSpace))),
|
||||
Factory.Markup("/Boz").With(new LiteralAttributeCodeGenerator(new LocationTagged<string>(String.Empty, 49, 0, 49), new LocationTagged<string>("/Boz", 49, 0, 49)))),
|
||||
Factory.Markup(" />")),
|
||||
Factory.Markup(" ")
|
||||
),
|
||||
Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
|
||||
Factory.EmptyHtml()));
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue