Skip to content

Commit 1497f35

Browse files
Fixed bug in composite handler managera and added unit tests (#316)
1 parent 0b9e85d commit 1497f35

File tree

3 files changed

+103
-1
lines changed

3 files changed

+103
-1
lines changed

src/JsonRpc/CompositeHandlersManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public IDisposable Add(JsonRpcHandlerFactory factory, JsonRpcHandlerOptions opti
3636

3737
public IDisposable Add(string method, JsonRpcHandlerFactory factory, JsonRpcHandlerOptions options)
3838
{
39-
var result = _parent.Add(factory, options);
39+
var result = _parent.Add(method, factory, options);
4040
_compositeDisposable.Add(result);
4141
return result;
4242
}
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
using System;
2+
using System.Reactive.Disposables;
3+
using FluentAssertions;
4+
using NSubstitute;
5+
using OmniSharp.Extensions.JsonRpc;
6+
using Xunit;
7+
using Xunit.Abstractions;
8+
9+
namespace JsonRpc.Tests
10+
{
11+
public class CompositeHandlersManagerTests : AutoTestBase
12+
{
13+
public CompositeHandlersManagerTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper)
14+
{
15+
}
16+
17+
[Fact]
18+
public void Should_Add_Handler_Instance_To_Parent()
19+
{
20+
var parent = Substitute.For<IHandlersManager>();
21+
parent.Add(Arg.Any<IJsonRpcHandler>(), Arg.Any<JsonRpcHandlerOptions>()).Returns(Disposable.Empty);
22+
23+
var manager = new CompositeHandlersManager(parent);
24+
manager.Add(Substitute.For<IJsonRpcHandler>(), new JsonRpcHandlerOptions());
25+
26+
parent.Received(0).Add(Arg.Any<string>(), Arg.Any<IJsonRpcHandler>(), Arg.Any<JsonRpcHandlerOptions>());
27+
parent.Received(1).Add(Arg.Any<IJsonRpcHandler>(), Arg.Any<JsonRpcHandlerOptions>());
28+
manager.GetDisposable().Count.Should().Be(1);
29+
}
30+
31+
[Fact]
32+
public void Should_Add_Named_Handler_Instance_To_Parent()
33+
{
34+
var parent = Substitute.For<IHandlersManager>();
35+
parent.Add(Arg.Any<string>(), Arg.Any<IJsonRpcHandler>(), Arg.Any<JsonRpcHandlerOptions>()).Returns(Disposable.Empty);
36+
37+
var manager = new CompositeHandlersManager(parent);
38+
manager.Add("mymethod", Substitute.For<IJsonRpcHandler>(), new JsonRpcHandlerOptions());
39+
40+
parent.Received(0).Add(Arg.Any<IJsonRpcHandler>(), Arg.Any<JsonRpcHandlerOptions>());
41+
parent.Received(1).Add("mymethod", Arg.Any<IJsonRpcHandler>(), Arg.Any<JsonRpcHandlerOptions>());
42+
manager.GetDisposable().Count.Should().Be(1);
43+
}
44+
45+
[Fact]
46+
public void Should_Add_Handler_Factory_To_Parent()
47+
{
48+
var parent = Substitute.For<IHandlersManager>();
49+
parent.Add(Arg.Any<JsonRpcHandlerFactory>(), Arg.Any<JsonRpcHandlerOptions>()).Returns(Disposable.Empty);
50+
51+
var manager = new CompositeHandlersManager(parent);
52+
manager.Add(Substitute.For<JsonRpcHandlerFactory>(), new JsonRpcHandlerOptions());
53+
54+
parent.Received(0).Add(Arg.Any<string>(), Arg.Any<JsonRpcHandlerFactory>(), Arg.Any<JsonRpcHandlerOptions>());
55+
parent.Received(1).Add(Arg.Any<JsonRpcHandlerFactory>(), Arg.Any<JsonRpcHandlerOptions>());
56+
manager.GetDisposable().Count.Should().Be(1);
57+
}
58+
59+
[Fact]
60+
public void Should_Add_Named_Handler_Factory_To_Parent()
61+
{
62+
var parent = Substitute.For<IHandlersManager>();
63+
parent.Add(Arg.Any<string>(), Arg.Any<JsonRpcHandlerFactory>(), Arg.Any<JsonRpcHandlerOptions>()).Returns(Disposable.Empty);
64+
65+
var manager = new CompositeHandlersManager(parent);
66+
manager.Add("mymethod", Substitute.For<JsonRpcHandlerFactory>(), new JsonRpcHandlerOptions());
67+
68+
parent.Received(0).Add(Arg.Any<JsonRpcHandlerFactory>(), Arg.Any<JsonRpcHandlerOptions>());
69+
parent.Received(1).Add("mymethod", Arg.Any<JsonRpcHandlerFactory>(), Arg.Any<JsonRpcHandlerOptions>());
70+
manager.GetDisposable().Count.Should().Be(1);
71+
}
72+
73+
[Fact]
74+
public void Should_Add_Handler_Type_To_Parent()
75+
{
76+
var parent = Substitute.For<IHandlersManager>();
77+
parent.Add(Arg.Any<Type>(), Arg.Any<JsonRpcHandlerOptions>()).Returns(Disposable.Empty);
78+
79+
var manager = new CompositeHandlersManager(parent);
80+
manager.Add(Substitute.For<Type>(), new JsonRpcHandlerOptions());
81+
82+
parent.Received(0).Add(Arg.Any<string>(), Arg.Any<Type>(), Arg.Any<JsonRpcHandlerOptions>());
83+
parent.Received(1).Add(Arg.Any<Type>(), Arg.Any<JsonRpcHandlerOptions>());
84+
manager.GetDisposable().Count.Should().Be(1);
85+
}
86+
87+
[Fact]
88+
public void Should_Add_Named_Handler_Type_To_Parent()
89+
{
90+
var parent = Substitute.For<IHandlersManager>();
91+
parent.Add(Arg.Any<string>(), Arg.Any<Type>(), Arg.Any<JsonRpcHandlerOptions>()).Returns(Disposable.Empty);
92+
93+
var manager = new CompositeHandlersManager(parent);
94+
manager.Add("mymethod", Substitute.For<Type>(), new JsonRpcHandlerOptions());
95+
96+
parent.Received(0).Add(Arg.Any<Type>(), Arg.Any<JsonRpcHandlerOptions>());
97+
parent.Received(1).Add("mymethod", Arg.Any<Type>(), Arg.Any<JsonRpcHandlerOptions>());
98+
manager.GetDisposable().Count.Should().Be(1);
99+
}
100+
}
101+
}

test/JsonRpc.Tests/TestLanguageServerRegistry.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Composition;
34
using OmniSharp.Extensions.JsonRpc;
45

56
namespace JsonRpc.Tests

0 commit comments

Comments
 (0)