Added test for DefaultRazorSyntaxFactsService
This commit is contained in:
parent
34054339ed
commit
52a06e93bc
|
|
@ -13,10 +13,6 @@
|
|||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.HashCodeCombiner.Sources" PrivateAssets="All" Version="$(MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion)" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../Microsoft.AspNetCore.Razor.Language/Microsoft.AspNetCore.Razor.Language.csproj" />
|
||||
<ProjectReference Include="../Microsoft.CodeAnalysis.Razor/Microsoft.CodeAnalysis.Razor.csproj" />
|
||||
|
|
|
|||
|
|
@ -12,10 +12,6 @@
|
|||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.HashCodeCombiner.Sources" PrivateAssets="All" Version="$(MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion)" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../Microsoft.AspNetCore.Razor.Language/Microsoft.AspNetCore.Razor.Language.csproj" />
|
||||
<ProjectReference Include="../Microsoft.CodeAnalysis.Razor/Microsoft.CodeAnalysis.Razor.csproj" />
|
||||
|
|
|
|||
|
|
@ -0,0 +1,104 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using Microsoft.AspNetCore.Razor.Language;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.VisualStudio.Editor.Razor
|
||||
{
|
||||
public class DefaultRazorSyntaxFactsServiceTest
|
||||
{
|
||||
[Fact]
|
||||
public void GetClassifiedSpans_ReturnsExpectedSpans()
|
||||
{
|
||||
// Arrange
|
||||
var expectedSpans = new[]
|
||||
{
|
||||
new ClassifiedSpan(new SourceSpan("test.cshtml", 0, 0, 0, 5), new SourceSpan("test.cshtml", 0, 0, 0, 5), SpanKind.Markup, BlockKind.Tag, AcceptedCharacters.Any),
|
||||
new ClassifiedSpan(new SourceSpan("test.cshtml", 5, 0, 5, 6), new SourceSpan("test.cshtml", 0, 0, 0, 42), SpanKind.Markup, BlockKind.Markup, AcceptedCharacters.Any),
|
||||
new ClassifiedSpan(new SourceSpan("test.cshtml", 34, 1, 27, 2), new SourceSpan("test.cshtml", 0, 0, 0, 42), SpanKind.Markup, BlockKind.Markup, AcceptedCharacters.Any),
|
||||
new ClassifiedSpan(new SourceSpan("test.cshtml", 36, 2, 0, 6), new SourceSpan("test.cshtml", 36, 2, 0, 6), SpanKind.Markup, BlockKind.Tag, AcceptedCharacters.Any),
|
||||
};
|
||||
var codeDocument = GetCodeDocument(
|
||||
@"<div>
|
||||
<taghelper></taghelper>
|
||||
</div>");
|
||||
var syntaxTree = codeDocument.GetSyntaxTree();
|
||||
var service = new DefaultRazorSyntaxFactsService();
|
||||
|
||||
// Act
|
||||
var spans = service.GetClassifiedSpans(syntaxTree);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(expectedSpans, spans);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetClassifiedSpans_ReturnsAttributeSpansInDocumentOrder()
|
||||
{
|
||||
// Arrange
|
||||
var expectedSpans = new[]
|
||||
{
|
||||
new ClassifiedSpan(new SourceSpan("test.cshtml", 14, 0, 14, 1), new SourceSpan("test.cshtml", 0, 0, 0, 49), SpanKind.Code, BlockKind.Tag, AcceptedCharacters.AnyExceptNewline),
|
||||
new ClassifiedSpan(new SourceSpan("test.cshtml", 23, 0, 23, 2), new SourceSpan("test.cshtml", 0, 0, 0, 49), SpanKind.Markup, BlockKind.Tag, AcceptedCharacters.Any),
|
||||
new ClassifiedSpan(new SourceSpan("test.cshtml", 32, 0, 32, 4), new SourceSpan("test.cshtml", 0, 0, 0, 49), SpanKind.Code, BlockKind.Tag, AcceptedCharacters.AnyExceptNewline),
|
||||
};
|
||||
var codeDocument = GetCodeDocument(
|
||||
@"<taghelper id=1 class=""th"" show=true></taghelper>");
|
||||
var syntaxTree = codeDocument.GetSyntaxTree();
|
||||
var service = new DefaultRazorSyntaxFactsService();
|
||||
|
||||
// Act
|
||||
var spans = service.GetClassifiedSpans(syntaxTree);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(expectedSpans, spans);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetTagHelperSpans_ReturnsExpectedSpans()
|
||||
{
|
||||
// Arrange
|
||||
var codeDocument = GetCodeDocument(
|
||||
@"<div>
|
||||
<taghelper></taghelper>
|
||||
</div>");
|
||||
var tagHelperContext = codeDocument.GetTagHelperContext();
|
||||
var expectedSourceSpan = new SourceSpan("test.cshtml", 11, 1, 4, 23);
|
||||
var syntaxTree = codeDocument.GetSyntaxTree();
|
||||
var service = new DefaultRazorSyntaxFactsService();
|
||||
|
||||
// Act
|
||||
var spans = service.GetTagHelperSpans(syntaxTree);
|
||||
|
||||
// Assert
|
||||
var actualSpan = Assert.Single(spans);
|
||||
Assert.Equal(expectedSourceSpan, actualSpan.Span);
|
||||
Assert.Equal(tagHelperContext.TagHelpers, actualSpan.TagHelpers);
|
||||
Assert.Equal(tagHelperContext.Prefix, actualSpan.Binding.TagHelperPrefix);
|
||||
Assert.Equal("div", actualSpan.Binding.ParentTagName);
|
||||
}
|
||||
|
||||
private static RazorCodeDocument GetCodeDocument(string source)
|
||||
{
|
||||
var taghelper = TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly")
|
||||
.BoundAttributeDescriptor(attr => attr.Name("show").TypeName("System.Boolean"))
|
||||
.BoundAttributeDescriptor(attr => attr.Name("id").TypeName("System.Int32"))
|
||||
.TagMatchingRuleDescriptor(rule => rule.RequireTagName("taghelper"))
|
||||
.TypeName("TestTagHelper")
|
||||
.Build();
|
||||
var engine = RazorEngine.CreateDesignTime(builder =>
|
||||
{
|
||||
builder.AddTagHelpers(taghelper);
|
||||
});
|
||||
|
||||
var sourceDocument = RazorSourceDocument.Create(source, "test.cshtml");
|
||||
var addTagHelperImport = RazorSourceDocument.Create("@addTagHelper *, TestAssembly", "import.cshtml");
|
||||
var codeDocument = RazorCodeDocument.Create(sourceDocument, new[] { addTagHelperImport });
|
||||
|
||||
engine.Process(codeDocument);
|
||||
|
||||
return codeDocument;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue