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

Commit da3051a

Browse files
author
N. Taylor Mullen
committed
Add tests to validate @addtaghelper directive.
- Fixed existing tests to work with new RazorParser. - Validated directive syntax tree creation, errors and code generation. #111
1 parent 51f5221 commit da3051a

23 files changed

+393
-179
lines changed

test/Microsoft.AspNet.Razor.Test/Framework/TestSpanBuilder.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,11 @@ public SpanConstructor AsRazorDirectiveAttribute(string key, string value)
300300
return _self.With(new RazorDirectiveAttributeCodeGenerator(key, value));
301301
}
302302

303+
public SpanConstructor AsAddTagHelper(string lookupText)
304+
{
305+
return _self.With(new AddTagHelperCodeGenerator(lookupText));
306+
}
307+
303308
public SpanConstructor As(ISpanCodeGenerator codeGenerator)
304309
{
305310
return _self.With(codeGenerator);

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

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -456,16 +456,41 @@ private void OpenedIf(bool withTabs)
456456
});
457457
}
458458

459-
private static LineMapping BuildLineMapping(int documentAbsoluteIndex, int documentLineIndex, int generatedAbsoluteIndex, int generatedLineIndex, int characterOffsetIndex, int contentLength)
460-
{
461-
return BuildLineMapping(documentAbsoluteIndex, documentLineIndex, characterOffsetIndex, generatedAbsoluteIndex, generatedLineIndex, characterOffsetIndex, contentLength);
462-
}
463-
464-
private static LineMapping BuildLineMapping(int documentAbsoluteIndex, int documentLineIndex, int documentCharacterOffsetIndex, int generatedAbsoluteIndex, int generatedLineIndex, int generatedCharacterOffsetIndex, int contentLength)
459+
protected static LineMapping BuildLineMapping(int documentAbsoluteIndex,
460+
int documentLineIndex,
461+
int generatedAbsoluteIndex,
462+
int generatedLineIndex,
463+
int characterOffsetIndex,
464+
int contentLength)
465+
{
466+
return BuildLineMapping(documentAbsoluteIndex,
467+
documentLineIndex,
468+
characterOffsetIndex,
469+
generatedAbsoluteIndex,
470+
generatedLineIndex,
471+
characterOffsetIndex,
472+
contentLength);
473+
}
474+
475+
protected static LineMapping BuildLineMapping(int documentAbsoluteIndex,
476+
int documentLineIndex,
477+
int documentCharacterOffsetIndex,
478+
int generatedAbsoluteIndex,
479+
int generatedLineIndex,
480+
int generatedCharacterOffsetIndex,
481+
int contentLength)
465482
{
466483
return new LineMapping(
467-
documentLocation: new MappingLocation(new SourceLocation(documentAbsoluteIndex, documentLineIndex, documentCharacterOffsetIndex), contentLength),
468-
generatedLocation: new MappingLocation(new SourceLocation(generatedAbsoluteIndex, generatedLineIndex, generatedCharacterOffsetIndex), contentLength)
484+
documentLocation: new MappingLocation(
485+
new SourceLocation(documentAbsoluteIndex,
486+
documentLineIndex,
487+
documentCharacterOffsetIndex),
488+
contentLength),
489+
generatedLocation: new MappingLocation(
490+
new SourceLocation(generatedAbsoluteIndex,
491+
generatedLineIndex,
492+
generatedCharacterOffsetIndex),
493+
contentLength)
469494
);
470495
}
471496
}
Lines changed: 69 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

