public async Task Handle_ProvidesTagHelperElementCompletionItems() { // Arrange var documentPath = "C:/path/to/document.cshtml"; var builder = TagHelperDescriptorBuilder.Create(ComponentMetadata.Component.TagHelperKind, "TestTagHelper", "TestAssembly"); builder.TagMatchingRule(rule => rule.TagName = "Test"); builder.SetTypeName("TestNamespace.TestTagHelper"); var tagHelper = builder.Build(); var tagHelperContext = TagHelperDocumentContext.Create(prefix: string.Empty, new[] { tagHelper }); var codeDocument = CreateCodeDocument("<"); 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, 1), Context = new VSInternalCompletionContext(), }; // Act var completionList = await Task.Run(() => completionEndpoint.Handle(request, default)); // Assert Assert.Contains(completionList.Items, item => item.InsertText == "Test"); }
public async Task Handle_ProvidesTagHelperElementCompletionItems() { // Arrange var documentPath = "C:/path/to/document.cshtml"; var builder = TagHelperDescriptorBuilder.Create(ComponentMetadata.Component.TagHelperKind, "TestTagHelper", "TestAssembly"); builder.TagMatchingRule(rule => rule.TagName = "Test"); builder.SetTypeName("TestNamespace.TestTagHelper"); var tagHelper = builder.Build(); var tagHelperContext = TagHelperDocumentContext.Create(prefix: string.Empty, new[] { tagHelper }); var codeDocument = CreateCodeDocument("<"); 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( Dispatcher, documentResolver, CompletionFactsService, LSPTagHelperTooltipFactory, VSLSPTagHelperTooltipFactory, languageServer.Object, 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.Contains(completionList, item => item.InsertText == "Test"); }
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, CompletionListCache, LoggerFactory); completionEndpoint.GetRegistration(ClientCapabilities); var request = new VSCompletionParamsBridge() { TextDocument = new TextDocumentIdentifier() { Uri = new Uri(documentPath) }, Position = new Position(0, 1), Context = new VSInternalCompletionContext(), }; // Act var completionList = await Task.Run(() => completionEndpoint.Handle(request, default)); // Assert Assert.Null(completionList); }
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 languageServer = new Mock <ClientNotifierServiceBase>(MockBehavior.Strict); languageServer.Setup(ls => ls.ClientSettings).Returns(new InitializeParams()); var completionEndpoint = new RazorCompletionEndpoint( Dispatcher, documentResolver, CompletionFactsService, LSPTagHelperTooltipFactory, VSLSPTagHelperTooltipFactory, languageServer.Object, 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_ProvidesDirectiveCompletionItems() { // Arrange var documentPath = "C:/path/to/document.cshtml"; var codeDocument = CreateCodeDocument("@"); var documentResolver = CreateDocumentResolver(documentPath, codeDocument); var languageServer = new Mock <ClientNotifierServiceBase>(MockBehavior.Strict); languageServer.Setup(ls => ls.ClientSettings).Returns(new InitializeParams()); var completionEndpoint = new RazorCompletionEndpoint( Dispatcher, documentResolver, CompletionFactsService, LSPTagHelperTooltipFactory, VSLSPTagHelperTooltipFactory, languageServer.Object, 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 async Task Handle_Resolve_TagHelperAttribute_ReturnsCompletionItemWithDocumentation() { // Arrange var lspDescriptionFactory = new Mock <LSPTagHelperTooltipFactory>(MockBehavior.Strict); var markdown = new MarkupContent { Kind = MarkupKind.Markdown, Value = "Some Markdown" }; lspDescriptionFactory.Setup(factory => factory.TryCreateTooltip(It.IsAny <AggregateBoundAttributeDescription>(), out markdown)) .Returns(true); var languageServer = new Mock <ClientNotifierServiceBase>(MockBehavior.Strict); languageServer.Setup(ls => ls.ClientSettings).Returns(new InitializeParams()); var completionEndpoint = new RazorCompletionEndpoint( Dispatcher, EmptyDocumentResolver, CompletionFactsService, lspDescriptionFactory.Object, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory); var razorCompletionItem = new RazorCompletionItem("TestItem", "TestItem", RazorCompletionItemKind.TagHelperAttribute); razorCompletionItem.SetAttributeCompletionDescription(new AggregateBoundAttributeDescription(Array.Empty <BoundAttributeDescriptionInfo>())); 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 async Task Handle_Resolve_NonTagHelperCompletion_Noops() { // Arrange var lspDescriptionFactory = new Mock <LSPTagHelperTooltipFactory>(MockBehavior.Strict); var markdown = new MarkupContent { Kind = MarkupKind.Markdown, Value = "Some Markdown" }; lspDescriptionFactory.Setup(factory => factory.TryCreateTooltip(It.IsAny <AggregateBoundElementDescription>(), out markdown)) .Returns(true); var languageServer = new Mock <ClientNotifierServiceBase>(MockBehavior.Strict); languageServer.Setup(ls => ls.ClientSettings).Returns(new InitializeParams()); var completionEndpoint = new RazorCompletionEndpoint( Dispatcher, EmptyDocumentResolver, CompletionFactsService, lspDescriptionFactory.Object, VSLSPTagHelperTooltipFactory, languageServer.Object, LoggerFactory); var completionItem = new CompletionItem(); // Act var newCompletionItem = await completionEndpoint.Handle(completionItem, default); // Assert Assert.Null(newCompletionItem.Documentation); }
public async Task Handle_ResolvesTagHelperAttributeCompletionItems() { // 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, TagHelperDescriptionFactory, LoggerFactory); var request = new CompletionParams() { TextDocument = new TextDocumentIdentifier(new Uri(documentPath)), Position = new Position(0, 6) }; // Act var completionList = await Task.Run(() => completionEndpoint.Handle(request, default)); // Assert Assert.Contains(completionList, item => item.InsertText == "testAttribute"); }
public async Task Handle_Resolve_TagHelperElementCompletion_ReturnsCompletionItemWithDocumentation() { // 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 razorCompletionItem = new RazorCompletionItem("TestItem", "TestItem", RazorCompletionItemKind.TagHelperElement); razorCompletionItem.SetTagHelperElementDescriptionInfo(new AggregateBoundElementDescription(Array.Empty <BoundElementDescriptionInfo>())); 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 async Task Handle_ResolvesTagHelperElementCompletionItems() { // Arrange var documentPath = "C:/path/to/document.cshtml"; var tagHelperCompletionItem = new CompletionItem() { InsertText = "Test" }; var tagHelperCompletionService = Mock.Of <TagHelperCompletionService>( service => service.GetCompletionsAt(It.IsAny <SourceSpan>(), It.IsAny <RazorCodeDocument>()) == new[] { tagHelperCompletionItem }); var codeDocument = CreateCodeDocument("<"); 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.Contains(completionList, item => item.InsertText == "Test"); }
public async Task Handle_ProvidesDirectiveCompletionItems() { // Arrange var documentPath = "C:/path/to/document.cshtml"; var codeDocument = CreateCodeDocument("@"); 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, 1), Context = new VSInternalCompletionContext(), }; // 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.Items, item => item.InsertText == "addTagHelper"); Assert.Contains(completionList.Items, item => item.InsertText == "removeTagHelper"); Assert.Contains(completionList.Items, item => item.InsertText == "tagHelperPrefix"); }
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 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 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 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_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_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_ResolvesDirectiveCompletionItems() { // Arrange var documentPath = "C:/path/to/document.cshtml"; var codeDocument = CreateCodeDocument("@"); 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 // 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"); }