-
Notifications
You must be signed in to change notification settings - Fork 105
/
Copy pathConnectionAndDisconnectionTests.cs
109 lines (90 loc) · 3.99 KB
/
ConnectionAndDisconnectionTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
using System;
using System.Threading.Tasks;
using FluentAssertions;
using NSubstitute;
using OmniSharp.Extensions.DebugAdapter.Client;
using OmniSharp.Extensions.DebugAdapter.Server;
using OmniSharp.Extensions.DebugAdapter.Testing;
using OmniSharp.Extensions.JsonRpc.Server;
using OmniSharp.Extensions.JsonRpc.Testing;
using Xunit;
using Xunit.Abstractions;
namespace Dap.Tests.Integration
{
public class ConnectionAndDisconnectionTests : DebugAdapterProtocolTestBase
{
public ConnectionAndDisconnectionTests(ITestOutputHelper outputHelper) : base(
new JsonRpcTestOptions().ConfigureForXUnit(outputHelper)
)
{
}
[Fact]
public async Task Server_Should_Stay_Alive_When_Requests_Throw_An_Exception()
{
var (client, server) = await Initialize(ConfigureClient, ConfigureServer);
var result = await client.SendRequest("keepalive").Returning<bool>(CancellationToken);
result.Should().BeTrue();
Func<Task> a = () => client.SendRequest("throw").ReturningVoid(CancellationToken);
await a.Should().ThrowAsync<InternalErrorException>();
result = await client.SendRequest("keepalive").Returning<bool>(CancellationToken);
result.Should().BeTrue();
}
[Fact]
public async Task Client_Should_Stay_Alive_When_Requests_Throw_An_Exception()
{
var (client, server) = await Initialize(ConfigureClient, ConfigureServer);
var result = await server.SendRequest("keepalive").Returning<bool>(CancellationToken);
result.Should().BeTrue();
Func<Task> a = () => server.SendRequest("throw").ReturningVoid(CancellationToken);
await a.Should().ThrowAsync<InternalErrorException>();
result = await server.SendRequest("keepalive").Returning<bool>(CancellationToken);
result.Should().BeTrue();
}
[Fact]
public async Task Server_Should_Support_Links()
{
var (client, server) = await Initialize(ConfigureClient, ConfigureServer);
var result = await client.SendRequest("ka").Returning<bool>(CancellationToken);
result.Should().BeTrue();
Func<Task> a = () => client.SendRequest("t").ReturningVoid(CancellationToken);
await a.Should().ThrowAsync<InternalErrorException>();
result = await client.SendRequest("ka").Returning<bool>(CancellationToken);
result.Should().BeTrue();
}
[Fact]
public async Task Client_Should_Support_Links()
{
var (client, server) = await Initialize(ConfigureClient, ConfigureServer);
var result = await server.SendRequest("ka").Returning<bool>(CancellationToken);
result.Should().BeTrue();
Func<Task> a = () => server.SendRequest("t").ReturningVoid(CancellationToken);
await a.Should().ThrowAsync<InternalErrorException>();
result = await server.SendRequest("ka").Returning<bool>(CancellationToken);
result.Should().BeTrue();
}
private void ConfigureClient(DebugAdapterClientOptions options)
{
options.OnRequest("keepalive", ct => Task.FromResult(true));
options.WithLink("keepalive", "ka");
options.WithLink("throw", "t");
options.OnRequest(
"throw", async ct => {
throw new NotSupportedException();
return Task.CompletedTask;
}
);
}
private void ConfigureServer(DebugAdapterServerOptions options)
{
options.OnRequest("keepalive", ct => Task.FromResult(true));
options.WithLink("keepalive", "ka");
options.WithLink("throw", "t");
options.OnRequest(
"throw", async ct => {
throw new NotSupportedException();
return Task.CompletedTask;
}
);
}
}
}