public void CanResolve_NonTagHelperCompletion_ReturnsFalse() { // Arrange var completionEndpoint = new RazorCompletionEndpoint(Dispatcher, EmptyDocumentResolver, CompletionFactsService, TagHelperCompletionService, TagHelperDescriptionFactory, LoggerFactory); var completionItem = new CompletionItem(); // Act var result = completionEndpoint.CanResolve(completionItem); // Assert Assert.False(result); }
public void TryConvert_Directive_SerializationDoesNotThrow() { // Arrange var completionItem = new RazorCompletionItem("testDisplay", "testInsert", RazorCompletionItemKind.Directive); var description = "Something"; completionItem.SetDirectiveCompletionDescription(new DirectiveCompletionDescription(description)); RazorCompletionEndpoint.TryConvert(completionItem, SupportedCompletionItemKinds, out var converted); // Act & Assert JsonConvert.SerializeObject(converted); }
public void CanResolve_DirectiveAttributeParameterCompletion_ReturnsTrue() { // Arrange var completionEndpoint = new RazorCompletionEndpoint(Dispatcher, EmptyDocumentResolver, CompletionFactsService, TagHelperCompletionService, TagHelperDescriptionFactory, LoggerFactory); var completionItem = new CompletionItem(); completionItem.SetRazorCompletionKind(RazorCompletionItemKind.DirectiveAttributeParameter); // Act var result = completionEndpoint.CanResolve(completionItem); // Assert Assert.True(result); }
public void CanResolve_TagHelperAttributeCompletion_ReturnsTrue() { // Arrange var completionEndpoint = new RazorCompletionEndpoint(Dispatcher, EmptyDocumentResolver, CompletionFactsService, TagHelperCompletionService, TagHelperDescriptionFactory, LoggerFactory); var completionItem = new CompletionItem(); completionItem.SetDescriptionInfo(AttributeDescriptionInfo.Default); // Act var result = completionEndpoint.CanResolve(completionItem); // Assert Assert.True(result); }
public void IsApplicableTriggerContext_Deletion_ReturnsFalse() { // Arrange var completionContext = new VSInternalCompletionContext() { InvokeKind = VSInternalCompletionInvokeKind.Deletion }; // Act var result = RazorCompletionEndpoint.IsApplicableTriggerContext(completionContext); // Assert Assert.False(result); }
public void IsApplicableTriggerContext_Explicit_ReturnsTrue() { // Arrange var completionContext = new OmniSharpVSCompletionContext() { InvokeKind = OmniSharpVSCompletionInvokeKind.Explicit }; // Act var result = RazorCompletionEndpoint.IsApplicableTriggerContext(completionContext); // Assert Assert.True(result); }
public void IsApplicableTriggerContext_Typing_ReturnsTrue() { // Arrange var completionContext = new VSInternalCompletionContext() { InvokeKind = VSInternalCompletionInvokeKind.Typing }; // Act var result = RazorCompletionEndpoint.IsApplicableTriggerContext(completionContext); // Assert Assert.True(result); }
public void TryConvert_Directive_SerializationDoesNotThrow() { // Arrange var completionItem = new RazorCompletionItem("testDisplay", "testInsert", RazorCompletionItemKind.Directive); var description = "Something"; completionItem.SetDirectiveCompletionDescription(new DirectiveCompletionDescription(description)); var descriptionFactory = new Mock <TagHelperDescriptionFactory>(); var completionEndpoint = new RazorCompletionEndpoint(Dispatcher, EmptyDocumentResolver, CompletionFactsService, TagHelperCompletionService, descriptionFactory.Object, LoggerFactory); completionEndpoint.SetCapability(DefaultCapability); completionEndpoint.TryConvert(completionItem, out var converted); // Act & Assert JsonConvert.SerializeObject(converted); }
public async Task Handle_NonTagHelperCompletion_Noops() { // Arrange var descriptionFactory = new Mock <TagHelperDescriptionFactory>(); var markdown = "Some Markdown"; descriptionFactory.Setup(factory => factory.TryCreateDescription(It.IsAny <ElementDescriptionInfo>(), out markdown)) .Returns(true); var completionEndpoint = new RazorCompletionEndpoint(Dispatcher, EmptyDocumentResolver, CompletionFactsService, TagHelperCompletionService, descriptionFactory.Object, LoggerFactory); var completionItem = new CompletionItem(); // Act var newCompletionItem = await completionEndpoint.Handle(completionItem, default); // Assert Assert.Null(newCompletionItem.Documentation); }
public async Task Handle_Resolve_MarkupTransitionCompletion_ReturnsCompletionItemWithDocumentation() { // Arrange var descriptionFactory = Mock.Of <TagHelperTooltipFactory>(MockBehavior.Strict); var completionEndpoint = new RazorCompletionEndpoint(Dispatcher, EmptyDocumentResolver, CompletionFactsService, descriptionFactory, LoggerFactory); var razorCompletionItem = new RazorCompletionItem("@...", "@", RazorCompletionItemKind.MarkupTransition); razorCompletionItem.SetMarkupTransitionCompletionDescription(new MarkupTransitionCompletionDescription("Test description")); var completionList = completionEndpoint.CreateLSPCompletionList(new[] { razorCompletionItem }); var completionItem = completionList.Items.Single(); // Act var newCompletionItem = await completionEndpoint.Handle(completionItem, default); // Assert Assert.NotNull(newCompletionItem.Documentation); }
public void TryConvert_DirectiveAttributeParameter_ReturnsTrue() { // Arrange var completionItem = new RazorCompletionItem("format", "format", RazorCompletionItemKind.DirectiveAttributeParameter); // Act var result = RazorCompletionEndpoint.TryConvert(completionItem, ClientCapabilities, out var converted); // Assert Assert.True(result); Assert.Equal(completionItem.DisplayText, converted.Label); Assert.Equal(completionItem.InsertText, converted.InsertText); Assert.Equal(completionItem.InsertText, converted.FilterText); Assert.Equal(completionItem.InsertText, converted.SortText); Assert.Null(converted.Detail); Assert.Null(converted.Documentation); Assert.Null(converted.Command); }
public void TryConvert_MarkupTransition_ReturnsTrue() { // Arrange var completionItem = MarkupTransitionCompletionItemProvider.MarkupTransitionCompletionItem; // Act var result = RazorCompletionEndpoint.TryConvert(completionItem, SupportedCompletionItemKinds, out var converted); // Assert Assert.True(result); Assert.Equal(completionItem.DisplayText, converted.Label); Assert.Equal(completionItem.InsertText, converted.InsertText); Assert.Equal(completionItem.DisplayText, converted.FilterText); Assert.Equal(completionItem.DisplayText, converted.SortText); Assert.Null(converted.Detail); Assert.Null(converted.Documentation); Assert.Equal(converted.CommitCharacters, completionItem.CommitCharacters); }
public void TryConvert_TagHelperAttribute_ReturnsTrue() { // Arrange var completionItem = new RazorCompletionItem("format", "format", RazorCompletionItemKind.TagHelperAttribute); // Act var result = RazorCompletionEndpoint.TryConvert(completionItem, SupportedCompletionItemKinds, out var converted); // Assert Assert.True(result); Assert.Equal(completionItem.DisplayText, converted.Label); Assert.Equal(completionItem.InsertText, converted.InsertText); Assert.Equal(completionItem.InsertText, converted.FilterText); Assert.Equal(completionItem.InsertText, converted.SortText); Assert.Null(converted.Detail); Assert.Null(converted.Documentation); Assert.Null(converted.Command); }
public void TryConvert_DirectiveAttributeTransition_ReturnsTrue() { // Arrange var completionItem = DirectiveAttributeTransitionCompletionItemProvider.TransitionCompletionItem; // Act var result = RazorCompletionEndpoint.TryConvert(completionItem, SupportedCompletionItemKinds, out var converted); // Assert Assert.True(result); Assert.False(converted.Preselect); Assert.Equal(completionItem.DisplayText, converted.Label); Assert.Equal(completionItem.InsertText, converted.InsertText); Assert.Equal(completionItem.DisplayText, converted.FilterText); Assert.Equal(completionItem.DisplayText, converted.SortText); Assert.Null(converted.Detail); Assert.Null(converted.Documentation); Assert.NotNull(converted.Command); }
public void TryConvert_TagHelperAttribute_ReturnsTrue() { // Arrange var completionItem = new RazorCompletionItem("format", "format=\"$0\"", RazorCompletionItemKind.TagHelperAttribute, isSnippet: true); // Act var result = RazorCompletionEndpoint.TryConvert(completionItem, ClientCapabilities, out var converted); // Assert Assert.True(result); Assert.Equal(completionItem.DisplayText, converted.Label); Assert.Equal("format=\"$0\"", converted.InsertText); Assert.Equal(InsertTextFormat.Snippet, converted.InsertTextFormat); Assert.Equal(completionItem.DisplayText, converted.FilterText); Assert.Equal(completionItem.DisplayText, converted.SortText); Assert.Null(converted.Detail); Assert.Null(converted.Documentation); Assert.Null(converted.Command); }
public void TryConvert_DirectiveAttribute_ReturnsTrue() { // Arrange var completionItem = new RazorCompletionItem("@testDisplay", "testInsert", RazorCompletionItemKind.DirectiveAttribute, new[] { "=", ":" }); // Act var result = RazorCompletionEndpoint.TryConvert(completionItem, SupportedCompletionItemKinds, out var converted); // Assert Assert.True(result); Assert.Equal(completionItem.DisplayText, converted.Label); Assert.Equal(completionItem.InsertText, converted.InsertText); Assert.Equal(completionItem.InsertText, converted.FilterText); Assert.Equal(completionItem.InsertText, converted.SortText); Assert.Equal(completionItem.CommitCharacters, converted.CommitCharacters); Assert.Null(converted.Detail); Assert.Null(converted.Documentation); Assert.Null(converted.Command); }
public void TryConvert_MarkupTransition_ReturnsTrue() { // Arrange var completionItem = MarkupTransitionCompletionItemProvider.MarkupTransitionCompletionItem; var description = completionItem.GetMarkupTransitionCompletionDescription().Description; // Act var result = RazorCompletionEndpoint.TryConvert(completionItem, out var converted); // Assert Assert.True(result); Assert.Equal(completionItem.DisplayText, converted.Label); Assert.Equal(completionItem.InsertText, converted.InsertText); Assert.Equal(completionItem.DisplayText, converted.FilterText); Assert.Equal(completionItem.DisplayText, converted.SortText); Assert.Null(converted.Detail); Assert.Equal(description, converted.Documentation.String); Assert.Equal(converted.CommitCharacters, completionItem.CommitCharacters); }
public async Task Handle_Unsupported_NoCompletionItems() { // Arrange var documentPath = "C:/path/to/document.cshtml"; var codeDocument = CreateCodeDocument("@"); codeDocument.SetUnsupported(); var documentResolver = CreateDocumentResolver(documentPath, codeDocument); var completionEndpoint = new RazorCompletionEndpoint(Dispatcher, documentResolver, CompletionFactsService, TagHelperCompletionService, TagHelperDescriptionFactory, LoggerFactory); var request = new CompletionParams() { TextDocument = new TextDocumentIdentifier(new Uri(documentPath)), Position = new Position(0, 1) }; // Act var completionList = await Task.Run(() => completionEndpoint.Handle(request, default)); // Assert Assert.Empty(completionList); }
public async Task Handle_DirectiveAttributeParameterCompletion_ReturnsCompletionItemWithDocumentation() { // Arrange var descriptionFactory = new Mock <TagHelperDescriptionFactory>(); var markdown = "Some Markdown"; descriptionFactory.Setup(factory => factory.TryCreateDescription(It.IsAny <AttributeCompletionDescription>(), out markdown)) .Returns(true); var completionEndpoint = new RazorCompletionEndpoint(Dispatcher, EmptyDocumentResolver, CompletionFactsService, TagHelperCompletionService, descriptionFactory.Object, LoggerFactory); var completionItem = new CompletionItem(); completionItem.SetDescriptionInfo(new AttributeCompletionDescription(Array.Empty <CodeAnalysis.Razor.Completion.AttributeDescriptionInfo>())); completionItem.SetRazorCompletionKind(RazorCompletionItemKind.DirectiveAttributeParameter); // Act var newCompletionItem = await completionEndpoint.Handle(completionItem, default); // Assert Assert.NotNull(newCompletionItem.Documentation); }
public void TryConvert_Directive_ReturnsTrue() { // Arrange var completionItem = new RazorCompletionItem("testDisplay", "testInsert", RazorCompletionItemKind.Directive); var description = "Something"; completionItem.SetDirectiveCompletionDescription(new DirectiveCompletionDescription(description)); // Act var result = RazorCompletionEndpoint.TryConvert(completionItem, SupportedCompletionItemKinds, out var converted); // Assert Assert.True(result); Assert.Equal(completionItem.DisplayText, converted.Label); Assert.Equal(completionItem.InsertText, converted.InsertText); Assert.Equal(completionItem.DisplayText, converted.FilterText); Assert.Equal(completionItem.DisplayText, converted.SortText); Assert.Null(converted.Detail); Assert.Null(converted.Documentation); }
public async Task Handle_TagHelperAttributeCompletion_ReturnsCompletionItemWithDocumentation() { // Arrange var descriptionFactory = new Mock<TagHelperDescriptionFactory>(); var markdown = new MarkupContent{ Kind = MarkupKind.Markdown, Value = "Some Markdown" }; descriptionFactory.Setup(factory => factory.TryCreateDescription(It.IsAny<AttributeDescriptionInfo>(), out markdown)) .Returns(true); var completionEndpoint = new RazorCompletionEndpoint(Dispatcher, EmptyDocumentResolver, CompletionFactsService, TagHelperCompletionService, descriptionFactory.Object, LoggerFactory); var completionItem = new CompletionItem(); completionItem.SetDescriptionInfo(AttributeDescriptionInfo.Default); // Act var newCompletionItem = await completionEndpoint.Handle(completionItem, default); // Assert Assert.NotNull(newCompletionItem.Documentation); }
public async Task Handle_Resolve_MarkupTransitionCompletion_ReturnsCompletionItemWithDocumentation() { // Arrange var languageServer = new Mock <ClientNotifierServiceBase>(MockBehavior.Strict); languageServer.Setup(ls => ls.ClientSettings).Returns(new InitializeParams()); var completionEndpoint = new RazorCompletionEndpoint( Dispatcher, EmptyDocumentResolver, CompletionFactsService, LSPTagHelperTooltipFactory, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory); var razorCompletionItem = new RazorCompletionItem("@...", "@", RazorCompletionItemKind.MarkupTransition); razorCompletionItem.SetMarkupTransitionCompletionDescription(new MarkupTransitionCompletionDescription("Test description")); var completionList = completionEndpoint.CreateLSPCompletionList(new[] { razorCompletionItem }); var completionItem = completionList.Items.Single(); // Act var newCompletionItem = await completionEndpoint.Handle(completionItem, default); // Assert Assert.NotNull(newCompletionItem.Documentation); }
public void TryConvert_MarkupTransition_ReturnsTrue() { // Arrange var completionItem = MarkupTransitionCompletionItemProvider.MarkupTransitionCompletionItem; var description = completionItem.GetMarkupTransitionCompletionDescription().Description; var descriptionFactory = new Mock <TagHelperDescriptionFactory>(); var completionEndpoint = new RazorCompletionEndpoint(Dispatcher, EmptyDocumentResolver, CompletionFactsService, TagHelperCompletionService, descriptionFactory.Object, LoggerFactory); // Act var result = completionEndpoint.TryConvert(completionItem, out var converted); // Assert Assert.True(result); Assert.Equal(completionItem.DisplayText, converted.Label); Assert.Equal(completionItem.InsertText, converted.InsertText); Assert.Equal(completionItem.DisplayText, converted.FilterText); Assert.Equal(completionItem.DisplayText, converted.SortText); Assert.Null(converted.Detail); Assert.Equal(description, converted.Documentation.String); Assert.Equal(converted.CommitCharacters, completionItem.CommitCharacters); }
public async Task Handle_Resolve_NonTagHelperCompletion_Noops() { // Arrange var descriptionFactory = new Mock <TagHelperTooltipFactory>(MockBehavior.Strict); var markdown = new MarkupContent { Kind = MarkupKind.Markdown, Value = "Some Markdown" }; descriptionFactory.Setup(factory => factory.TryCreateTooltip(It.IsAny <AggregateBoundElementDescription>(), out markdown)) .Returns(true); var completionEndpoint = new RazorCompletionEndpoint(Dispatcher, EmptyDocumentResolver, CompletionFactsService, descriptionFactory.Object, LoggerFactory); var completionItem = new CompletionItem(); // Act var newCompletionItem = await completionEndpoint.Handle(completionItem, default); // Assert Assert.Null(newCompletionItem.Documentation); }
public async Task Handle_ProvidesTagHelperAttributeItems() { // Arrange var documentPath = "C:/path/to/document.cshtml"; var builder = TagHelperDescriptorBuilder.Create(ComponentMetadata.Component.TagHelperKind, "TestTagHelper", "TestAssembly"); builder.TagMatchingRule(rule => rule.TagName = "*"); builder.BindAttribute(attribute => { attribute.Name = "testAttribute"; attribute.TypeName = typeof(string).FullName; attribute.SetPropertyName("TestAttribute"); }); builder.SetTypeName("TestNamespace.TestTagHelper"); var tagHelper = builder.Build(); var tagHelperContext = TagHelperDocumentContext.Create(prefix: string.Empty, new[] { tagHelper }); var codeDocument = CreateCodeDocument("<test "); codeDocument.SetTagHelperContext(tagHelperContext); var documentResolver = CreateDocumentResolver(documentPath, codeDocument); var completionEndpoint = new RazorCompletionEndpoint( Dispatcher, documentResolver, CompletionFactsService, CompletionListCache, LoggerFactory); completionEndpoint.GetRegistration(ClientCapabilities); var request = new VSCompletionParamsBridge() { TextDocument = new TextDocumentIdentifier() { Uri = new Uri(documentPath) }, Position = new Position(0, 6), Context = new VSInternalCompletionContext(), }; // Act var completionList = await Task.Run(() => completionEndpoint.Handle(request, default)); // Assert Assert.Contains(completionList.Items, item => item.InsertText == "testAttribute=\"$0\""); }
public void TryConvert_DirectiveAttributeTransition_ReturnsTrue() { // Arrange var completionItem = DirectiveAttributeTransitionCompletionItemProvider.TransitionCompletionItem; var description = completionItem.GetDirectiveCompletionDescription().Description; // Act var result = RazorCompletionEndpoint.TryConvert(completionItem, out var converted); // Assert Assert.True(result); Assert.False(converted.Preselect); Assert.Equal(completionItem.DisplayText, converted.Label); Assert.Equal(completionItem.InsertText, converted.InsertText); Assert.Equal(completionItem.DisplayText, converted.FilterText); Assert.Equal(completionItem.DisplayText, converted.SortText); Assert.Null(converted.Detail); Assert.Equal(description, converted.Documentation.String); Assert.NotNull(converted.Command); Assert.True(converted.TryGetRazorCompletionKind(out var convertedKind)); Assert.Equal(RazorCompletionItemKind.Directive, convertedKind); }
public void TryConvert_DirectiveAttributeParameter_ReturnsTrue() { // Arrange var completionItem = new RazorCompletionItem("format", "format", RazorCompletionItemKind.DirectiveAttributeParameter); completionItem.SetAttributeCompletionDescription(new AttributeCompletionDescription(Array.Empty <CodeAnalysis.Razor.Completion.AttributeDescriptionInfo>())); // Act var result = RazorCompletionEndpoint.TryConvert(completionItem, out var converted); // Assert Assert.True(result); Assert.Equal(completionItem.DisplayText, converted.Label); Assert.Equal(completionItem.InsertText, converted.InsertText); Assert.Equal(completionItem.InsertText, converted.FilterText); Assert.Equal(completionItem.InsertText, converted.SortText); Assert.Null(converted.Detail); Assert.Null(converted.Documentation); Assert.Null(converted.Command); Assert.True(converted.TryGetRazorCompletionKind(out var convertedKind)); Assert.Equal(RazorCompletionItemKind.DirectiveAttributeParameter, convertedKind); }
public async Task Handle_ProvidesTagHelperAttributeItems() { // Arrange var documentPath = "C:/path/to/document.cshtml"; var builder = TagHelperDescriptorBuilder.Create(ComponentMetadata.Component.TagHelperKind, "TestTagHelper", "TestAssembly"); builder.TagMatchingRule(rule => rule.TagName = "*"); builder.BindAttribute(attribute => { attribute.Name = "testAttribute"; attribute.TypeName = typeof(string).FullName; attribute.SetPropertyName("TestAttribute"); }); builder.SetTypeName("TestNamespace.TestTagHelper"); var tagHelper = builder.Build(); var tagHelperContext = TagHelperDocumentContext.Create(prefix: string.Empty, new[] { tagHelper }); var codeDocument = CreateCodeDocument("<test "); codeDocument.SetTagHelperContext(tagHelperContext); var documentResolver = CreateDocumentResolver(documentPath, codeDocument); var languageServer = new Mock <ClientNotifierServiceBase>(MockBehavior.Strict); languageServer.Setup(ls => ls.ClientSettings).Returns(new InitializeParams()); var completionEndpoint = new RazorCompletionEndpoint( LegacyDispatcher, documentResolver, CompletionFactsService, LSPTagHelperTooltipFactory, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory); var request = new CompletionParams() { TextDocument = new TextDocumentIdentifier(new Uri(documentPath)), Position = new Position(0, 6), Context = new OmniSharpVSCompletionContext(), }; // Act var completionList = await Task.Run(() => completionEndpoint.Handle(request, default)); // Assert Assert.Contains(completionList, item => item.InsertText == "testAttribute"); }
public async Task Handle_ResolvesDirectiveCompletionItems() { // Arrange var documentPath = "C:/path/to/document.cshtml"; var codeDocument = CreateCodeDocument("@"); var documentResolver = CreateDocumentResolver(documentPath, codeDocument); var completionEndpoint = new RazorCompletionEndpoint(Dispatcher, documentResolver, CompletionFactsService, TagHelperDescriptionFactory, LoggerFactory); var request = new CompletionParams() { TextDocument = new TextDocumentIdentifier(new Uri(documentPath)), Position = new Position(0, 1) }; // Act var completionList = await Task.Run(() => completionEndpoint.Handle(request, default)); // Assert // These are the default directives that don't need to be separately registered, they should always be part of the completion list. Assert.Contains(completionList, item => item.InsertText == "addTagHelper"); Assert.Contains(completionList, item => item.InsertText == "removeTagHelper"); Assert.Contains(completionList, item => item.InsertText == "tagHelperPrefix"); }
public void TryConvert_TagHelperAttribute_ReturnsTrue() { // Arrange var completionItem = new RazorCompletionItem("format", "format", RazorCompletionItemKind.TagHelperAttribute); completionItem.SetTagHelperAttributeDescriptionInfo(new AttributeDescriptionInfo(Array.Empty <TagHelperAttributeDescriptionInfo>())); // Act var result = RazorCompletionEndpoint.TryConvert(completionItem, out var converted); // Assert Assert.True(result); Assert.Equal(completionItem.DisplayText, converted.Label); Assert.Equal(completionItem.InsertText, converted.InsertText); Assert.Equal(completionItem.InsertText, converted.FilterText); Assert.Equal(completionItem.InsertText, converted.SortText); Assert.Null(converted.Detail); Assert.Null(converted.Documentation); Assert.Null(converted.Command); var descriptionInfo = completionItem.GetTagHelperAttributeDescriptionInfo(); Assert.NotNull(descriptionInfo); }