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