4
4
using System . Threading . Tasks ;
5
5
using FluentAssertions ;
6
6
using NSubstitute ;
7
+ using NSubstitute . Callbacks ;
7
8
using OmniSharp . Extensions . JsonRpc . Testing ;
8
9
using OmniSharp . Extensions . LanguageProtocol . Testing ;
9
10
using OmniSharp . Extensions . LanguageServer . Client ;
10
11
using OmniSharp . Extensions . LanguageServer . Protocol ;
12
+ using OmniSharp . Extensions . LanguageServer . Protocol . Client . Capabilities ;
11
13
using OmniSharp . Extensions . LanguageServer . Protocol . Document ;
12
14
using OmniSharp . Extensions . LanguageServer . Protocol . Models ;
13
15
using OmniSharp . Extensions . LanguageServer . Server ;
@@ -20,19 +22,19 @@ namespace Lsp.Tests.Integration
20
22
{
21
23
public class RenameTests : LanguageProtocolTestBase
22
24
{
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 ;
25
27
26
28
public RenameTests ( ITestOutputHelper outputHelper ) : base ( new JsonRpcTestOptions ( ) . ConfigureForXUnit ( outputHelper , LogEventLevel . Verbose ) )
27
29
{
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 ? > > > ( ) ;
30
32
}
31
33
32
34
[ Fact ]
33
35
public async Task Should_Handle_Rename_With_No_Value ( )
34
36
{
35
- _prepareRename . Invoke ( Arg . Any < PrepareRenameParams > ( ) , Arg . Any < CancellationToken > ( ) )
37
+ _prepareRename . Invoke ( Arg . Any < PrepareRenameParams > ( ) , Arg . Any < RenameCapability > ( ) , Arg . Any < CancellationToken > ( ) )
36
38
. Returns (
37
39
call => {
38
40
var pos = call . Arg < PrepareRenameParams > ( ) . Position ;
@@ -45,7 +47,7 @@ public async Task Should_Handle_Rename_With_No_Value()
45
47
}
46
48
) ;
47
49
48
- _rename . Invoke ( Arg . Any < RenameParams > ( ) , Arg . Any < CancellationToken > ( ) )
50
+ _rename . Invoke ( Arg . Any < RenameParams > ( ) , Arg . Any < RenameCapability > ( ) , Arg . Any < CancellationToken > ( ) )
49
51
. Returns (
50
52
new WorkspaceEdit ( ) {
51
53
DocumentChanges = new Container < WorkspaceEditDocumentChange > ( new WorkspaceEditDocumentChange ( new CreateFile ( ) {
@@ -76,12 +78,19 @@ public async Task Should_Handle_Rename_With_No_Value()
76
78
77
79
renameResponse ! . DocumentChanges . Should ( ) . HaveCount ( 1 ) ;
78
80
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 ) ;
79
88
}
80
89
81
90
[ Fact ]
82
91
public async Task Should_Handle_Prepare_Rename_With_No_Value ( )
83
92
{
84
- _prepareRename . Invoke ( Arg . Any < PrepareRenameParams > ( ) , Arg . Any < CancellationToken > ( ) )
93
+ _prepareRename . Invoke ( Arg . Any < PrepareRenameParams > ( ) , Arg . Any < RenameCapability > ( ) , Arg . Any < CancellationToken > ( ) )
85
94
. Returns ( Task . FromResult < RangeOrPlaceholderRange ? > ( null ) ! ) ;
86
95
var ( client , _) = await Initialize ( ClientOptionsAction , ServerOptionsAction ) ;
87
96
@@ -99,7 +108,7 @@ public async Task Should_Handle_Prepare_Rename_With_No_Value()
99
108
[ Fact ]
100
109
public async Task Should_Handle_Prepare_Rename_With_Range ( )
101
110
{
102
- _prepareRename . Invoke ( Arg . Any < PrepareRenameParams > ( ) , Arg . Any < CancellationToken > ( ) )
111
+ _prepareRename . Invoke ( Arg . Any < PrepareRenameParams > ( ) , Arg . Any < RenameCapability > ( ) , Arg . Any < CancellationToken > ( ) )
103
112
. Returns (
104
113
call => {
105
114
var pos = call . Arg < PrepareRenameParams > ( ) . Position ;
@@ -128,7 +137,7 @@ public async Task Should_Handle_Prepare_Rename_With_Range()
128
137
[ Fact ]
129
138
public async Task Should_Handle_Prepare_Rename_With_PlaceholderRange ( )
130
139
{
131
- _prepareRename . Invoke ( Arg . Any < PrepareRenameParams > ( ) , Arg . Any < CancellationToken > ( ) )
140
+ _prepareRename . Invoke ( Arg . Any < PrepareRenameParams > ( ) , Arg . Any < RenameCapability > ( ) , Arg . Any < CancellationToken > ( ) )
132
141
. Returns (
133
142
call => {
134
143
var pos = call . Arg < PrepareRenameParams > ( ) . Position ;
@@ -161,7 +170,7 @@ public async Task Should_Handle_Prepare_Rename_With_PlaceholderRange()
161
170
[ Fact ]
162
171
public async Task Should_Handle_Prepare_Rename_With_DefaultBehavior ( )
163
172
{
164
- _prepareRename . Invoke ( Arg . Any < PrepareRenameParams > ( ) , Arg . Any < CancellationToken > ( ) )
173
+ _prepareRename . Invoke ( Arg . Any < PrepareRenameParams > ( ) , Arg . Any < RenameCapability > ( ) , Arg . Any < CancellationToken > ( ) )
165
174
. Returns (
166
175
call => new RangeOrPlaceholderRange (
167
176
new RenameDefaultBehavior ( ) {
@@ -193,13 +202,19 @@ private void ServerOptionsAction(LanguageServerOptions obj)
193
202
obj . OnRename (
194
203
_rename , new RenameRegistrationOptions ( ) {
195
204
DocumentSelector = DocumentSelector . ForLanguage ( "csharp" ) ,
196
- PrepareProvider = true
205
+ PrepareProvider = true ,
197
206
}
198
207
) ;
199
208
}
200
209
201
210
private void ClientOptionsAction ( LanguageClientOptions obj )
202
211
{
212
+ obj . WithCapability (
213
+ new RenameCapability ( ) {
214
+ PrepareSupport = true ,
215
+ PrepareSupportDefaultBehavior = true
216
+ }
217
+ ) ;
203
218
}
204
219
}
205
220
}
0 commit comments