This repository was archived by the owner on Dec 19, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 223
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add code generation tests for tag helpers.
- Loading branch information
1 parent
a9b9b7a
commit 8eaa6cc
Showing
11 changed files
with
547 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
102 changes: 102 additions & 0 deletions
102
test/Microsoft.AspNet.Razor.Test/Generator/CSharpTagHelperRenderingTest.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
// 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.Linq; | ||
using System.Reflection; | ||
using Microsoft.AspNet.Razor.Parser; | ||
using Microsoft.AspNet.Razor.Parser.TagHelpers.Internal; | ||
using Microsoft.AspNet.Razor.TagHelpers; | ||
using Moq; | ||
using Xunit; | ||
|
||
namespace Microsoft.AspNet.Razor.Test.Generator | ||
{ | ||
public class CSharpTagHelperRenderingTest : CSharpRazorCodeGeneratorTest | ||
{ | ||
[Theory] | ||
[InlineData("BasicTagHelpers")] | ||
[InlineData("ComplexTagHelpers")] | ||
public void TagHelpers_ChangeGeneratedOutput(string testType) | ||
{ | ||
var inputTypePropertyInfo = new Mock<PropertyInfo>(); | ||
inputTypePropertyInfo.Setup(ipi => ipi.PropertyType).Returns(typeof(string)); | ||
inputTypePropertyInfo.Setup(ipi => ipi.Name).Returns("Type"); | ||
var checkedPropertyInfo = new Mock<PropertyInfo>(); | ||
checkedPropertyInfo.Setup(ipi => ipi.PropertyType).Returns(typeof(bool)); | ||
checkedPropertyInfo.Setup(ipi => ipi.Name).Returns("Checked"); | ||
// Arrange | ||
var tagHelperProvider = new TagHelperDescriptorProvider( | ||
new TagHelperDescriptor[] | ||
{ | ||
new TagHelperDescriptor("p", "pTagHelper", ContentBehavior.None), | ||
new TagHelperDescriptor("input", | ||
"inputTagHelper", | ||
ContentBehavior.None, | ||
new TagHelperAttributeDescriptor[] { | ||
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo.Object) | ||
}), | ||
new TagHelperDescriptor("input", | ||
"inputTagHelper2", | ||
ContentBehavior.None, | ||
new TagHelperAttributeDescriptor[] { | ||
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo.Object), | ||
new TagHelperAttributeDescriptor("checked", checkedPropertyInfo.Object) | ||
}), | ||
}); | ||
|
||
// Act & Assert | ||
RunTagHelperTest(testType, tagHelperProvider); | ||
} | ||
|
||
[Fact] | ||
public void TagHelpers_ContentBehavior() | ||
{ | ||
// Arrange | ||
var tagHelperProvider = new TagHelperDescriptorProvider( | ||
new TagHelperDescriptor[] | ||
{ | ||
new TagHelperDescriptor("modify", "modifyTagHelper", ContentBehavior.Modify), | ||
new TagHelperDescriptor("none", "noneTagHelper", ContentBehavior.None), | ||
new TagHelperDescriptor("append", "appendTagHelper", ContentBehavior.Append), | ||
new TagHelperDescriptor("prepend", "prependTagHelper", ContentBehavior.Prepend), | ||
new TagHelperDescriptor("replace", "replaceTagHelper", ContentBehavior.Replace), | ||
}); | ||
|
||
// Act & Assert | ||
RunTagHelperTest("ContentBehaviorTagHelpers", tagHelperProvider); | ||
} | ||
|
||
private void RunTagHelperTest(string testName, TagHelperDescriptorProvider tagHelperProvider) | ||
{ | ||
RunTest( | ||
name: testName, | ||
templateEngineConfig: (engine) => | ||
{ | ||
return new TagHelperTemplateEngine(engine, tagHelperProvider); | ||
}); | ||
} | ||
|
||
private class TagHelperTemplateEngine : RazorTemplateEngine | ||
{ | ||
private TagHelperDescriptorProvider _tagHelperProvider; | ||
|
||
public TagHelperTemplateEngine(RazorTemplateEngine engine, TagHelperDescriptorProvider tagHelperProvider) | ||
: base(engine.Host) | ||
{ | ||
_tagHelperProvider = tagHelperProvider; | ||
} | ||
|
||
protected internal override RazorParser CreateParser() | ||
{ | ||
var parser = base.CreateParser(); | ||
var optimizers = parser.Optimizers.Where(opmzr => !(opmzr is TagHelperParseTreeRewriter)); | ||
|
||
parser.Optimizers = optimizers.Concat(new[] { | ||
new TagHelperParseTreeRewriter(_tagHelperProvider) | ||
}).ToList(); | ||
|
||
return parser; | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
71 changes: 71 additions & 0 deletions
71
test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/CS/Output/BasicTagHelpers.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
namespace TestOutput | ||
{ | ||
using System; | ||
using System.Threading.Tasks; | ||
|
||
public class BasicTagHelpers | ||
{ | ||
#line hidden | ||
public BasicTagHelpers() | ||
{ | ||
} | ||
|
||
#pragma warning disable 1998 | ||
public override async Task ExecuteAsync() | ||
{ | ||
ITagHelperManager __tagHelperManager = CreateTagHelper(); | ||
var __tagHelperBufferValue = string.Empty; | ||
pTagHelper __p_pTagHelper_None = null; | ||
inputTagHelper __input_inputTagHelper_None = null; | ||
inputTagHelper2 __input_inputTagHelper2_None = null; | ||
WriteLiteral("<div class=\"randomNonTagHelperAttribute\">\r\n "); | ||
__p_pTagHelper_None = CreateTagHelper<pTagHelper>(); | ||
__tagHelperManager.AddActiveTagHelper(__p_pTagHelper_None); | ||
__tagHelperManager.AddHTMLAttribute("class", "Hello World"); | ||
__tagHelperManager.StartActiveTagHelpers("p"); | ||
__tagHelperManager.ExecuteTagHelpers(); | ||
WriteLiteral(__tagHelperManager.GenerateTagStart()); | ||
WriteLiteral("\r\n "); | ||
__p_pTagHelper_None = CreateTagHelper<pTagHelper>(); | ||
__tagHelperManager.AddActiveTagHelper(__p_pTagHelper_None); | ||
__tagHelperManager.StartActiveTagHelpers("p"); | ||
__tagHelperManager.ExecuteTagHelpers(); | ||
WriteLiteral(__tagHelperManager.GenerateTagStart()); | ||
WriteLiteral(__tagHelperManager.GenerateTagEnd()); | ||
__tagHelperManager.EndTagHelpers(); | ||
WriteLiteral("\r\n "); | ||
__input_inputTagHelper_None = CreateTagHelper<inputTagHelper>(); | ||
__input_inputTagHelper_None.Type = "text"; | ||
__tagHelperManager.AddTagHelperAttribute("type", __input_inputTagHelper_None.Type); | ||
__tagHelperManager.AddActiveTagHelper(__input_inputTagHelper_None); | ||
__input_inputTagHelper2_None = CreateTagHelper<inputTagHelper2>(); | ||
__input_inputTagHelper2_None.Type = __input_inputTagHelper_None.Type; | ||
__tagHelperManager.AddActiveTagHelper(__input_inputTagHelper2_None); | ||
__tagHelperManager.StartActiveTagHelpers("input"); | ||
__tagHelperManager.ExecuteTagHelpers(); | ||
WriteLiteral(__tagHelperManager.GenerateTagStart()); | ||
WriteLiteral(__tagHelperManager.GenerateTagEnd()); | ||
__tagHelperManager.EndTagHelpers(); | ||
WriteLiteral("\r\n "); | ||
__input_inputTagHelper_None = CreateTagHelper<inputTagHelper>(); | ||
__input_inputTagHelper_None.Type = "checkbox"; | ||
__tagHelperManager.AddTagHelperAttribute("type", __input_inputTagHelper_None.Type); | ||
__tagHelperManager.AddActiveTagHelper(__input_inputTagHelper_None); | ||
__input_inputTagHelper2_None = CreateTagHelper<inputTagHelper2>(); | ||
__input_inputTagHelper2_None.Type = __input_inputTagHelper_None.Type; | ||
__input_inputTagHelper2_None.Checked = true; | ||
__tagHelperManager.AddTagHelperAttribute("checked", __input_inputTagHelper2_None.Checked); | ||
__tagHelperManager.AddActiveTagHelper(__input_inputTagHelper2_None); | ||
__tagHelperManager.StartActiveTagHelpers("input"); | ||
__tagHelperManager.ExecuteTagHelpers(); | ||
WriteLiteral(__tagHelperManager.GenerateTagStart()); | ||
WriteLiteral(__tagHelperManager.GenerateTagEnd()); | ||
__tagHelperManager.EndTagHelpers(); | ||
WriteLiteral("\r\n "); | ||
WriteLiteral(__tagHelperManager.GenerateTagEnd()); | ||
__tagHelperManager.EndTagHelpers(); | ||
WriteLiteral("\r\n</div>"); | ||
} | ||
#pragma warning restore 1998 | ||
} | ||
} |
Oops, something went wrong.