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;
        }
示例#2
0
        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;
        }
示例#4
0
        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;
        }
示例#8
0
        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);
        }
示例#13
0
        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);
        }