Skip to content

Commit e961bdd

Browse files
Added a few assertions for prepare rename (#413)
1 parent cbc8d95 commit e961bdd

File tree

1 file changed

+26
-11
lines changed

1 file changed

+26
-11
lines changed

test/Lsp.Tests/Integration/RenameTests.cs

+26-11
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44
using System.Threading.Tasks;
55
using FluentAssertions;
66
using NSubstitute;
7+
using NSubstitute.Callbacks;
78
using OmniSharp.Extensions.JsonRpc.Testing;
89
using OmniSharp.Extensions.LanguageProtocol.Testing;
910
using OmniSharp.Extensions.LanguageServer.Client;
1011
using OmniSharp.Extensions.LanguageServer.Protocol;
12+
using OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities;
1113
using OmniSharp.Extensions.LanguageServer.Protocol.Document;
1214
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
1315
using OmniSharp.Extensions.LanguageServer.Server;
@@ -20,19 +22,19 @@ namespace Lsp.Tests.Integration
2022
{
2123
public class RenameTests : LanguageProtocolTestBase
2224
{
23-
private readonly Func<PrepareRenameParams, CancellationToken, Task<RangeOrPlaceholderRange?>> _prepareRename;
24-
private readonly Func<RenameParams, CancellationToken, Task<WorkspaceEdit?>> _rename;
25+
private readonly Func<PrepareRenameParams, RenameCapability, CancellationToken, Task<RangeOrPlaceholderRange?>> _prepareRename;
26+
private readonly Func<RenameParams, RenameCapability, CancellationToken, Task<WorkspaceEdit?>> _rename;
2527

2628
public RenameTests(ITestOutputHelper outputHelper) : base(new JsonRpcTestOptions().ConfigureForXUnit(outputHelper, LogEventLevel.Verbose))
2729
{
28-
_prepareRename = Substitute.For<Func<PrepareRenameParams, CancellationToken, Task<RangeOrPlaceholderRange?>>>();
29-
_rename = Substitute.For<Func<RenameParams, CancellationToken, Task<WorkspaceEdit?>>>();
30+
_prepareRename = Substitute.For<Func<PrepareRenameParams, RenameCapability, CancellationToken, Task<RangeOrPlaceholderRange?>>>();
31+
_rename = Substitute.For<Func<RenameParams, RenameCapability, CancellationToken, Task<WorkspaceEdit?>>>();
3032
}
3133

3234
[Fact]
3335
public async Task Should_Handle_Rename_With_No_Value()
3436
{
35-
_prepareRename.Invoke(Arg.Any<PrepareRenameParams>(), Arg.Any<CancellationToken>())
37+
_prepareRename.Invoke(Arg.Any<PrepareRenameParams>(), Arg.Any<RenameCapability>(), Arg.Any<CancellationToken>())
3638
.Returns(
3739
call => {
3840
var pos = call.Arg<PrepareRenameParams>().Position;
@@ -45,7 +47,7 @@ public async Task Should_Handle_Rename_With_No_Value()
4547
}
4648
);
4749

48-
_rename.Invoke(Arg.Any<RenameParams>(), Arg.Any<CancellationToken>())
50+
_rename.Invoke(Arg.Any<RenameParams>(), Arg.Any<RenameCapability>(), Arg.Any<CancellationToken>())
4951
.Returns(
5052
new WorkspaceEdit() {
5153
DocumentChanges = new Container<WorkspaceEditDocumentChange>(new WorkspaceEditDocumentChange(new CreateFile() {
@@ -76,12 +78,19 @@ public async Task Should_Handle_Rename_With_No_Value()
7678

7779
renameResponse!.DocumentChanges.Should().HaveCount(1);
7880
renameResponse.DocumentChanges.Should().Match(z => z.Any(x => x.IsCreateFile));
81+
82+
// Ensure capability was provided to both sides as needed
83+
_prepareRename.Received(1).Invoke(Arg.Any<PrepareRenameParams>(), Arg.Is<RenameCapability>(z => z.PrepareSupport), Arg.Any<CancellationToken>());
84+
_rename.Received(1).Invoke(Arg.Any<RenameParams>(), Arg.Is<RenameCapability>(z => z.PrepareSupport), Arg.Any<CancellationToken>());
85+
var capability1 = _prepareRename.ReceivedCalls().Select(z => z.GetArguments()[1] as RenameCapability).FirstOrDefault();
86+
var capability2 = _rename.ReceivedCalls().Select(z => z.GetArguments()[1] as RenameCapability).FirstOrDefault();
87+
capability1.Should().BeSameAs(capability2);
7988
}
8089

8190
[Fact]
8291
public async Task Should_Handle_Prepare_Rename_With_No_Value()
8392
{
84-
_prepareRename.Invoke(Arg.Any<PrepareRenameParams>(), Arg.Any<CancellationToken>())
93+
_prepareRename.Invoke(Arg.Any<PrepareRenameParams>(), Arg.Any<RenameCapability>(), Arg.Any<CancellationToken>())
8594
.Returns(Task.FromResult<RangeOrPlaceholderRange?>(null)!);
8695
var (client, _) = await Initialize(ClientOptionsAction, ServerOptionsAction);
8796

@@ -99,7 +108,7 @@ public async Task Should_Handle_Prepare_Rename_With_No_Value()
99108
[Fact]
100109
public async Task Should_Handle_Prepare_Rename_With_Range()
101110
{
102-
_prepareRename.Invoke(Arg.Any<PrepareRenameParams>(), Arg.Any<CancellationToken>())
111+
_prepareRename.Invoke(Arg.Any<PrepareRenameParams>(), Arg.Any<RenameCapability>(), Arg.Any<CancellationToken>())
103112
.Returns(
104113
call => {
105114
var pos = call.Arg<PrepareRenameParams>().Position;
@@ -128,7 +137,7 @@ public async Task Should_Handle_Prepare_Rename_With_Range()
128137
[Fact]
129138
public async Task Should_Handle_Prepare_Rename_With_PlaceholderRange()
130139
{
131-
_prepareRename.Invoke(Arg.Any<PrepareRenameParams>(), Arg.Any<CancellationToken>())
140+
_prepareRename.Invoke(Arg.Any<PrepareRenameParams>(), Arg.Any<RenameCapability>(), Arg.Any<CancellationToken>())
132141
.Returns(
133142
call => {
134143
var pos = call.Arg<PrepareRenameParams>().Position;
@@ -161,7 +170,7 @@ public async Task Should_Handle_Prepare_Rename_With_PlaceholderRange()
161170
[Fact]
162171
public async Task Should_Handle_Prepare_Rename_With_DefaultBehavior()
163172
{
164-
_prepareRename.Invoke(Arg.Any<PrepareRenameParams>(), Arg.Any<CancellationToken>())
173+
_prepareRename.Invoke(Arg.Any<PrepareRenameParams>(), Arg.Any<RenameCapability>(), Arg.Any<CancellationToken>())
165174
.Returns(
166175
call => new RangeOrPlaceholderRange(
167176
new RenameDefaultBehavior() {
@@ -193,13 +202,19 @@ private void ServerOptionsAction(LanguageServerOptions obj)
193202
obj.OnRename(
194203
_rename, new RenameRegistrationOptions() {
195204
DocumentSelector = DocumentSelector.ForLanguage("csharp"),
196-
PrepareProvider = true
205+
PrepareProvider = true,
197206
}
198207
);
199208
}
200209

201210
private void ClientOptionsAction(LanguageClientOptions obj)
202211
{
212+
obj.WithCapability(
213+
new RenameCapability() {
214+
PrepareSupport = true,
215+
PrepareSupportDefaultBehavior = true
216+
}
217+
);
203218
}
204219
}
205220
}

0 commit comments

Comments
 (0)