public void GetDescriptors_ReturnsNothingForUnregisteredTags() { // Arrange var divDescriptor = new TagHelperDescriptor { TagName = "div", TypeName = "foo1", AssemblyName = "SomeAssembly", }; var spanDescriptor = new TagHelperDescriptor { TagName = "span", TypeName = "foo2", AssemblyName = "SomeAssembly", }; var descriptors = new TagHelperDescriptor[] { divDescriptor, spanDescriptor }; var provider = new TagHelperDescriptorProvider(descriptors); // Act var retrievedDescriptors = provider.GetDescriptors( tagName: "foo", attributeNames: Enumerable.Empty <string>(), parentTagName: "p"); // Assert Assert.Empty(retrievedDescriptors); }
public void GetDescriptors_ReturnsDescriptorsWithRequiredAttributes( string tagName, IEnumerable <string> providedAttributes, IEnumerable <TagHelperDescriptor> availableDescriptors, IEnumerable <TagHelperDescriptor> expectedDescriptors) { // Arrange var provider = new TagHelperDescriptorProvider(availableDescriptors); // Act var resolvedDescriptors = provider.GetDescriptors(tagName, providedAttributes, parentTagName: "p"); // Assert Assert.Equal(expectedDescriptors, resolvedDescriptors, CaseSensitiveTagHelperDescriptorComparer.Default); }
public void GetDescriptors_ReturnsNothingForUnprefixedTags(string tagName) { // Arrange var divDescriptor = CreatePrefixedDescriptor("th:", tagName, "foo1"); var descriptors = new[] { divDescriptor }; var provider = new TagHelperDescriptorProvider(descriptors); // Act var retrievedDescriptorsDiv = provider.GetDescriptors( tagName: "div", attributeNames: Enumerable.Empty <string>(), parentTagName: "p"); // Assert Assert.Empty(retrievedDescriptorsDiv); }
public void EvaluateData( TagHelperDescriptorProvider provider, string documentContent, MarkupBlock expectedOutput, IEnumerable<RazorError> expectedErrors) { var errorSink = new ErrorSink(); var results = ParseDocument(documentContent, errorSink); var rewritingContext = new RewritingContext(results.Document, errorSink); new TagHelperParseTreeRewriter(provider).Rewrite(rewritingContext); var rewritten = rewritingContext.SyntaxTree; var actualErrors = errorSink.Errors.OrderBy(error => error.Location.AbsoluteIndex) .ToList(); EvaluateRazorErrors(actualErrors, expectedErrors.ToList()); EvaluateParseTree(rewritten, expectedOutput); }
public void GetDescriptors_ReturnsCatchAllsWithEveryTagName() { // Arrange var divDescriptor = new TagHelperDescriptor { TagName = "div", TypeName = "foo1", AssemblyName = "SomeAssembly", }; var spanDescriptor = new TagHelperDescriptor { TagName = "span", TypeName = "foo2", AssemblyName = "SomeAssembly", }; var catchAllDescriptor = new TagHelperDescriptor { TagName = TagHelperDescriptorProvider.ElementCatchAllTarget, TypeName = "foo3", AssemblyName = "SomeAssembly", }; var descriptors = new TagHelperDescriptor[] { divDescriptor, spanDescriptor, catchAllDescriptor }; var provider = new TagHelperDescriptorProvider(descriptors); // Act var divDescriptors = provider.GetDescriptors( tagName: "div", attributeNames: Enumerable.Empty <string>(), parentTagName: "p"); var spanDescriptors = provider.GetDescriptors( tagName: "span", attributeNames: Enumerable.Empty <string>(), parentTagName: "p"); // Assert // For divs Assert.Equal(2, divDescriptors.Count()); Assert.Contains(divDescriptor, divDescriptors); Assert.Contains(catchAllDescriptor, divDescriptors); // For spans Assert.Equal(2, spanDescriptors.Count()); Assert.Contains(spanDescriptor, spanDescriptors); Assert.Contains(catchAllDescriptor, spanDescriptors); }
public void GetDescriptors_ReturnsDescriptorsForPrefixedTags() { // Arrange var divDescriptor = CreatePrefixedDescriptor("th:", "div", "foo1"); var descriptors = new[] { divDescriptor }; var provider = new TagHelperDescriptorProvider(descriptors); // Act var retrievedDescriptors = provider.GetDescriptors( tagName: "th:div", attributeNames: Enumerable.Empty <string>(), parentTagName: "p"); // Assert var descriptor = Assert.Single(retrievedDescriptors); Assert.Same(divDescriptor, descriptor); }
public void GetDescriptors_ReturnsEmptyDescriptorsWithPrefixAsTagName() { // Arrange var catchAllDescriptor = CreatePrefixedDescriptor( "th", TagHelperDescriptorProvider.ElementCatchAllTarget, "foo1"); var descriptors = new[] { catchAllDescriptor }; var provider = new TagHelperDescriptorProvider(descriptors); // Act var resolvedDescriptors = provider.GetDescriptors( tagName: "th", attributeNames: Enumerable.Empty <string>(), parentTagName: "p"); // Assert Assert.Empty(resolvedDescriptors); }
public void GetDescriptors_DuplicateDescriptorsAreNotPartOfTagHelperDescriptorPool() { // Arrange var divDescriptor = new TagHelperDescriptor { TagName = "div", TypeName = "foo1", AssemblyName = "SomeAssembly", }; var descriptors = new TagHelperDescriptor[] { divDescriptor, divDescriptor }; var provider = new TagHelperDescriptorProvider(descriptors); // Act var retrievedDescriptors = provider.GetDescriptors( tagName: "div", attributeNames: Enumerable.Empty <string>(), parentTagName: "p"); // Assert var descriptor = Assert.Single(retrievedDescriptors); Assert.Same(divDescriptor, descriptor); }
public void GetDescriptors_ReturnsCatchAllDescriptorsForPrefixedTags() { // Arrange var catchAllDescriptor = CreatePrefixedDescriptor("th:", TagHelperDescriptorProvider.ElementCatchAllTarget, "foo1"); var descriptors = new[] { catchAllDescriptor }; var provider = new TagHelperDescriptorProvider(descriptors); // Act var retrievedDescriptorsDiv = provider.GetDescriptors( tagName: "th:div", attributeNames: Enumerable.Empty <string>(), parentTagName: "p"); var retrievedDescriptorsSpan = provider.GetDescriptors( tagName: "th:span", attributeNames: Enumerable.Empty <string>(), parentTagName: "p"); // Assert var descriptor = Assert.Single(retrievedDescriptorsDiv); Assert.Same(catchAllDescriptor, descriptor); descriptor = Assert.Single(retrievedDescriptorsSpan); Assert.Same(catchAllDescriptor, descriptor); }
public void GetDescriptors_OnlyUnderstandsSinglePrefix() { // Arrange var divDescriptor = CreatePrefixedDescriptor("th:", "div", "foo1"); var spanDescriptor = CreatePrefixedDescriptor("th2:", "span", "foo2"); var descriptors = new[] { divDescriptor, spanDescriptor }; var provider = new TagHelperDescriptorProvider(descriptors); // Act var retrievedDescriptorsDiv = provider.GetDescriptors( tagName: "th:div", attributeNames: Enumerable.Empty <string>(), parentTagName: "p"); var retrievedDescriptorsSpan = provider.GetDescriptors( tagName: "th2:span", attributeNames: Enumerable.Empty <string>(), parentTagName: "p"); // Assert var descriptor = Assert.Single(retrievedDescriptorsDiv); Assert.Same(divDescriptor, descriptor); Assert.Empty(retrievedDescriptorsSpan); }
private ParserResults ParseCore(ITextDocument input) { // Setup the parser context var errorSink = new ErrorSink(); var context = new ParserContext(input, CodeParser, MarkupParser, MarkupParser, errorSink) { DesignTimeMode = DesignTimeMode }; MarkupParser.Context = context; CodeParser.Context = context; // Execute the parse MarkupParser.ParseDocument(); // Get the result var results = context.CompleteParse(); // Rewrite whitespace if supported var rewritingContext = new RewritingContext(results.Document, errorSink); foreach (ISyntaxTreeRewriter rewriter in Optimizers) { rewriter.Rewrite(rewritingContext); } var descriptors = Enumerable.Empty<TagHelperDescriptor>(); if (TagHelperDescriptorResolver != null) { descriptors = GetTagHelperDescriptors(rewritingContext.SyntaxTree, rewritingContext.ErrorSink); var tagHelperProvider = new TagHelperDescriptorProvider(descriptors); var tagHelperParseTreeRewriter = new TagHelperParseTreeRewriter(tagHelperProvider); // Rewrite the document to utilize tag helpers tagHelperParseTreeRewriter.Rewrite(rewritingContext); } var syntaxTree = rewritingContext.SyntaxTree; // Link the leaf nodes into a chain Span prev = null; foreach (Span node in syntaxTree.Flatten()) { node.Previous = prev; if (prev != null) { prev.Next = node; } prev = node; } // Return the new result return new ParserResults(syntaxTree, descriptors, errorSink); }