Skip to content

Commit 5d1767b

Browse files
committed
Тесты на хелпер прогресса
1 parent 58cba76 commit 5d1767b

File tree

1 file changed

+188
-0
lines changed

1 file changed

+188
-0
lines changed
Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,188 @@
1+
package com.github._1c_syntax.bsl.languageserver;
2+
3+
import org.eclipse.lsp4j.ClientCapabilities;
4+
import org.eclipse.lsp4j.ProgressParams;
5+
import org.eclipse.lsp4j.WindowClientCapabilities;
6+
import org.eclipse.lsp4j.WorkDoneProgressBegin;
7+
import org.eclipse.lsp4j.WorkDoneProgressEnd;
8+
import org.eclipse.lsp4j.WorkDoneProgressReport;
9+
import org.eclipse.lsp4j.jsonrpc.messages.Either;
10+
import org.eclipse.lsp4j.services.LanguageClient;
11+
import org.junit.jupiter.api.Test;
12+
13+
import static org.mockito.ArgumentMatchers.any;
14+
import static org.mockito.ArgumentMatchers.refEq;
15+
import static org.mockito.Mockito.atMostOnce;
16+
import static org.mockito.Mockito.mock;
17+
import static org.mockito.Mockito.never;
18+
import static org.mockito.Mockito.verify;
19+
20+
class WorkDoneProgressHelperTest {
21+
22+
@Test
23+
void noOpProgressWithoutWorkDoneSupport() {
24+
// given
25+
var languageClientHolder = getLanguageClientHolder();
26+
var languageClient = languageClientHolder.getClient().orElseThrow();
27+
28+
var clientCapabilitiesHolder = getClientCapabilitiesHolder(Boolean.FALSE);
29+
var workDoneProgressHelper = new WorkDoneProgressHelper(languageClientHolder, clientCapabilitiesHolder);
30+
31+
// when
32+
var progress = workDoneProgressHelper.createProgress(1, "");
33+
34+
// then
35+
verify(languageClient, never()).createProgress(any());
36+
}
37+
38+
@Test
39+
void createProgressWithWorkDoneSupport() {
40+
// given
41+
var languageClient = mock(LanguageClient.class);
42+
var languageClientHolder = new LanguageClientHolder();
43+
languageClientHolder.connect(languageClient);
44+
45+
var clientCapabilitiesHolder = new ClientCapabilitiesHolder();
46+
47+
var workDoneProgressHelper = new WorkDoneProgressHelper(languageClientHolder, clientCapabilitiesHolder);
48+
49+
// when
50+
var progress = workDoneProgressHelper.createProgress(1, "");
51+
52+
// then
53+
verify(languageClient, atMostOnce()).createProgress(any());
54+
}
55+
56+
@Test
57+
void beginProgress() {
58+
// given
59+
var languageClient = mock(LanguageClient.class);
60+
var languageClientHolder = new LanguageClientHolder();
61+
languageClientHolder.connect(languageClient);
62+
63+
var clientCapabilitiesHolder = new ClientCapabilitiesHolder();
64+
65+
var workDoneProgressHelper = new WorkDoneProgressHelper(languageClientHolder, clientCapabilitiesHolder);
66+
67+
var progress = workDoneProgressHelper.createProgress(1, "");
68+
69+
// when
70+
progress.beginProgress("test");
71+
72+
// then
73+
var begin = new WorkDoneProgressBegin();
74+
begin.setTitle("test");
75+
var progressParams = new ProgressParams(Either.forLeft("token"), Either.forLeft(begin));
76+
77+
verify(languageClient, atMostOnce())
78+
.notifyProgress(
79+
refEq(
80+
progressParams,
81+
"token"
82+
)
83+
);
84+
}
85+
86+
@Test
87+
void tick() {
88+
// given
89+
var languageClient = mock(LanguageClient.class);
90+
var languageClientHolder = new LanguageClientHolder();
91+
languageClientHolder.connect(languageClient);
92+
93+
var clientCapabilitiesHolder = new ClientCapabilitiesHolder();
94+
95+
var workDoneProgressHelper = new WorkDoneProgressHelper(languageClientHolder, clientCapabilitiesHolder);
96+
97+
var progress = workDoneProgressHelper.createProgress(2, "files");
98+
progress.beginProgress("test");
99+
100+
// when
101+
progress.tick();
102+
103+
// then
104+
var report = new WorkDoneProgressReport();
105+
report.setMessage("1/2 files");
106+
report.setCancellable(false);
107+
report.setPercentage(50);
108+
109+
var progressParams = new ProgressParams(Either.forLeft("token"), Either.forLeft(report));
110+
111+
verify(languageClient, atMostOnce())
112+
.notifyProgress(
113+
refEq(
114+
progressParams,
115+
"token"
116+
)
117+
);
118+
119+
// when
120+
// one more tick
121+
progress.tick();
122+
123+
// then
124+
report.setMessage("2/2 files");
125+
progressParams = new ProgressParams(Either.forLeft("token"), Either.forLeft(report));
126+
127+
verify(languageClient, atMostOnce())
128+
.notifyProgress(
129+
refEq(
130+
progressParams,
131+
"token"
132+
)
133+
);
134+
}
135+
136+
@Test
137+
void endProgress() {
138+
// given
139+
var languageClient = mock(LanguageClient.class);
140+
var languageClientHolder = new LanguageClientHolder();
141+
languageClientHolder.connect(languageClient);
142+
143+
var clientCapabilitiesHolder = new ClientCapabilitiesHolder();
144+
145+
var workDoneProgressHelper = new WorkDoneProgressHelper(languageClientHolder, clientCapabilitiesHolder);
146+
147+
var progress = workDoneProgressHelper.createProgress(1, "");
148+
149+
progress.beginProgress("test");
150+
151+
// when
152+
progress.endProgress("end");
153+
154+
// then
155+
var end = new WorkDoneProgressEnd();
156+
end.setMessage("end");
157+
var progressParams = new ProgressParams(Either.forLeft("token"), Either.forLeft(end));
158+
159+
verify(languageClient, atMostOnce())
160+
.notifyProgress(
161+
refEq(
162+
progressParams,
163+
"token"
164+
)
165+
);
166+
}
167+
168+
private LanguageClientHolder getLanguageClientHolder() {
169+
var languageClient = mock(LanguageClient.class);
170+
var languageClientHolder = new LanguageClientHolder();
171+
languageClientHolder.connect(languageClient);
172+
173+
return languageClientHolder;
174+
}
175+
176+
private ClientCapabilitiesHolder getClientCapabilitiesHolder(Boolean workDoneProgress) {
177+
var windowClientCapabilities = new WindowClientCapabilities();
178+
windowClientCapabilities.setWorkDoneProgress(workDoneProgress);
179+
180+
var clientCapabilities = new ClientCapabilities();
181+
clientCapabilities.setWindow(windowClientCapabilities);
182+
183+
var clientCapabilitiesHolder = new ClientCapabilitiesHolder();
184+
clientCapabilitiesHolder.setCapabilities(clientCapabilities);
185+
186+
return clientCapabilitiesHolder;
187+
}
188+
}

0 commit comments

Comments
 (0)