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

Commit

Permalink
Add tests to validate @addtaghelper directive.
Browse files Browse the repository at this point in the history
- Fixed existing tests to work with new RazorParser.
- Validated directive syntax tree creation, errors and code generation.

#111
  • Loading branch information
NTaylorMullen committed Oct 9, 2014
1 parent b67b8da commit 7db4ed7
Show file tree
Hide file tree
Showing 23 changed files with 393 additions and 179 deletions.
5 changes: 5 additions & 0 deletions test/Microsoft.AspNet.Razor.Test/Framework/TestSpanBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,11 @@ public SpanConstructor AsRazorDirectiveAttribute(string key, string value)
return _self.With(new RazorDirectiveAttributeCodeGenerator(key, value));
}

public SpanConstructor AsAddTagHelper(string lookupText)
{
return _self.With(new AddTagHelperCodeGenerator(lookupText));
}

public SpanConstructor As(ISpanCodeGenerator codeGenerator)
{
return _self.With(codeGenerator);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -492,16 +492,41 @@ private void OpenedIf(bool withTabs)
});
}

private static LineMapping BuildLineMapping(int documentAbsoluteIndex, int documentLineIndex, int generatedAbsoluteIndex, int generatedLineIndex, int characterOffsetIndex, int contentLength)
{
return BuildLineMapping(documentAbsoluteIndex, documentLineIndex, characterOffsetIndex, generatedAbsoluteIndex, generatedLineIndex, characterOffsetIndex, contentLength);
}

private static LineMapping BuildLineMapping(int documentAbsoluteIndex, int documentLineIndex, int documentCharacterOffsetIndex, int generatedAbsoluteIndex, int generatedLineIndex, int generatedCharacterOffsetIndex, int contentLength)
protected static LineMapping BuildLineMapping(int documentAbsoluteIndex,
int documentLineIndex,
int generatedAbsoluteIndex,
int generatedLineIndex,
int characterOffsetIndex,
int contentLength)
{
return BuildLineMapping(documentAbsoluteIndex,
documentLineIndex,
characterOffsetIndex,
generatedAbsoluteIndex,
generatedLineIndex,
characterOffsetIndex,
contentLength);
}

