@@ -11,7 +11,6 @@ import { LanguageServerDownloader } from '../../../client/activation/languageSer
11
11
import { LanguageServerFolderService } from '../../../client/activation/languageServer/languageServerFolderService' ;
12
12
import { LanguageServerManager } from '../../../client/activation/languageServer/manager' ;
13
13
import {
14
- ILanguageServerActivator ,
15
14
ILanguageServerDownloader ,
16
15
ILanguageServerFolderService ,
17
16
ILanguageServerManager
@@ -30,7 +29,7 @@ import { sleep } from '../../core';
30
29
// tslint:disable:max-func-body-length
31
30
32
31
suite ( 'Language Server - Activator' , ( ) => {
33
- let activator : ILanguageServerActivator ;
32
+ let activator : LanguageServerExtensionActivator ;
34
33
let workspaceService : IWorkspaceService ;
35
34
let manager : ILanguageServerManager ;
36
35
let fs : IFileSystem ;
@@ -150,4 +149,59 @@ suite('Language Server - Activator', () => {
150
149
151
150
verify ( manager . dispose ( ) ) . once ( ) ;
152
151
} ) ;
152
+ test ( 'Download and check if ICU config exists' , async ( ) => {
153
+ const languageServerFolder = 'Some folder name' ;
154
+ const languageServerFolderPath = path . join ( EXTENSION_ROOT_DIR , languageServerFolder ) ;
155
+ const mscorlib = path . join ( languageServerFolderPath , 'mscorlib.dll' ) ;
156
+ const targetJsonFile = path . join ( languageServerFolderPath , 'Microsoft.Python.LanguageServer.runtimeconfig.json' ) ;
157
+
158
+ when ( settings . downloadLanguageServer ) . thenReturn ( true ) ;
159
+ when ( lsFolderService . getLanguageServerFolderName ( undefined ) ) . thenResolve ( languageServerFolder ) ;
160
+ when ( fs . fileExists ( mscorlib ) ) . thenResolve ( false ) ;
161
+ when ( lsDownloader . downloadLanguageServer ( languageServerFolderPath , undefined ) ) . thenResolve ( ) ;
162
+ when ( fs . fileExists ( targetJsonFile ) ) . thenResolve ( false ) ;
163
+
164
+ await activator . ensureLanguageServerIsAvailable ( undefined ) ;
165
+
166
+ verify ( lsFolderService . getLanguageServerFolderName ( undefined ) ) . once ( ) ;
167
+ verify ( lsDownloader . downloadLanguageServer ( anything ( ) , undefined ) ) . once ( ) ;
168
+ verify ( fs . fileExists ( targetJsonFile ) ) . once ( ) ;
169
+ } ) ;
170
+ test ( 'Do not download nor check if ICU config exists after downloading' , async ( ) => {
171
+ const languageServerFolder = 'Some folder name' ;
172
+ const languageServerFolderPath = path . join ( EXTENSION_ROOT_DIR , languageServerFolder ) ;
173
+ const mscorlib = path . join ( languageServerFolderPath , 'mscorlib.dll' ) ;
174
+ const targetJsonFile = path . join ( languageServerFolderPath , 'Microsoft.Python.LanguageServer.runtimeconfig.json' ) ;
175
+
176
+ when ( settings . downloadLanguageServer ) . thenReturn ( true ) ;
177
+ when ( lsFolderService . getLanguageServerFolderName ( undefined ) ) . thenResolve ( languageServerFolder ) ;
178
+ when ( fs . fileExists ( mscorlib ) ) . thenResolve ( true ) ;
179
+
180
+ await activator . ensureLanguageServerIsAvailable ( undefined ) ;
181
+
182
+ verify ( lsFolderService . getLanguageServerFolderName ( undefined ) ) . once ( ) ;
183
+ verify ( lsDownloader . downloadLanguageServer ( anything ( ) , undefined ) ) . never ( ) ;
184
+ verify ( fs . fileExists ( targetJsonFile ) ) . never ( ) ;
185
+ } ) ;
186
+ test ( 'JSON file is created to ensure LS can start without ICU' , async ( ) => {
187
+ const targetJsonFile = path . join ( 'some folder' , 'Microsoft.Python.LanguageServer.runtimeconfig.json' ) ;
188
+ const contents = { runtimeOptions : { configProperties : { 'System.Globalization.Invariant' : true } } } ;
189
+ when ( fs . fileExists ( targetJsonFile ) ) . thenResolve ( false ) ;
190
+ when ( fs . writeFile ( targetJsonFile , JSON . stringify ( contents ) ) ) . thenResolve ( ) ;
191
+
192
+ await activator . prepareLanguageServerForNoICU ( 'some folder' ) ;
193
+
194
+ verify ( fs . fileExists ( targetJsonFile ) ) . atLeast ( 1 ) ;
195
+ verify ( fs . writeFile ( targetJsonFile , JSON . stringify ( contents ) ) ) . once ( ) ;
196
+ } ) ;
197
+ test ( 'JSON file is not created if it already exists' , async ( ) => {
198
+ const targetJsonFile = path . join ( 'some folder' , 'Microsoft.Python.LanguageServer.runtimeconfig.json' ) ;
199
+ const contents = { runtimeOptions : { configProperties : { 'System.Globalization.Invariant' : true } } } ;
200
+ when ( fs . fileExists ( targetJsonFile ) ) . thenResolve ( true ) ;
201
+
202
+ await activator . prepareLanguageServerForNoICU ( 'some folder' ) ;
203
+
204
+ verify ( fs . fileExists ( targetJsonFile ) ) . atLeast ( 1 ) ;
205
+ verify ( fs . writeFile ( targetJsonFile , JSON . stringify ( contents ) ) ) . never ( ) ;
206
+ } ) ;
153
207
} ) ;
0 commit comments