public async Task RequestsCancellation() { var executeCommandHandler = Substitute.For <IExecuteCommandHandler>(); executeCommandHandler .Handle(Arg.Any <ExecuteCommandParams>(), Arg.Any <CancellationToken>()) .Returns(async(c) => { await Task.Delay(1000, c.Arg <CancellationToken>()); throw new XunitException("Task was not cancelled in time!"); }); var collection = new HandlerCollection { executeCommandHandler }; var mediator = new LspRequestRouter(collection, _testLoggerFactory, _handlerMatcherCollection); var id = Guid.NewGuid().ToString(); var @params = new ExecuteCommandParams() { Command = "123" }; var request = new Request(id, "workspace/executeCommand", JObject.Parse(JsonConvert.SerializeObject(@params))); var response = ((IRequestRouter)mediator).RouteRequest(request); mediator.CancelRequest(id); var result = await response; result.IsError.Should().BeTrue(); result.Error.ShouldBeEquivalentTo(new RequestCancelled()); }
public async Task RequestsCancellation() { var textDocumentSyncHandler = TextDocumentSyncHandlerExtensions.With(DocumentSelector.ForPattern("**/*.cs")); textDocumentSyncHandler.Handle(Arg.Any <DidSaveTextDocumentParams>()).Returns(Task.CompletedTask); var codeActionHandler = Substitute.For <ICodeActionHandler>(); codeActionHandler.GetRegistrationOptions().Returns(new TextDocumentRegistrationOptions() { DocumentSelector = DocumentSelector.ForPattern("**/*.cs") }); codeActionHandler .Handle(Arg.Any <CodeActionParams>(), Arg.Any <CancellationToken>()) .Returns(async(c) => { await Task.Delay(1000, c.Arg <CancellationToken>()); throw new XunitException("Task was not cancelled in time!"); return(new CommandContainer()); }); var collection = new HandlerCollection { textDocumentSyncHandler, codeActionHandler }; var mediator = new LspRequestRouter(collection, _testLoggerFactory); var id = Guid.NewGuid().ToString(); var @params = new CodeActionParams() { TextDocument = new TextDocumentIdentifier(new Uri("file:///c:/test/123.cs")), Range = new Range(new Position(1, 1), new Position(2, 2)), Context = new CodeActionContext() { Diagnostics = new Container <Diagnostic>() } }; var request = new Request(id, "textDocument/codeAction", JObject.Parse(JsonConvert.SerializeObject(@params))); var response = ((IRequestRouter)mediator).RouteRequest(request); mediator.CancelRequest(id); var result = await response; result.IsError.Should().BeTrue(); result.Error.ShouldBeEquivalentTo(new RequestCancelled()); }
public Task Handle(CancelParams notification) { _requestRouter.CancelRequest(notification.Id); return(Task.CompletedTask); }