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

Commit 934bc61

Browse files
author
NTaylorMullen
committed
Added tests to validate tag helpers in sections and helpers.
1 parent 78a4a79 commit 934bc61

File tree

5 files changed

+276
-0
lines changed

5 files changed

+276
-0
lines changed

test/Microsoft.AspNet.Razor.Test/Generator/CSharpTagHelperRenderingTest.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,33 @@ namespace Microsoft.AspNet.Razor.Test.Generator
1313
{
1414
public class CSharpTagHelperRenderingTest : CSharpRazorCodeGeneratorTest
1515
{
16+
[Theory]
17+
[InlineData("TagHelpersInSection")]
18+
[InlineData("TagHelpersInHelper")]
19+
public void TagHelpers_WithinHelpersAndSections_GeneratesExpectedOutput(string testType)
20+
{
21+
// Arrange
22+
var myTagHelperBoundPI = new Mock<PropertyInfo>();
23+
myTagHelperBoundPI.Setup(bpi => bpi.PropertyType).Returns(typeof(string));
24+
myTagHelperBoundPI.Setup(bpi => bpi.Name).Returns("BoundProperty");
25+
var tagHelperProvider = new TagHelperDescriptorProvider(
26+
new TagHelperDescriptor[]
27+
{
28+
new TagHelperDescriptor("MyTagHelper",
29+
"MyTagHelper",
30+
ContentBehavior.None,
31+
new [] {
32+
new TagHelperAttributeDescriptor("BoundProperty",
33+
myTagHelperBoundPI.Object)
34+
}),
35+
new TagHelperDescriptor("NestedTagHelper", "NestedTagHelper", ContentBehavior.Modify)
36+
});
37+
38+
// Act & Assert
39+
RunTagHelperTest(testType, tagHelperProvider);
40+
}
41+
42+
1643
[Theory]
1744
[InlineData("SingleTagHelper")]
1845
[InlineData("BasicTagHelpers")]
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
namespace TestOutput
2+
{
3+
using Microsoft.AspNet.Razor.Runtime.TagHelpers;
4+
using System;
5+
using System.Threading.Tasks;
6+
7+
public class TagHelpersInHelper
8+
{
9+
private System.IO.TextWriter __tagHelperStringValueBuffer = null;
10+
private TagHelperExecutionContext __tagHelpersExecutionContext = null;
11+
private TagHelperRunner __tagHelperRunner = new TagHelperRunner();
12+
private TagHelperScopeManager __tagHelperScopeManager = new TagHelperScopeManager();
13+
private MyTagHelper __MyTagHelper = null;
14+
public static Template
15+
#line 1 "TagHelpersInHelper.cshtml"
16+
MyHelper(string val)
17+
{
18+
19+
#line default
20+
#line hidden
21+
return new Template((__razor_helper_writer) => {
22+
#line 2 "TagHelpersInHelper.cshtml"
23+
24+
25+
#line default
26+
#line hidden
27+
28+
WriteLiteralTo(__razor_helper_writer, " <div>\r\n ");
29+
__tagHelpersExecutionContext = __tagHelperScopeManager.Begin("mytaghelper");
30+
__MyTagHelper = CreateTagHelper<MyTagHelper>();
31+
__tagHelpersExecutionContext.Add(__MyTagHelper);
32+
StartWritingScope();
33+
WriteLiteral("Current Time: ");
34+
Write(
35+
#line 4 "TagHelpersInHelper.cshtml"
36+
DateTime.Now
37+
38+
#line default
39+
#line hidden
40+
);
41+
42+
__tagHelperStringValueBuffer = EndWritingScope();
43+
__MyTagHelper.BoundProperty = __tagHelperStringValueBuffer.ToString();
44+
__tagHelpersExecutionContext.AddTagHelperAttribute("BoundProperty", __MyTagHelper.BoundProperty);
45+
StartWritingScope();
46+
WriteLiteral("Current Time: ");
47+
Write(
48+
#line 4 "TagHelpersInHelper.cshtml"
49+
DateTime.Now
50+
51+
#line default
52+
#line hidden
53+
);
54+
55+
__tagHelperStringValueBuffer = EndWritingScope();
56+
__tagHelpersExecutionContext.AddHtmlAttribute("unboundproperty", __tagHelperStringValueBuffer.ToString());
57+
__tagHelpersExecutionContext.Output = __tagHelperRunner.RunAsync(__tagHelpersExecutionContext).Result;
58+
WriteLiteralTo(__razor_helper_writer, __tagHelpersExecutionContext.Output.GenerateStartTag());
59+
WriteLiteralTo(__razor_helper_writer, "\r\n In None ContentBehavior.\r\n ");
60+
__tagHelpersExecutionContext = __tagHelperScopeManager.Begin("nestedtaghelper");
61+
__NestedTagHelper = CreateTagHelper<NestedTagHelper>();
62+
__tagHelpersExecutionContext.Add(__NestedTagHelper);
63+
StartWritingScope();
64+
WriteLiteral("Some buffered values with a value of ");
65+
Write(
66+
#line 6 "TagHelpersInHelper.cshtml"
67+
val
68+
69+
#line default
70+
#line hidden
71+
);
72+
73+
__tagHelperStringValueBuffer = EndWritingScope();
74+
__tagHelpersExecutionContext.Output = __tagHelperRunner.RunAsync(__tagHelpersExecutionContext, __tagHelperStringValueBuffer).Result;
75+
WriteLiteralTo(__razor_helper_writer, __tagHelpersExecutionContext.Output.GenerateStartTag());
76+
WriteLiteralTo(__razor_helper_writer, __tagHelpersExecutionContext.Output.GenerateContent());
77+
WriteLiteralTo(__razor_helper_writer, __tagHelpersExecutionContext.Output.GenerateEndTag());
78+
__tagHelpersExecutionContext = __tagHelperScopeManager.End();
79+
WriteLiteralTo(__razor_helper_writer, "\r\n ");
80+
WriteLiteralTo(__razor_helper_writer, __tagHelpersExecutionContext.Output.GenerateEndTag());
81+
__tagHelpersExecutionContext = __tagHelperScopeManager.End();
82+
WriteLiteralTo(__razor_helper_writer, "\r\n </div>\r\n");
83+
#line 9 "TagHelpersInHelper.cshtml"
84+
85+
#line default
86+
#line hidden
87+
88+
}
89+
);
90+
#line 9 "TagHelpersInHelper.cshtml"
91+
}
92+
93+
#line default
94+
#line hidden
95+
96+
#line hidden
97+
public TagHelpersInHelper()
98+
{
99+
}
100+
101+
#pragma warning disable 1998
102+
public override async Task ExecuteAsync()
103+
{
104+
__tagHelpersExecutionContext = __tagHelperScopeManager.Begin("mytaghelper");
105+
__MyTagHelper = CreateTagHelper<MyTagHelper>();
106+
__tagHelpersExecutionContext.Add(__MyTagHelper);
107+
__tagHelpersExecutionContext.Output = __tagHelperRunner.RunAsync(__tagHelpersExecutionContext).Result;
108+
WriteLiteral(__tagHelpersExecutionContext.Output.GenerateStartTag());
109+
Write(
110+
#line 10 "TagHelpersInHelper.cshtml"
111+
MyHelper(
112+
113+
#line default
114+
#line hidden
115+
item => new Template((__razor_template_writer) => {
116+
__tagHelpersExecutionContext = __tagHelperScopeManager.Begin("nestedtaghelper");
117+
__NestedTagHelper = CreateTagHelper<NestedTagHelper>();
118+
__tagHelpersExecutionContext.Add(__NestedTagHelper);
119+
StartWritingScope();
120+
WriteLiteral("Custom Value");
121+
__tagHelperStringValueBuffer = EndWritingScope();
122+
__tagHelpersExecutionContext.Output = __tagHelperRunner.RunAsync(__tagHelpersExecutionContext, __tagHelperStringValueBuffer).Result;
123+
WriteLiteralTo(__razor_template_writer, __tagHelpersExecutionContext.Output.GenerateStartTag());
124+
WriteLiteralTo(__razor_template_writer, __tagHelpersExecutionContext.Output.GenerateContent());
125+
WriteLiteralTo(__razor_template_writer, __tagHelpersExecutionContext.Output.GenerateEndTag());
126+
__tagHelpersExecutionContext = __tagHelperScopeManager.End();
127+
}
128+
)
129+
#line 10 "TagHelpersInHelper.cshtml"
130+
)
131+
132+
#line default
133+
#line hidden
134+
);
135+
136+
WriteLiteral(__tagHelpersExecutionContext.Output.GenerateEndTag());
137+
__tagHelpersExecutionContext = __tagHelperScopeManager.End();
138+
WriteLiteral("\r\n");
139+
}
140+
#pragma warning restore 1998
141+
}
142+
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
namespace TestOutput
2+
{
3+
using System;
4+
using System.Threading.Tasks;
5+
6+
public class TagHelpersInSection
7+
{
8+
#line hidden
9+
public TagHelpersInSection()
10+
{
11+
}
12+
13+
#pragma warning disable 1998
14+
public override async Task ExecuteAsync()
15+
{
16+
#line 1 "TagHelpersInSection.cshtml"
17+
18+
var code = "some code";
19+
20+
#line default
21+
#line hidden
22+
23+
WriteLiteral("\r\n\r\n");
24+
DefineSection("MySection", new Template((__razor_template_writer) => {
25+
WriteLiteralTo(__razor_template_writer, "\r\n <div>\r\n ");
26+
__tagHelpersExecutionContext = __tagHelperScopeManager.Begin("mytaghelper");
27+
__MyTagHelper = CreateTagHelper<MyTagHelper>();
28+
__tagHelpersExecutionContext.Add(__MyTagHelper);
29+
StartWritingScope();
30+
WriteLiteral("Current Time: ");
31+
Write(
32+
#line 7 "TagHelpersInSection.cshtml"
33+
DateTime.Now
34+
35+
#line default
36+
#line hidden
37+
);
38+
39+
__tagHelperStringValueBuffer = EndWritingScope();
40+
__MyTagHelper.BoundProperty = __tagHelperStringValueBuffer.ToString();
41+
__tagHelpersExecutionContext.AddTagHelperAttribute("BoundProperty", __MyTagHelper.BoundProperty);
42+
StartWritingScope();
43+
WriteLiteral("Current Time: ");
44+
Write(
45+
#line 7 "TagHelpersInSection.cshtml"
46+
DateTime.Now
47+
48+
#line default
49+
#line hidden
50+
);
51+
52+
__tagHelperStringValueBuffer = EndWritingScope();
53+
__tagHelpersExecutionContext.AddHtmlAttribute("unboundproperty", __tagHelperStringValueBuffer.ToString());
54+
__tagHelpersExecutionContext.Output = __tagHelperRunner.RunAsync(__tagHelpersExecutionContext).Result;
55+
WriteLiteralTo(__razor_template_writer, __tagHelpersExecutionContext.Output.GenerateStartTag());
56+
WriteLiteralTo(__razor_template_writer, "\r\n In None ContentBehavior.\r\n ");
57+
__tagHelpersExecutionContext = __tagHelperScopeManager.Begin("nestedtaghelper");
58+
__NestedTagHelper = CreateTagHelper<NestedTagHelper>();
59+
__tagHelpersExecutionContext.Add(__NestedTagHelper);
60+
StartWritingScope();
61+
WriteLiteral("Some buffered values with ");
62+
Write(
63+
#line 9 "TagHelpersInSection.cshtml"
64+
code
65+
66+
#line default
67+
#line hidden
68+
);
69+
70+
__tagHelperStringValueBuffer = EndWritingScope();
71+
__tagHelpersExecutionContext.Output = __tagHelperRunner.RunAsync(__tagHelpersExecutionContext, __tagHelperStringValueBuffer).Result;
72+
WriteLiteralTo(__razor_template_writer, __tagHelpersExecutionContext.Output.GenerateStartTag());
73+
WriteLiteralTo(__razor_template_writer, __tagHelpersExecutionContext.Output.GenerateContent());
74+
WriteLiteralTo(__razor_template_writer, __tagHelpersExecutionContext.Output.GenerateEndTag());
75+
__tagHelpersExecutionContext = __tagHelperScopeManager.End();
76+
WriteLiteralTo(__razor_template_writer, "\r\n ");
77+
WriteLiteralTo(__razor_template_writer, __tagHelpersExecutionContext.Output.GenerateEndTag());
78+
__tagHelpersExecutionContext = __tagHelperScopeManager.End();
79+
WriteLiteralTo(__razor_template_writer, "\r\n </div>\r\n");
80+
}
81+
));
82+
}
83+
#pragma warning restore 1998
84+
}
85+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
@helper MyHelper(string val)
2+
{
3+
<div>
4+
<mytaghelper boundproperty="Current Time: @DateTime.Now" unboundproperty="Current Time: @DateTime.Now">
5+
In None ContentBehavior.
6+
<nestedtaghelper>Some buffered values with a value of @val</nestedtaghelper>
7+
</mytaghelper>
8+
</div>
9+
}
10+
<mytaghelper>@MyHelper(@<nestedtaghelper>Custom Value</nestedtaghelper>)</mytaghelper>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
@{
2+
var code = "some code";
3+
}
4+
5+
@section MySection {
6+
<div>
7+
<mytaghelper boundproperty="Current Time: @DateTime.Now" unboundproperty="Current Time: @DateTime.Now">
8+
In None ContentBehavior.
9+
<nestedtaghelper>Some buffered values with @code</nestedtaghelper>
10+
</mytaghelper>
11+
</div>
12+
}

0 commit comments

Comments
 (0)