public void GetCompletionAt_AtAttributeEdge_BoolAttribute_ReturnsCompletionsWithoutSnippet() { // Arrange var service = new DefaultTagHelperCompletionService(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService); var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test2 />", DefaultTagHelpers); var sourceSpan = new SourceSpan(36 + Environment.NewLine.Length, 0); // Act var completions = service.GetCompletionsAt(sourceSpan, codeDocument); // Assert Assert.Collection( completions, completion => { Assert.Equal("bool-val", completion.InsertText); Assert.Equal(InsertTextFormat.PlainText, completion.InsertTextFormat); Assert.Equal(new[] { "=", " " }, completion.CommitCharacters); }, completion => { Assert.Equal("int-val", completion.InsertText); Assert.Equal(InsertTextFormat.PlainText, completion.InsertTextFormat); Assert.Equal(new[] { "=" }, completion.CommitCharacters); }); }
public void GetCompletionAt_AtAttributeEdge_IndexerAttribute_ReturnsCompletionsWithSnippet() { // Arrange var tagHelper = TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly"); tagHelper.TagMatchingRule(rule => rule.TagName = "test"); tagHelper.SetTypeName("TestTagHelper"); tagHelper.BindAttribute(attribute => { attribute.Name = "int-val"; attribute.SetPropertyName("IntVal"); attribute.TypeName = ("System.Collections.Generic.IDictionary<System.String, System.Int32>"); attribute.AsDictionary("int-val-", typeof(int).FullName); }); var service = new DefaultTagHelperCompletionService(RazorTagHelperCompletionService); var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test />", tagHelper.Build()); var sourceSpan = new SourceSpan(35 + Environment.NewLine.Length, 0); // Act var completions = service.GetCompletionsAt(sourceSpan, codeDocument); // Assert Assert.Collection( completions, completion => { Assert.Equal("int-val=\"$1\"", completion.InsertText); Assert.Equal(InsertTextFormat.Snippet, completion.InsertTextFormat); }, completion => { Assert.Equal("int-val-$1=\"$2\"", completion.InsertText); Assert.Equal(InsertTextFormat.Snippet, completion.InsertTextFormat); }); }
public void StringifyAttributes_MinimizedTagHelperAttribute() { // Arrange var tagHelper = TagHelperDescriptorBuilder.Create("WithBoundAttribute", "TestAssembly"); tagHelper.TagMatchingRule(rule => rule.TagName = "test"); tagHelper.BindAttribute(attribute => { attribute.Name = "bound"; attribute.SetPropertyName("Bound"); attribute.TypeName = typeof(bool).FullName; }); tagHelper.SetTypeName("WithBoundAttribute"); var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test bound />", tagHelper.Build()); var syntaxTree = codeDocument.GetSyntaxTree(); var sourceSpan = new SourceSpan(30 + Environment.NewLine.Length, 0); var sourceChangeLocation = new SourceChange(sourceSpan, string.Empty); var startTag = (MarkupTagHelperStartTagSyntax)syntaxTree.Root.LocateOwner(sourceChangeLocation).Parent; // Act var attributes = DefaultTagHelperCompletionService.StringifyAttributes(startTag.Attributes); // Assert Assert.Collection( attributes, attribute => { Assert.Equal("bound", attribute.Key); Assert.Equal(string.Empty, attribute.Value); }); }
public void GetCompletionAt_AtAttributeEdge_IndexerAttribute_WithoutSnippetSupport_ReturnsCompletionsWithoutSnippet() { // Arrange var tagHelper = TagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly"); tagHelper.TagMatchingRule(rule => rule.TagName = "test"); tagHelper.SetTypeName("TestTagHelper"); tagHelper.BindAttribute(attribute => { attribute.Name = "int-val"; attribute.SetPropertyName("IntVal"); attribute.TypeName = ("System.Collections.Generic.IDictionary<System.String, System.Int32>"); attribute.AsDictionary("int-val-", typeof(int).FullName); }); var languageServer = new Mock <ILanguageServer>(); languageServer.SetupGet(server => server.ClientSettings) .Returns(new InitializeParams { Capabilities = new ClientCapabilities { TextDocument = new TextDocumentClientCapabilities { Completion = new CompletionCapability { CompletionItem = new CompletionItemCapability { SnippetSupport = false } } } } }).Verifiable(); var service = new DefaultTagHelperCompletionService(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService, languageServer.Object); var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test />", tagHelper.Build()); var sourceSpan = new SourceSpan(35 + Environment.NewLine.Length, 0); // Act var completions = service.GetCompletionsAt(sourceSpan, codeDocument); // Assert Assert.Collection( completions, completion => { Assert.Equal("int-val", completion.InsertText); Assert.Equal(InsertTextFormat.PlainText, completion.InsertTextFormat); Assert.Equal(new[] { "=" }, completion.CommitCharacters); }, completion => { Assert.Equal("int-val-", completion.InsertText); Assert.Equal(InsertTextFormat.PlainText, completion.InsertTextFormat); Assert.Equal(Array.Empty <String>(), completion.CommitCharacters); }); languageServer.Verify(); }
public void GetCompletionAt_OutsideOfTagName_DoesNotReturnCompletions() { // Arrange var service = new DefaultTagHelperCompletionService(RazorTagHelperCompletionService); var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<br />", DefaultTagHelpers); var sourceSpan = new SourceSpan(33 + Environment.NewLine.Length, 0); // Act var completions = service.GetCompletionsAt(sourceSpan, codeDocument); // Assert Assert.Empty(completions); }
public void GetCompletionAt_HtmlAttributeValue_DoesNotReturnCompletions() { // Arrange var service = new DefaultTagHelperCompletionService(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService); var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test2 class='' />", DefaultTagHelpers); var sourceSpan = new SourceSpan(43 + Environment.NewLine.Length, 0); // Act var completions = service.GetCompletionsAt(sourceSpan, codeDocument); // Assert Assert.Empty(completions); }
public void GetCompletionsAt_MalformedAttributeName_ReturnsCompletions() { // Arrange var service = new DefaultTagHelperCompletionService(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService); var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test2 int->", DefaultTagHelpers); var sourceSpan = new SourceSpan(38 + Environment.NewLine.Length, 0); // Act var completions = service.GetCompletionsAt(sourceSpan, codeDocument); // Assert AssertBoolIntCompletions(completions); }
public void GetCompletionsAt_AttributePrefix_ReturnsCompletions() { // Arrange var service = new DefaultTagHelperCompletionService(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService, LanguageServer); var txt = $"@addTagHelper *, TestAssembly{Environment.NewLine}<test2 class=''>"; var codeDocument = CreateCodeDocument(txt, DefaultTagHelpers); var sourceSpan = new SourceSpan(38 + Environment.NewLine.Length, 0); // Act var completions = service.GetCompletionsAt(sourceSpan, codeDocument); // Assert AssertBoolIntCompletions(completions); }
public void GetCompletionsAt_MalformedAttributeValue_ReturnsCompletions() { // Arrange var service = new DefaultTagHelperCompletionService(RazorTagHelperCompletionService); var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test2 int-val='>", DefaultTagHelpers); var sourceSpan = new SourceSpan(38 + Environment.NewLine.Length, 0); // Act var completions = service.GetCompletionsAt(sourceSpan, codeDocument); // Assert Assert.Collection( completions, completion => Assert.Equal("bool-val", completion.FilterText)); }
public void GetCompletionAt_AtTagHelperElementNameEdge_ReturnsCompletions() { // Arrange var service = new DefaultTagHelperCompletionService(RazorTagHelperCompletionService); var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test1 />", DefaultTagHelpers); var sourceSpan = new SourceSpan(35 + Environment.NewLine.Length, 0); // Act var completions = service.GetCompletionsAt(sourceSpan, codeDocument); // Assert Assert.Collection( completions, completion => Assert.Equal("test1", completion.InsertText), completion => Assert.Equal("test2", completion.InsertText)); }
public void GetNearestAncestorTagInfo_TagHelperElement() { // Arrange var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test1><test2></test2></test1>", DefaultTagHelpers); var sourceSpan = new SourceSpan(37 + Environment.NewLine.Length, 0); var syntaxTree = codeDocument.GetSyntaxTree(); var owner = syntaxTree.Root.LocateOwner(new SourceChange(sourceSpan, string.Empty)); var element = owner.FirstAncestorOrSelf <MarkupTagHelperElementSyntax>(); // Act var(ancestorName, ancestorIsTagHelper) = DefaultTagHelperCompletionService.GetNearestAncestorTagInfo(element.Ancestors()); // Assert Assert.Equal("test1", ancestorName); Assert.True(ancestorIsTagHelper); }
public void GetCompletionAt_AtEmptyTagName_ReturnsCompletions() { // Arrange var service = new DefaultTagHelperCompletionService(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService, LanguageServer); var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<", DefaultTagHelpers); var sourceSpan = new SourceSpan(30 + Environment.NewLine.Length, 0); // Act var completions = service.GetCompletionsAt(sourceSpan, codeDocument); // Assert Assert.Collection( completions, completion => Assert.Equal("test1", completion.InsertText), completion => Assert.Equal("test2", completion.InsertText)); }
public void GetCompletionAt_HtmlAttribute_ReturnsCompletions() { // Arrange var service = new DefaultTagHelperCompletionService(RazorTagHelperCompletionService, HtmlFactsService, TagHelperFactsService, LanguageServer); var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<test2 class='' />", DefaultTagHelpers); var sourceSpan = new SourceSpan(38 + Environment.NewLine.Length, 0); // Act var completions = service.GetCompletionsAt(sourceSpan, codeDocument); // Assert Assert.Collection( completions, completion => Assert.Equal("bool-val", completion.FilterText), completion => Assert.Equal("int-val", completion.FilterText)); }
public RazorCompletionEndpointTest() { // Working around strong naming restriction. var tagHelperFactsService = new DefaultTagHelperFactsService(); var tagHelperCompletionService = new DefaultTagHelperCompletionService(tagHelperFactsService); var completionProviders = new RazorCompletionItemProvider[] { new DirectiveCompletionItemProvider(), new DirectiveAttributeCompletionItemProvider(tagHelperFactsService), new DirectiveAttributeParameterCompletionItemProvider(tagHelperFactsService), new TagHelperCompletionProvider(tagHelperCompletionService, new DefaultHtmlFactsService(), tagHelperFactsService) }; CompletionFactsService = new DefaultRazorCompletionFactsService(completionProviders); TagHelperDescriptionFactory = Mock.Of <TagHelperDescriptionFactory>(); EmptyDocumentResolver = Mock.Of <DocumentResolver>(); }
public void StringifyAttributes_IgnoresMiscContent() { // Arrange var codeDocument = CreateCodeDocument($"@addTagHelper *, TestAssembly{Environment.NewLine}<input unbound @DateTime.Now />", DefaultTagHelpers); var syntaxTree = codeDocument.GetSyntaxTree(); var sourceSpan = new SourceSpan(30 + Environment.NewLine.Length, 0); var sourceChangeLocation = new SourceChange(sourceSpan, string.Empty); var startTag = (MarkupStartTagSyntax)syntaxTree.Root.LocateOwner(sourceChangeLocation).Parent; // Act var attributes = DefaultTagHelperCompletionService.StringifyAttributes(startTag.Attributes); // Assert Assert.Collection( attributes, attribute => { Assert.Equal("unbound", attribute.Key); Assert.Equal(string.Empty, attribute.Value); }); }
public void StringifyAttributes_MinimizedDirectiveAttributeWithParameter() { // Arrange var codeDocument = CreateComponentDocument($"<TestElement @minimized:something />", DefaultTagHelpers); var syntaxTree = codeDocument.GetSyntaxTree(); var sourceSpan = new SourceSpan(3, 0); var sourceChangeLocation = new SourceChange(sourceSpan, string.Empty); var startTag = (MarkupTagHelperStartTagSyntax)syntaxTree.Root.LocateOwner(sourceChangeLocation).Parent; // Act var attributes = DefaultTagHelperCompletionService.StringifyAttributes(startTag.Attributes); // Assert Assert.Collection( attributes, attribute => { Assert.Equal("@minimized:something", attribute.Key); Assert.Equal(string.Empty, attribute.Value); }); }