4+
using System.Collections.Generic;
45
using System.Reflection;
6+
using Microsoft.AspNet.Razor.Generator.Compiler;
57
using Microsoft.AspNet.Razor.TagHelpers;
68
using Moq;
79
using Xunit;
@@ -10,6 +12,34 @@ namespace Microsoft.AspNet.Razor.Test.Generator
1012
{
1113
public class CSharpTagHelperRenderingTest : TagHelperTestBase
1214
{
15+
[Fact]
16+
public void CSharpCodeGenerator_CorrectlyGeneratesMappings_ForAddTagHelperDirective()
17+
{
18+
// Act & Assert
19+
RunTagHelperTest("AddTagHelperDirective",
20+
designTimeMode: true,
21+
expectedDesignTimePragmas: new List<LineMapping>()
22+
{
23+
BuildLineMapping(documentAbsoluteIndex: 14,
24+
documentLineIndex: 0,
25+
generatedAbsoluteIndex: 433,
26+
generatedLineIndex: 14,
27+
characterOffsetIndex: 14,
28+
contentLength: 11)
29+
});
30+
}
31+
32+
[Fact]
33+
public void TagHelpers_Directive_GenerateDesignTimeMappings()
34+
{
35+
// Act & Assert
36+
RunTagHelperTest("AddTagHelperDirective",
37+
designTimeMode: true,
38+
tagHelperDescriptors: new[] {
39+
new TagHelperDescriptor("p", "pTagHelper", ContentBehavior.None)
40+
});
41+
}
42+
1343
[Theory]
1444
[InlineData("TagHelpersInSection")]
1545
[InlineData("TagHelpersInHelper")]
@@ -19,21 +49,20 @@ public void TagHelpers_WithinHelpersAndSections_GeneratesExpectedOutput(string t
1949
var propertyInfoMock = new Mock<PropertyInfo>();
2050
propertyInfoMock.Setup(propertyInfo => propertyInfo.PropertyType).Returns(typeof(string));
2151
propertyInfoMock.Setup(propertyInfo => propertyInfo.Name).Returns("BoundProperty");
22-
var tagHelperDescriptorProvider = new TagHelperDescriptorProvider(
23-
new TagHelperDescriptor[]
24-
{
25-
new TagHelperDescriptor("MyTagHelper",
26-
"MyTagHelper",
27-
ContentBehavior.None,
28-
new [] {
29-
new TagHelperAttributeDescriptor("BoundProperty",
30-
propertyInfoMock.Object)
31-
}),
32-
new TagHelperDescriptor("NestedTagHelper", "NestedTagHelper", ContentBehavior.Modify)
33-
});
52+
var tagHelperDescriptors = new TagHelperDescriptor[]
53+
{
54+
new TagHelperDescriptor("MyTagHelper",
55+
"MyTagHelper",
56+
ContentBehavior.None,
57+
new [] {
58+
new TagHelperAttributeDescriptor("BoundProperty",
59+
propertyInfoMock.Object)
60+
}),
61+
new TagHelperDescriptor("NestedTagHelper", "NestedTagHelper", ContentBehavior.Modify)
62+
};
3463

3564
// Act & Assert
36-
RunTagHelperTest(testType, tagHelperDescriptorProvider: tagHelperDescriptorProvider);
65+
RunTagHelperTest(testType, tagHelperDescriptors: tagHelperDescriptors);
3766
}
3867

3968
[Theory]
@@ -52,50 +81,48 @@ public void TagHelpers_GenerateExpectedOutput(string testType)
5281
var checkedPropertyInfo = new Mock<PropertyInfo>();
5382
checkedPropertyInfo.Setup(propertyInfo => propertyInfo.PropertyType).Returns(typeof(bool));
5483
checkedPropertyInfo.Setup(propertyInfo => propertyInfo.Name).Returns("Checked");
55-
var tagHelperDescriptorProvider = new TagHelperDescriptorProvider(
56-
new TagHelperDescriptor[]
57-
{
58-
new TagHelperDescriptor("p",
59-
"PTagHelper",
60-
ContentBehavior.None,
61-
new [] {
62-
new TagHelperAttributeDescriptor("foo", pFooPropertyInfo.Object)
63-
}),
64-
new TagHelperDescriptor("input",
65-
"InputTagHelper",
66-
ContentBehavior.None,
67-
new TagHelperAttributeDescriptor[] {
68-
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo.Object)
69-
}),
70-
new TagHelperDescriptor("input",
71-
"InputTagHelper2",
72-
ContentBehavior.None,
73-
new TagHelperAttributeDescriptor[] {
74-
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo.Object),
75-
new TagHelperAttributeDescriptor("checked", checkedPropertyInfo.Object)
76-
}),
77-
});
84+
var tagHelperDescriptors = new TagHelperDescriptor[]
85+
{
86+
new TagHelperDescriptor("p",
87+
"PTagHelper",
88+
ContentBehavior.None,
89+
new [] {
90+
new TagHelperAttributeDescriptor("foo", pFooPropertyInfo.Object)
91+
}),
92+
new TagHelperDescriptor("input",
93+
"InputTagHelper",
94+
ContentBehavior.None,
95+
new TagHelperAttributeDescriptor[] {
96+
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo.Object)
97+
}),
98+
new TagHelperDescriptor("input",
99+
"InputTagHelper2",
100+
ContentBehavior.None,
101+
new TagHelperAttributeDescriptor[] {
102+
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo.Object),
103+
new TagHelperAttributeDescriptor("checked", checkedPropertyInfo.Object)
104+
})
105+
};
78106

79107
// Act & Assert
80-
RunTagHelperTest(testType, tagHelperDescriptorProvider: tagHelperDescriptorProvider);
108+
RunTagHelperTest(testType, tagHelperDescriptors: tagHelperDescriptors);
81109
}
82110

