private static Mock <ILanguageServerFacade> CreateMockLanguageServer(Action <ShowDocumentParams, CancellationToken> callback, ShowDocumentResult result, Container <WorkspaceFolder>?workspaceFolders = null)
        {
            var window = StrictMock.Of <IWindowLanguageServer>();

            window
            .Setup(m => m.SendNotification(It.IsAny <LogMessageParams>()));
            window
            .Setup(m => m.SendRequest <ShowDocumentResult>(It.IsAny <ShowDocumentParams>(), It.IsAny <CancellationToken>()))
            .Callback((IRequest <ShowDocumentResult> request, CancellationToken token) =>
            {
                var @params = (ShowDocumentParams)request;
                callback(@params, token);
            })
            .ReturnsAsync(() => result);

            var workspace = StrictMock.Of <IWorkspaceLanguageServer>();

            workspace
            .Setup(m => m.SendRequest <Container <WorkspaceFolder>?>(It.IsAny <WorkspaceFolderParams>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(() => workspaceFolders);

            var server = StrictMock.Of <ILanguageServerFacade>();

            server
            .Setup(m => m.Window)
            .Returns(window.Object);
            server
            .Setup(m => m.Workspace)
            .Returns(workspace.Object);

            return(server);
        }
        private static Mock <ILanguageServerFacade> CreateMockLanguageServer(Action <ShowDocumentParams, CancellationToken> callback, ShowDocumentResult result, Action <string>?messageCallback = null, Container <WorkspaceFolder>?workspaceFolders = null)
        {
            var window = StrictMock.Of <IWindowLanguageServer>();

            window
            .Setup(m => m.SendNotification(It.IsAny <LogMessageParams>()));
            window
            .Setup(m => m.SendRequest <ShowDocumentResult>(It.IsAny <ShowDocumentParams>(), It.IsAny <CancellationToken>()))
            .Callback((IRequest <ShowDocumentResult> request, CancellationToken token) =>
            {
                var @params = (ShowDocumentParams)request;
                callback(@params, token);
            })
            .ReturnsAsync(() => result);
            window
            .Setup(m => m.SendNotification(It.IsAny <ShowMessageParams>()))
            .Callback((IRequest request) =>
            {
                var @params = (ShowMessageParams)request;
                if (messageCallback != null)
                {
                    messageCallback(@params.Message);
                }
                else
                {
                    Assert.Fail($"Message was displayed when no message expected: {@params.Message}");
                }
            });

            var workspace = StrictMock.Of <IWorkspaceLanguageServer>();

            workspace
            .Setup(m => m.SendRequest <Container <WorkspaceFolder>?>(It.IsAny <WorkspaceFolderParams>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(() => workspaceFolders);

            var server = StrictMock.Of <ILanguageServerFacade>();

            server
            .Setup(m => m.Window)
            .Returns(window.Object);
            server
            .Setup(m => m.Workspace)
            .Returns(workspace.Object);

            return(server);
        }