Skip to content

Commit 0ba2aac

Browse files
Copilotnixel2007
andcommitted
Add test coverage for didClose diagnostic publishing behavior
Co-authored-by: nixel2007 <1132840+nixel2007@users.noreply.github.com>
1 parent 89885c8 commit 0ba2aac

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentServiceTest.java

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,27 +22,35 @@
2222
package com.github._1c_syntax.bsl.languageserver;
2323

2424
import com.github._1c_syntax.bsl.languageserver.context.ServerContext;
25+
import com.github._1c_syntax.bsl.languageserver.events.LanguageServerInitializeRequestReceivedEvent;
2526
import com.github._1c_syntax.bsl.languageserver.jsonrpc.DiagnosticParams;
27+
import com.github._1c_syntax.bsl.languageserver.providers.DiagnosticProvider;
2628
import com.github._1c_syntax.bsl.languageserver.util.CleanupContextBeforeClassAndAfterClass;
2729
import com.github._1c_syntax.bsl.languageserver.utils.Ranges;
2830
import com.github._1c_syntax.utils.Absolute;
2931
import org.apache.commons.io.FileUtils;
32+
import org.eclipse.lsp4j.ClientCapabilities;
33+
import org.eclipse.lsp4j.DiagnosticCapabilities;
3034
import org.eclipse.lsp4j.DidChangeTextDocumentParams;
3135
import org.eclipse.lsp4j.DidCloseTextDocumentParams;
3236
import org.eclipse.lsp4j.DidOpenTextDocumentParams;
3337
import org.eclipse.lsp4j.DidSaveTextDocumentParams;
3438
import org.eclipse.lsp4j.DocumentDiagnosticParams;
3539
import org.eclipse.lsp4j.ImplementationParams;
40+
import org.eclipse.lsp4j.InitializeParams;
3641
import org.eclipse.lsp4j.Position;
3742
import org.eclipse.lsp4j.PrepareRenameParams;
3843
import org.eclipse.lsp4j.RenameParams;
44+
import org.eclipse.lsp4j.TextDocumentClientCapabilities;
3945
import org.eclipse.lsp4j.TextDocumentContentChangeEvent;
4046
import org.eclipse.lsp4j.TextDocumentIdentifier;
4147
import org.eclipse.lsp4j.TextDocumentItem;
4248
import org.eclipse.lsp4j.VersionedTextDocumentIdentifier;
49+
import org.eclipse.lsp4j.services.LanguageServer;
4350
import org.junit.jupiter.api.Test;
4451
import org.springframework.beans.factory.annotation.Autowired;
4552
import org.springframework.boot.test.context.SpringBootTest;
53+
import org.springframework.context.ApplicationEventPublisher;
4654
import org.springframework.test.context.bean.override.mockito.MockitoSpyBean;
4755

4856
import java.io.File;
@@ -55,6 +63,11 @@
5563

5664
import static org.assertj.core.api.Assertions.assertThat;
5765
import static org.awaitility.Awaitility.await;
66+
import static org.mockito.ArgumentMatchers.any;
67+
import static org.mockito.Mockito.clearInvocations;
68+
import static org.mockito.Mockito.mock;
69+
import static org.mockito.Mockito.never;
70+
import static org.mockito.Mockito.verify;
5871

5972
@SpringBootTest
6073
@CleanupContextBeforeClassAndAfterClass
@@ -64,6 +77,13 @@ class BSLTextDocumentServiceTest {
6477
private BSLTextDocumentService textDocumentService;
6578
@MockitoSpyBean
6679
private ServerContext serverContext;
80+
@MockitoSpyBean
81+
private DiagnosticProvider diagnosticProvider;
82+
@Autowired
83+
private ApplicationEventPublisher eventPublisher;
84+
@Autowired
85+
private ClientCapabilitiesHolder clientCapabilitiesHolder;
86+
6787

6888
@Test
6989
void didOpen() throws IOException {
@@ -186,6 +206,68 @@ void didClose() {
186206
textDocumentService.didClose(params);
187207
}
188208

209+
@Test
210+
void didClosePublishesEmptyDiagnosticsWhenClientDoesNotSupportPullDiagnostics() throws IOException {
211+
// given - open a document
212+
var textDocumentItem = getTextDocumentItem();
213+
var didOpenParams = new DidOpenTextDocumentParams(textDocumentItem);
214+
textDocumentService.didOpen(didOpenParams);
215+
216+
// Simulate client without pull diagnostics support
217+
var capabilities = new ClientCapabilities();
218+
// No TextDocumentClientCapabilities.diagnostic set
219+
clientCapabilitiesHolder.setCapabilities(capabilities);
220+
221+
var languageServer = mock(LanguageServer.class);
222+
var params = new InitializeParams();
223+
params.setCapabilities(capabilities);
224+
var event = new LanguageServerInitializeRequestReceivedEvent(languageServer, params);
225+
eventPublisher.publishEvent(event);
226+
227+
// Clear any invocations from didOpen
228+
clearInvocations(diagnosticProvider);
229+
230+
// when
231+
var closeParams = new DidCloseTextDocumentParams();
232+
closeParams.setTextDocument(new TextDocumentIdentifier(textDocumentItem.getUri()));
233+
textDocumentService.didClose(closeParams);
234+
235+
// then - publishEmptyDiagnosticList should be called
236+
verify(diagnosticProvider).publishEmptyDiagnosticList(any());
237+
}
238+
239+
@Test
240+
void didCloseDoesNotPublishEmptyDiagnosticsWhenClientSupportsPullDiagnostics() throws IOException {
241+
// given - open a document
242+
var textDocumentItem = getTextDocumentItem();
243+
var didOpenParams = new DidOpenTextDocumentParams(textDocumentItem);
244+
textDocumentService.didOpen(didOpenParams);
245+
246+
// Simulate client with pull diagnostics support
247+
var capabilities = new ClientCapabilities();
248+
var textDocumentCapabilities = new TextDocumentClientCapabilities();
249+
textDocumentCapabilities.setDiagnostic(new DiagnosticCapabilities());
250+
capabilities.setTextDocument(textDocumentCapabilities);
251+
clientCapabilitiesHolder.setCapabilities(capabilities);
252+
253+
var languageServer = mock(LanguageServer.class);
254+
var params = new InitializeParams();
255+
params.setCapabilities(capabilities);
256+
var event = new LanguageServerInitializeRequestReceivedEvent(languageServer, params);
257+
eventPublisher.publishEvent(event);
258+
259+
// Clear any invocations from didOpen
260+
clearInvocations(diagnosticProvider);
261+
262+
// when
263+
var closeParams = new DidCloseTextDocumentParams();
264+
closeParams.setTextDocument(new TextDocumentIdentifier(textDocumentItem.getUri()));
265+
textDocumentService.didClose(closeParams);
266+
267+
// then - publishEmptyDiagnosticList should NOT be called
268+
verify(diagnosticProvider, never()).publishEmptyDiagnosticList(any());
269+
}
270+
189271
@Test
190272
void didSave() {
191273
DidSaveTextDocumentParams params = new DidSaveTextDocumentParams();

0 commit comments

Comments
 (0)