83111
[Fact]
84112
public void TagHelpers_WithContentBehaviors_GenerateExpectedOutput()
85113
{
86114
// Arrange
87-
var tagHelperDescriptorProvider = new TagHelperDescriptorProvider(
88-
new TagHelperDescriptor[]
89-
{
115+
var tagHelperDescriptors = new TagHelperDescriptor[]
116+
{
90117
new TagHelperDescriptor("modify", "ModifyTagHelper", ContentBehavior.Modify),
91118
new TagHelperDescriptor("none", "NoneTagHelper", ContentBehavior.None),
92119
new TagHelperDescriptor("append", "AppendTagHelper", ContentBehavior.Append),
93120
new TagHelperDescriptor("prepend", "PrependTagHelper", ContentBehavior.Prepend),
94121
new TagHelperDescriptor("replace", "ReplaceTagHelper", ContentBehavior.Replace),
95-
});
122+
};
96123

97124
// Act & Assert
98-
RunTagHelperTest("ContentBehaviorTagHelpers", tagHelperDescriptorProvider: tagHelperDescriptorProvider);
125+
RunTagHelperTest("ContentBehaviorTagHelpers", tagHelperDescriptors: tagHelperDescriptors);
99126
}
100127
}
101128
}

test/Microsoft.AspNet.Razor.Test/Generator/CodeTree/CSharpPaddingBuilderTests.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Microsoft.AspNet.Razor.Generator.Compiler.CSharp;
99
using Microsoft.AspNet.Razor.Parser;
1010
using Microsoft.AspNet.Razor.Parser.SyntaxTree;
11+
using Microsoft.AspNet.Razor.TagHelpers;
1112
using Xunit;
1213

1314
namespace Microsoft.AspNet.Razor.Test.Generator
@@ -221,7 +222,9 @@ private static Span[] GenerateSpans(string text, SpanKind spanKind, int spanInde
221222
{
222223
Assert.True(spanIndex > 0);
223224

224-
var parser = new RazorParser(new CSharpCodeParser(), new HtmlMarkupParser());
225+
var parser = new RazorParser(new CSharpCodeParser(),
226+
new HtmlMarkupParser(),
227+
tagHelperDescriptorResolver: null);
225228

226229
Span[] spans;
227230

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

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -24,29 +24,28 @@ public void TagHelpers_CanReplaceAttributeCodeGeneratorLogic()
2424
var checkedPropertyInfo = new Mock<PropertyInfo>();
2525
checkedPropertyInfo.Setup(propertyInfo => propertyInfo.PropertyType).Returns(typeof(bool));
2626
checkedPropertyInfo.Setup(propertyInfo => propertyInfo.Name).Returns("Checked");
27-
var tagHelperDescriptorProvider = new TagHelperDescriptorProvider(
28-
new TagHelperDescriptor[]
29-
{
30-
new TagHelperDescriptor("p", "PTagHelper", ContentBehavior.None),
31-
new TagHelperDescriptor("input",
32-
"InputTagHelper",
33-
ContentBehavior.None,
34-
new TagHelperAttributeDescriptor[] {
35-
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo.Object)
36-
}),
37-
new TagHelperDescriptor("input",
38-
"InputTagHelper2",
39-
ContentBehavior.None,
40-
new TagHelperAttributeDescriptor[] {
41-
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo.Object),
42-
new TagHelperAttributeDescriptor("checked", checkedPropertyInfo.Object)
43-
}),
44-
});
27+
var tagHelperDescriptors = new TagHelperDescriptor[]
28+
{
29+
new TagHelperDescriptor("p", "PTagHelper", ContentBehavior.None),
30+
new TagHelperDescriptor("input",
31+
"InputTagHelper",
32+
ContentBehavior.None,
33+
new TagHelperAttributeDescriptor[] {
34+
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo.Object)
35+
}),
36+
new TagHelperDescriptor("input",
37+
"InputTagHelper2",
38+
ContentBehavior.None,
39+
new TagHelperAttributeDescriptor[] {
40+
new TagHelperAttributeDescriptor("type", inputTypePropertyInfo.Object),
41+
new TagHelperAttributeDescriptor("checked", checkedPropertyInfo.Object)
42+
})
43+
};
4544

4645
// Act & Assert
4746
RunTagHelperTest(testName: "BasicTagHelpers",
4847
baseLineName: "BasicTagHelpers.CustomAttributeCodeGenerator",
49-
tagHelperDescriptorProvider: tagHelperDescriptorProvider,
48+
tagHelperDescriptors: tagHelperDescriptors,
5049
hostConfig: (host) =>
5150
{
5251
return new CodeBuilderReplacingHost(host);

0 commit comments

Comments
 (0)