public async Task ServerRepliesWithResponse() { var request = new RequestPacket() { Seq = 21, Command = "foo" }; var writer = new TestTextWriter(new Action <string>[] { value => { var packet = JsonConvert.DeserializeObject <EventPacket>(value); Assert.Equal("started", packet.Event); }, value => { var packet = JsonConvert.DeserializeObject <ResponsePacket>(value); Assert.Equal(request.Seq, packet.Request_seq); Assert.Equal(request.Command, packet.Command); Assert.Equal(true, packet.Success); Assert.Equal(true, packet.Running); Assert.Null(packet.Message); } }); var factory = new StdioServerFactory(new StringReader(JsonConvert.SerializeObject(request) + "\r\n"), writer); factory.Start(new StdioServerInformation(), features => { return(Task.FromResult <object>(null)); }); await writer.Completion; }
public void ServerRepliesWithResponseWhenTaskDoesNotReturnAnything() { var request = new RequestPacket() { Seq = 21, Command = "foo" }; var writer = new TestTextWriter( value => { var packet = JsonConvert.DeserializeObject <EventPacket>(value); Assert.Equal("started", packet.Event); }, value => { Assert.Contains("\"Body\":null", value); // Deserialize is too relaxed... var packet = JsonConvert.DeserializeObject <ResponsePacket>(value); Assert.Equal(request.Seq, packet.Request_seq); Assert.Equal(request.Command, packet.Command); Assert.False(packet.Success); Assert.True(packet.Running); Assert.Contains(nameof(NotSupportedException), packet.Message.ToString()); Assert.Null(packet.Body); } ); using (BuildTestServerAndStart(new StringReader(JsonConvert.SerializeObject(request) + "\r\n"), writer)) { Assert.True(writer.Completion.WaitOne(TimeSpan.FromSeconds(10)), "Timeout"); Assert.Null(writer.Exception); } }
public async Task ServerRepliesWithResponseWhenTaskDoesNotReturnAnything() { var request = new RequestPacket() { Seq = 21, Command = "foo" }; var writer = new TestTextWriter(new Action <string>[] { value => { var packet = JsonConvert.DeserializeObject <EventPacket>(value); Assert.Equal("started", packet.Event); }, value => { Assert.True(value.Contains("\"Body\":null")); // Deserialize is too relaxed... var packet = JsonConvert.DeserializeObject <ResponsePacket>(value); Assert.Equal(request.Seq, packet.Request_seq); Assert.Equal(request.Command, packet.Command); Assert.Equal(true, packet.Success); Assert.Equal(true, packet.Running); Assert.Null(packet.Message); Assert.Null(packet.Body); } }); var factory = new StdioServerFactory(new StringReader(JsonConvert.SerializeObject(request) + "\r\n"), writer); factory.Start(new StdioServerInformation(), features => { return(Task.WhenAll()); }); await writer.Completion; }
public void ServerRepliesWithResponseWhenHandlerFails() { var request = new RequestPacket() { Seq = 21, Command = "foo" }; var writer = new TestTextWriter( value => { var packet = JsonConvert.DeserializeObject <EventPacket>(value); Assert.Equal("started", packet.Event); }, value => { var packet = JsonConvert.DeserializeObject <ResponsePacket>(value); Assert.Equal(request.Seq, packet.Request_seq); Assert.Equal(request.Command, packet.Command); Assert.False(packet.Success); Assert.True(packet.Running); Assert.NotNull(packet.Message); } ); BuildTestServerAndStart(new StringReader(JsonConvert.SerializeObject(request) + "\r\n"), writer); Assert.True(writer.Completion.WaitOne(TimeSpan.FromHours(10)), "Timeout"); Assert.Null(writer.Exception); }
public void HandleAggregatableResponsesForSingleLanguage() { var request = new TestRequestPacket() { Seq = 99, Command = OmniSharpEndpoints.FindSymbols, Arguments = JsonConvert.SerializeObject(new FindSymbolsRequest { Language = LanguageNames.CSharp }) }; var writer = new TestTextWriter( value => { var packet = JsonConvert.DeserializeObject <EventPacket>(value); Assert.Equal("started", packet.Event); }, value => { var packet = JsonConvert.DeserializeObject <ResponsePacket>(value); Assert.Equal(request.Seq, packet.Request_seq); Assert.Equal(request.Command, packet.Command); Assert.True(packet.Success); Assert.True(packet.Running); Assert.Null(packet.Message); var quickFixResponse = ((JObject)packet.Body).ToObject <QuickFixResponse>(); Assert.Equal(3, quickFixResponse.QuickFixes.Count()); Assert.Equal("AAAFakeFindSymbolsService", quickFixResponse.QuickFixes.ElementAt(0).Text); Assert.Equal("BBBFakeFindSymbolsService", quickFixResponse.QuickFixes.ElementAt(1).Text); Assert.Equal("CCCFakeFindSymbolsService", quickFixResponse.QuickFixes.ElementAt(2).Text); } ); var exports = new ExportDescriptorProvider[] { MefValueProvider.From <IRequestHandler>( new BBBFakeFindSymbolsService(), new Dictionary <string, object> { ["EndpointName"] = OmniSharpEndpoints.FindSymbols, ["Language"] = LanguageNames.CSharp }), MefValueProvider.From <IRequestHandler>( new CCCFakeFindSymbolsService(), new Dictionary <string, object> { ["EndpointName"] = OmniSharpEndpoints.FindSymbols, ["Language"] = LanguageNames.CSharp }), MefValueProvider.From <IRequestHandler>( new AAAFakeFindSymbolsService(), new Dictionary <string, object> { ["EndpointName"] = OmniSharpEndpoints.FindSymbols, ["Language"] = LanguageNames.CSharp }), }; using (StdioServerFacts.BuildTestServerAndStart(new StringReader(JsonConvert.SerializeObject(request) + "\r\n"), writer, additionalExports: exports)) { Assert.True(writer.Completion.WaitOne(TimeSpan.FromSeconds(60)), "Timeout"); Assert.Null(writer.Exception); } }
public void HandleNonAggregatableResponses() { var request = new TestRequestPacket() { Seq = 99, Command = OmniSharpEndpoints.GotoDefinition, Arguments = JsonConvert.SerializeObject(new GotoDefinitionRequest { FileName = "foo.cs" }) }; var writer = new TestTextWriter( value => { var packet = JsonConvert.DeserializeObject <EventPacket>(value); Assert.Equal("started", packet.Event); }, value => { var packet = JsonConvert.DeserializeObject <ResponsePacket>(value); Assert.Equal(request.Seq, packet.Request_seq); Assert.Equal(request.Command, packet.Command); Assert.True(packet.Success); Assert.True(packet.Running); Assert.Null(packet.Message); var gotoDefinitionResponse = ((JObject)packet.Body).ToObject <GotoDefinitionResponse>(); Assert.Equal("ZZZFake.cs", gotoDefinitionResponse.FileName); } ); var exports = new ExportDescriptorProvider[] { MefValueProvider.From <IProjectSystem>(new FakeProjectSystem()), MefValueProvider.From <IRequestHandler>( new FakeGotoDefinitionService("ZZZFake", false), new Dictionary <string, object> { ["EndpointName"] = OmniSharpEndpoints.GotoDefinition, ["Language"] = LanguageNames.CSharp }), MefValueProvider.From <IRequestHandler>( new FakeGotoDefinitionService("AAAFake", true), new Dictionary <string, object> { ["EndpointName"] = OmniSharpEndpoints.GotoDefinition, ["Language"] = LanguageNames.CSharp }), }; using (StdioServerFacts.BuildTestServerAndStart(new StringReader(JsonConvert.SerializeObject(request) + "\r\n"), writer, additionalExports: exports)) { Assert.True(writer.Completion.WaitOne(TimeSpan.FromSeconds(60)), "Timeout"); Assert.Null(writer.Exception); } }
public async Task ServerPrintsStartedMessage() { var writer = new TestTextWriter(new Action<string>[] { value => { var packet = JsonConvert.DeserializeObject<EventPacket>(value); Assert.Equal("started", packet.Event); } }); var factory = new StdioServerFactory(new StringReader(""), writer); factory.Start(new StdioServerInformation(), features => Task.FromResult<object>(null)); await writer.Completion; }
public void ServerPrintsStartedMessage() { var writer = new TestTextWriter( value => { var packet = JsonConvert.DeserializeObject <EventPacket>(value); Assert.Equal("started", packet.Event); } ); BuildTestServerAndStart(new StringReader(""), writer); Assert.True(writer.Completion.WaitOne(TimeSpan.FromSeconds(10)), "Timeout"); Assert.Null(writer.Exception); }
public async Task ServerPrintsStartedMessage() { var writer = new TestTextWriter(new Action <string>[] { value => { var packet = JsonConvert.DeserializeObject <EventPacket>(value); Assert.Equal("started", packet.Event); } }); var factory = new StdioServerFactory(new StringReader(""), writer); factory.Start(new StdioServerInformation(), features => Task.FromResult <object>(null)); await writer.Completion; }
public void ServerPrintsStartedMessage() { var writer = new TestTextWriter( value => { var packet = JsonConvert.DeserializeObject<EventPacket>(value); Assert.Equal("started", packet.Event); } ); BuildTestServerAndStart(new StringReader(""), writer); Assert.True(writer.Completion.WaitOne(TimeSpan.FromSeconds(10)), "Timeout"); Assert.Null(writer.Exception); }
public async Task ServerRepliesWithErrorToInvalidRequest() { var writer = new TestTextWriter(new Action<string>[] { value => { var packet = JsonConvert.DeserializeObject<EventPacket>(value); Assert.Equal("started", packet.Event); }, value => { var packet = JsonConvert.DeserializeObject<EventPacket>(value); Assert.Equal("error", packet.Event); Assert.NotNull(packet.Body); } }); var factory = new StdioServerFactory(new StringReader("{}\r\n"), writer); factory.Start(new StdioServerInformation(), features => Task.FromResult<object>(null)); await writer.Completion; }
public void ServerRepliesWithErrorToInvalidRequest() { var writer = new TestTextWriter( value => { var packet = JsonConvert.DeserializeObject<EventPacket>(value); Assert.Equal("started", packet.Event); }, value => { var packet = JsonConvert.DeserializeObject<EventPacket>(value); Assert.Equal("error", packet.Event); Assert.NotNull(packet.Body); } ); BuildTestServerAndStart(new StringReader("{}\r\n"), writer); Assert.True(writer.Completion.WaitOne(TimeSpan.FromSeconds(10)), "Timeout"); Assert.Null(writer.Exception); }
public void ServerRepliesWithErrorToInvalidRequest() { var writer = new TestTextWriter( value => { var packet = JsonConvert.DeserializeObject <EventPacket>(value); Assert.Equal("started", packet.Event); }, value => { var packet = JsonConvert.DeserializeObject <EventPacket>(value); Assert.Equal("error", packet.Event); Assert.NotNull(packet.Body); } ); BuildTestServerAndStart(new StringReader("{}\r\n"), writer); Assert.True(writer.Completion.WaitOne(TimeSpan.FromSeconds(10)), "Timeout"); Assert.Null(writer.Exception); }
public async Task ServerRepliesWithErrorToInvalidRequest() { var writer = new TestTextWriter(new Action <string>[] { value => { var packet = JsonConvert.DeserializeObject <EventPacket>(value); Assert.Equal("started", packet.Event); }, value => { var packet = JsonConvert.DeserializeObject <EventPacket>(value); Assert.Equal("error", packet.Event); Assert.NotNull(packet.Body); } }); var factory = new StdioServerFactory(new StringReader("{}\r\n"), writer); factory.Start(new StdioServerInformation(), features => Task.FromResult <object>(null)); await writer.Completion; }
public async Task ServerRepliesWithResponseWhenTaskDoesNotReturnAnything() { var request = new RequestPacket() { Seq = 21, Command = "foo" }; var writer = new TestTextWriter(new Action<string>[] { value => { var packet = JsonConvert.DeserializeObject<EventPacket>(value); Assert.Equal("started", packet.Event); }, value => { Assert.True(value.Contains("\"Body\":null")); // Deserialize is too relaxed... var packet = JsonConvert.DeserializeObject<ResponsePacket>(value); Assert.Equal(request.Seq, packet.Request_seq); Assert.Equal(request.Command, packet.Command); Assert.Equal(true, packet.Success); Assert.Equal(true, packet.Running); Assert.Null(packet.Message); Assert.Null(packet.Body); } }); var factory = new StdioServerFactory(new StringReader(JsonConvert.SerializeObject(request) + "\r\n"), writer); factory.Start(new StdioServerInformation(), features => { return Task.WhenAll(); }); await writer.Completion; }
public async Task ServerRepliesWithResponse() { var request = new RequestPacket() { Seq = 21, Command = "foo" }; var writer = new TestTextWriter(new Action<string>[] { value => { var packet = JsonConvert.DeserializeObject<EventPacket>(value); Assert.Equal("started", packet.Event); }, value => { var packet = JsonConvert.DeserializeObject<ResponsePacket>(value); Assert.Equal(request.Seq, packet.Request_seq); Assert.Equal(request.Command, packet.Command); Assert.Equal(true, packet.Success); Assert.Equal(true, packet.Running); Assert.Null(packet.Message); } }); var factory = new StdioServerFactory(new StringReader(JsonConvert.SerializeObject(request) + "\r\n"), writer); factory.Start(new StdioServerInformation(), features => { return Task.FromResult<object>(null); }); await writer.Completion; }
public void ServerRepliesWithResponseWhenHandlerFails() { var request = new RequestPacket() { Seq = 21, Command = "foo" }; var writer = new TestTextWriter( value => { var packet = JsonConvert.DeserializeObject<EventPacket>(value); Assert.Equal("started", packet.Event); }, value => { var packet = JsonConvert.DeserializeObject<ResponsePacket>(value); Assert.Equal(request.Seq, packet.Request_seq); Assert.Equal(request.Command, packet.Command); Assert.Equal(false, packet.Success); Assert.Equal(true, packet.Running); Assert.NotNull(packet.Message); } ); var exceptionApplication = new MockHttpApplication { ProcessAction = _ => { throw new Exception("Boom"); } }; BuildTestServerAndStart(new StringReader(JsonConvert.SerializeObject(request) + "\r\n"), writer, exceptionApplication); Assert.True(writer.Completion.WaitOne(TimeSpan.FromHours(10)), "Timeout"); Assert.Null(writer.Exception); }
public void ServerRepliesWithResponse() { var request = new RequestPacket() { Seq = 21, Command = "foo" }; var writer = new TestTextWriter( value => { var packet = JsonConvert.DeserializeObject<EventPacket>(value); Assert.Equal("started", packet.Event); }, value => { var packet = JsonConvert.DeserializeObject<ResponsePacket>(value); Assert.Equal(request.Seq, packet.Request_seq); Assert.Equal(request.Command, packet.Command); Assert.Equal(true, packet.Success); Assert.Equal(true, packet.Running); Assert.Null(packet.Message); } ); BuildTestServerAndStart(new StringReader(JsonConvert.SerializeObject(request) + "\r\n"), writer); Assert.True(writer.Completion.WaitOne(TimeSpan.FromSeconds(1000)), "Timeout"); Assert.Null(writer.Exception); }