protected static LineMapping BuildLineMapping(int documentAbsoluteIndex,
int documentLineIndex,
int documentCharacterOffsetIndex,
int generatedAbsoluteIndex,
int generatedLineIndex,
int generatedCharacterOffsetIndex,
int contentLength)
{
return new LineMapping(
documentLocation: new MappingLocation(new SourceLocation(documentAbsoluteIndex, documentLineIndex, documentCharacterOffsetIndex), contentLength),
generatedLocation: new MappingLocation(new SourceLocation(generatedAbsoluteIndex, generatedLineIndex, generatedCharacterOffsetIndex), contentLength)
documentLocation: new MappingLocation(
new SourceLocation(documentAbsoluteIndex,
documentLineIndex,
documentCharacterOffsetIndex),
contentLength),
generatedLocation: new MappingLocation(
new SourceLocation(generatedAbsoluteIndex,
generatedLineIndex,
generatedCharacterOffsetIndex),
contentLength)
);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
// 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.Collections.Generic;
using System.Reflection;
using Microsoft.AspNet.Razor.Generator.Compiler;
using Microsoft.AspNet.Razor.TagHelpers;
using Moq;
using Xunit;
Expand All @@ -10,6 +12,34 @@ namespace Microsoft.AspNet.Razor.Test.Generator
{
public class CSharpTagHelperRenderingTest : TagHelperTestBase
{
[Fact]
public void CSharpCodeGenerator_CorrectlyGeneratesMappings_ForAddTagHelperDirective()
{
// Act & Assert
RunTagHelperTest("AddTagHelperDirective",
designTimeMode: true,
expectedDesignTimePragmas: new List<LineMapping>()
{
BuildLineMapping(documentAbsoluteIndex: 14,
documentLineIndex: 0,
generatedAbsoluteIndex: 433,
generatedLineIndex: 14,
characterOffsetIndex: 14,
contentLength: 11)
});
}

[Fact]
public void TagHelpers_Directive_GenerateDesignTimeMappings()
{
// Act & Assert
RunTagHelperTest("AddTagHelperDirective",
designTimeMode: true,
tagHelperDescriptors: new[] {
new TagHelperDescriptor("p", "pTagHelper", ContentBehavior.None)
});
}

[Theory]
[InlineData("TagHelpersInSection")]
[InlineData("TagHelpersInHelper")]
Expand All @@ -19,21 +49,20 @@ public void TagHelpers_WithinHelpersAndSections_GeneratesExpectedOutput(string t
var propertyInfoMock = new Mock<PropertyInfo>();
propertyInfoMock.Setup(propertyInfo => propertyInfo.PropertyType).Returns(typeof(string));
propertyInfoMock.Setup(propertyInfo => propertyInfo.Name).Returns("BoundProperty");
var tagHelperDescriptorProvider = new TagHelperDescriptorProvider(
new TagHelperDescriptor[]
{
new TagHelperDescriptor("MyTagHelper",
"MyTagHelper",
ContentBehavior.None,
new [] {
new TagHelperAttributeDescriptor("BoundProperty",
propertyInfoMock.Object)
}),
new TagHelperDescriptor("NestedTagHelper", "NestedTagHelper", ContentBehavior.Modify)
});
var tagHelperDescriptors = new TagHelperDescriptor[]
{
new TagHelperDescriptor("MyTagHelper",
"MyTagHelper",
ContentBehavior.None,
new [] {
new TagHelperAttributeDescriptor("BoundProperty",
propertyInfoMock.Object)
}),
new TagHelperDescriptor("NestedTagHelper", "NestedTagHelper", ContentBehavior.Modify)
};

// Act & Assert
RunTagHelperTest(testType, tagHelperDescriptorProvider: tagHelperDescriptorProvider);
RunTagHelperTest(testType, tagHelperDescriptors: tagHelperDescriptors);
}

[Theory]
Expand All @@ -52,50 +81,48 @@ public void TagHelpers_GenerateExpectedOutput(string testType)
var checkedPropertyInfo = new Mock<PropertyInfo>();
checkedPropertyInfo.Setup(propertyInfo => propertyInfo.PropertyType).Returns(typeof(bool));
checkedPropertyInfo.Setup(propertyInfo => propertyInfo.Name).Returns("Checked");
var tagHelperDescriptorProvider = new TagHelperDescriptorProvider(
new TagHelperDescriptor[]
{
new TagHelperDescriptor("p",
"PTagHelper",
ContentBehavior.None,
new [] {
new TagHelperAttributeDescriptor("foo", pFooPropertyInfo.Object)
}),
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)
}),
});
var tagHelperDescriptors = new TagHelperDescriptor[]
{
new TagHelperDescriptor("p",
"PTagHelper",
ContentBehavior.None,
new [] {
new TagHelperAttributeDescriptor("foo", pFooPropertyInfo.Object)
}),
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, tagHelperDescriptorProvider: tagHelperDescriptorProvider);
RunTagHelperTest(testType, tagHelperDescriptors: tagHelperDescriptors);
}

[Fact]
public void TagHelpers_WithContentBehaviors_GenerateExpectedOutput()
{
// Arrange
var tagHelperDescriptorProvider = new TagHelperDescriptorProvider(
new TagHelperDescriptor[]
{
var tagHelperDescriptors = 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", tagHelperDescriptorProvider: tagHelperDescriptorProvider);
RunTagHelperTest("ContentBehaviorTagHelpers", tagHelperDescriptors: tagHelperDescriptors);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using Microsoft.AspNet.Razor.Generator.Compiler.CSharp;
using Microsoft.AspNet.Razor.Parser;
using Microsoft.AspNet.Razor.Parser.SyntaxTree;
using Microsoft.AspNet.Razor.TagHelpers;
using Xunit;

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

var parser = new RazorParser(new CSharpCodeParser(), new HtmlMarkupParser());
var parser = new RazorParser(new CSharpCodeParser(),
new HtmlMarkupParser(),
tagHelperDescriptorResolver: null);

Span[] spans;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,29 +24,28 @@ public void TagHelpers_CanReplaceAttributeCodeGeneratorLogic()
var checkedPropertyInfo = new Mock<PropertyInfo>();
checkedPropertyInfo.Setup(propertyInfo => propertyInfo.PropertyType).Returns(typeof(bool));
checkedPropertyInfo.Setup(propertyInfo => propertyInfo.Name).Returns("Checked");
var tagHelperDescriptorProvider = 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)
}),
});
var tagHelperDescriptors = 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(testName: "BasicTagHelpers",
baseLineName: "BasicTagHelpers.CustomAttributeCodeGenerator",
tagHelperDescriptorProvider: tagHelperDescriptorProvider,
tagHelperDescriptors: tagHelperDescriptors,
hostConfig: (host) =>
{
return new CodeBuilderReplacingHost(host);
Expand Down
Loading

0 comments on commit 7db4ed7

Please sign in to comment.