From 899eb2f9cda3aba451715420e4fcfc3674d05851 Mon Sep 17 00:00:00 2001 From: David Driscoll Date: Tue, 4 Aug 2020 18:22:27 -0400 Subject: [PATCH 1/2] brought hack methods that were removed by accident (#276) --- src/Protocol/Window/IShowMessageHandler.cs | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/Protocol/Window/IShowMessageHandler.cs b/src/Protocol/Window/IShowMessageHandler.cs index f64a55ffb..a48cacd7f 100644 --- a/src/Protocol/Window/IShowMessageHandler.cs +++ b/src/Protocol/Window/IShowMessageHandler.cs @@ -1,8 +1,10 @@ +using System; using System.Threading; using System.Threading.Tasks; using MediatR; using OmniSharp.Extensions.JsonRpc; using OmniSharp.Extensions.JsonRpc.Generation; +using OmniSharp.Extensions.LanguageServer.Protocol.Client; using OmniSharp.Extensions.LanguageServer.Protocol.Models; using OmniSharp.Extensions.LanguageServer.Protocol.Server; @@ -16,4 +18,32 @@ public abstract class ShowMessageHandler : IShowMessageHandler { public abstract Task Handle(ShowMessageParams request, CancellationToken cancellationToken); } + + public static partial class ShowMessageExtensions + { + public static void Show(this IWindowLanguageServer mediator, ShowMessageParams @params) + { + mediator.ShowMessage(@params); + } + + public static void ShowError(this IWindowLanguageServer mediator, string message) + { + mediator.ShowMessage(new ShowMessageParams() { Type = MessageType.Error, Message = message }); + } + + public static void Show(this IWindowLanguageServer mediator, string message) + { + mediator.ShowMessage(new ShowMessageParams() { Type = MessageType.Log, Message = message }); + } + + public static void ShowWarning(this IWindowLanguageServer mediator, string message) + { + mediator.ShowMessage(new ShowMessageParams() { Type = MessageType.Warning, Message = message }); + } + + public static void ShowInfo(this IWindowLanguageServer mediator, string message) + { + mediator.ShowMessage(new ShowMessageParams() { Type = MessageType.Info, Message = message }); + } + } } From ee5f6f9d210aa4d25b68ae7da6257d697f4297fb Mon Sep 17 00:00:00 2001 From: David Driscoll Date: Thu, 6 Aug 2020 23:24:37 -0400 Subject: [PATCH 2/2] Added tests! --- src/Protocol/Window/IShowMessageHandler.cs | 25 +++ .../Lsp.Tests/Integration/ShowMessageTests.cs | 161 ++++++++++++++++++ 2 files changed, 186 insertions(+) create mode 100644 test/Lsp.Tests/Integration/ShowMessageTests.cs diff --git a/src/Protocol/Window/IShowMessageHandler.cs b/src/Protocol/Window/IShowMessageHandler.cs index a48cacd7f..570ce6c16 100644 --- a/src/Protocol/Window/IShowMessageHandler.cs +++ b/src/Protocol/Window/IShowMessageHandler.cs @@ -21,6 +21,31 @@ public abstract class ShowMessageHandler : IShowMessageHandler public static partial class ShowMessageExtensions { + public static void Show(this ILanguageServer mediator, ShowMessageParams @params) + { + mediator.ShowMessage(@params); + } + + public static void ShowError(this ILanguageServer mediator, string message) + { + mediator.ShowMessage(new ShowMessageParams() { Type = MessageType.Error, Message = message }); + } + + public static void Show(this ILanguageServer mediator, string message) + { + mediator.ShowMessage(new ShowMessageParams() { Type = MessageType.Log, Message = message }); + } + + public static void ShowWarning(this ILanguageServer mediator, string message) + { + mediator.ShowMessage(new ShowMessageParams() { Type = MessageType.Warning, Message = message }); + } + + public static void ShowInfo(this ILanguageServer mediator, string message) + { + mediator.ShowMessage(new ShowMessageParams() { Type = MessageType.Info, Message = message }); + } + public static void Show(this IWindowLanguageServer mediator, ShowMessageParams @params) { mediator.ShowMessage(@params); diff --git a/test/Lsp.Tests/Integration/ShowMessageTests.cs b/test/Lsp.Tests/Integration/ShowMessageTests.cs new file mode 100644 index 000000000..677ad8e4a --- /dev/null +++ b/test/Lsp.Tests/Integration/ShowMessageTests.cs @@ -0,0 +1,161 @@ +using System; +using System.Linq; +using System.Collections.Generic; +using System.Threading.Tasks; +using FluentAssertions; +using Microsoft.Extensions.DependencyInjection; +using NSubstitute; +using OmniSharp.Extensions.JsonRpc.Testing; +using OmniSharp.Extensions.LanguageProtocol.Testing; +using OmniSharp.Extensions.LanguageServer.Client; +using OmniSharp.Extensions.LanguageServer.Protocol.Models; +using OmniSharp.Extensions.LanguageServer.Protocol.Window; +using OmniSharp.Extensions.LanguageServer.Server; +using Xunit; +using Xunit.Abstractions; + +namespace Lsp.Tests.Integration +{ + public class ShowMessageTests : LanguageProtocolTestBase + { + public ShowMessageTests(ITestOutputHelper outputHelper) : base(new JsonRpcTestOptions() + .ConfigureForXUnit(outputHelper) + .WithSettleTimeSpan(TimeSpan.FromMilliseconds(200)) + ) + { + } + + private readonly List _receivedMessages = new List(); + + [Fact] + public async Task Should_Show_Messages_Through_Window_Extension_Methods() + { + var (client, server) = await Initialize(ConfigureClient, ConfigureServer); + + server.Window.ShowError("Something bad happened..."); + server.Window.ShowInfo("Here's something cool..."); + server.Window.ShowWarning("Uh-oh..."); + server.Window.Show("Just gotta let you know!"); + server.Window.Show(new ShowMessageParams() { + Type = MessageType.Log, Message = "1234" + }); + server.Window.ShowMessage(new ShowMessageParams() { + Type = MessageType.Log, Message = "1234" + }); + + await SettleNext(); + + _receivedMessages.Should().HaveCount(6); + _receivedMessages.Should().Contain(z => z.Type == MessageType.Error); + _receivedMessages.Should().Contain(z => z.Type == MessageType.Info); + _receivedMessages.Should().Contain(z => z.Type == MessageType.Warning); + _receivedMessages.Should().Contain(z => z.Type == MessageType.Log).And.Subject.Count(z => z.Type == MessageType.Log).Should().Be(3); + } + + [Fact] + public async Task Should_Show_Messages_Through_Server_Extension_Methods() + { + var (client, server) = await Initialize(ConfigureClient, ConfigureServer); + + server.ShowError("Something bad happened..."); + server.ShowInfo("Here's something cool..."); + server.ShowWarning("Uh-oh..."); + server.Show("Just gotta let you know!"); + server.Show(new ShowMessageParams() { + Type = MessageType.Log, Message = "1234" + }); + server.ShowMessage(new ShowMessageParams() { + Type = MessageType.Log, Message = "1234" + }); + + await SettleNext(); + + _receivedMessages.Should().HaveCount(6); + _receivedMessages.Should().Contain(z => z.Type == MessageType.Error); + _receivedMessages.Should().Contain(z => z.Type == MessageType.Info); + _receivedMessages.Should().Contain(z => z.Type == MessageType.Warning); + _receivedMessages.Should().Contain(z => z.Type == MessageType.Log).And.Subject.Count(z => z.Type == MessageType.Log).Should().Be(3); + } + + private void ConfigureClient(LanguageClientOptions options) + { + options.OnShowMessage((request) => { _receivedMessages.Add(request); }); + } + + private void ConfigureServer(LanguageServerOptions options) + { + // options.OnCodeLens() + } + } + public class LogMessageTests : LanguageProtocolTestBase + { + public LogMessageTests(ITestOutputHelper outputHelper) : base(new JsonRpcTestOptions() + .ConfigureForXUnit(outputHelper) + .WithSettleTimeSpan(TimeSpan.FromMilliseconds(200)) + ) + { + } + + private readonly List _receivedMessages = new List(); + + [Fact] + public async Task Should_Log_Messages_Through_Window_Extension_Methods() + { + var (client, server) = await Initialize(ConfigureClient, ConfigureServer); + + server.Window.LogError("Something bad happened..."); + server.Window.LogInfo("Here's something cool..."); + server.Window.LogWarning("Uh-oh..."); + server.Window.Log("Just gotta let you know!"); + server.Window.Log(new LogMessageParams() { + Type = MessageType.Log, Message = "1234" + }); + server.Window.LogMessage(new LogMessageParams() { + Type = MessageType.Log, Message = "1234" + }); + + await SettleNext(); + + _receivedMessages.Should().HaveCount(6); + _receivedMessages.Should().Contain(z => z.Type == MessageType.Error); + _receivedMessages.Should().Contain(z => z.Type == MessageType.Info); + _receivedMessages.Should().Contain(z => z.Type == MessageType.Warning); + _receivedMessages.Should().Contain(z => z.Type == MessageType.Log).And.Subject.Count(z => z.Type == MessageType.Log).Should().Be(3); + } + + [Fact] + public async Task Should_Log_Messages_Through_Server_Extension_Methods() + { + var (client, server) = await Initialize(ConfigureClient, ConfigureServer); + + server.LogError("Something bad happened..."); + server.LogInfo("Here's something cool..."); + server.LogWarning("Uh-oh..."); + server.Log("Just gotta let you know!"); + server.Log(new LogMessageParams() { + Type = MessageType.Log, Message = "1234" + }); + server.LogMessage(new LogMessageParams() { + Type = MessageType.Log, Message = "1234" + }); + + await SettleNext(); + + _receivedMessages.Should().HaveCount(6); + _receivedMessages.Should().Contain(z => z.Type == MessageType.Error); + _receivedMessages.Should().Contain(z => z.Type == MessageType.Info); + _receivedMessages.Should().Contain(z => z.Type == MessageType.Warning); + _receivedMessages.Should().Contain(z => z.Type == MessageType.Log).And.Subject.Count(z => z.Type == MessageType.Log).Should().Be(3); + } + + private void ConfigureClient(LanguageClientOptions options) + { + options.OnLogMessage((request) => { _receivedMessages.Add(request); }); + } + + private void ConfigureServer(LanguageServerOptions options) + { + // options.OnCodeLens() + } + } +}