66import { expect } from 'chai' ;
77import { instance , mock , verify , when } from 'ts-mockito' ;
88import * as typemoq from 'typemoq' ;
9- import { ConfigurationChangeEvent , Uri } from 'vscode' ;
9+ import { ConfigurationChangeEvent , Uri , WorkspaceFolder } from 'vscode' ;
10+ import { DocumentSelector } from 'vscode-languageclient' ;
1011import { LanguageServerAnalysisOptions } from '../../../client/activation/languageServer/analysisOptions' ;
1112import { LanguageServerFolderService } from '../../../client/activation/languageServer/languageServerFolderService' ;
1213import { ILanguageServerFolderService } from '../../../client/activation/types' ;
1314import { IWorkspaceService } from '../../../client/common/application/types' ;
1415import { WorkspaceService } from '../../../client/common/application/workspace' ;
1516import { ConfigurationService } from '../../../client/common/configuration/service' ;
17+ import { PYTHON_LANGUAGE } from '../../../client/common/constants' ;
1618import { PathUtils } from '../../../client/common/platform/pathUtils' ;
1719import { IConfigurationService , IDisposable , IExtensionContext , IOutputChannel , IPathUtils , IPythonExtensionBanner } from '../../../client/common/types' ;
1820import { EnvironmentVariablesProvider } from '../../../client/common/variables/environmentVariablesProvider' ;
@@ -26,6 +28,9 @@ import { sleep } from '../../core';
2628
2729suite ( 'Language Server - Analysis Options' , ( ) => {
2830 class TestClass extends LanguageServerAnalysisOptions {
31+ public getDocumentSelector ( workspaceFolder ?: WorkspaceFolder ) : DocumentSelector {
32+ return super . getDocumentSelector ( workspaceFolder ) ;
33+ }
2934 public getExcludedFiles ( ) : string [ ] {
3035 return super . getExcludedFiles ( ) ;
3136 }
@@ -199,4 +204,43 @@ suite('Language Server - Analysis Options', () => {
199204
200205 expect ( settingsChangedInvokedCount ) . to . be . equal ( 1 ) ;
201206 } ) ;
207+ test ( 'Ensure search pattern is not provided when there are no workspaces' , ( ) => {
208+ when ( workspace . workspaceFolders ) . thenReturn ( [ ] ) ;
209+
210+ const expectedSelector = [
211+ { scheme : 'file' , language : PYTHON_LANGUAGE } ,
212+ { scheme : 'untitled' , language : PYTHON_LANGUAGE }
213+ ] ;
214+
215+ const selector = analysisOptions . getDocumentSelector ( ) ;
216+
217+ expect ( selector ) . to . deep . equal ( expectedSelector ) ;
218+ } ) ;
219+ test ( 'Ensure search pattern is not provided in single-root workspaces' , ( ) => {
220+ const workspaceFolder : WorkspaceFolder = { name : '' , index : 0 , uri : Uri . file ( __dirname ) } ;
221+ when ( workspace . workspaceFolders ) . thenReturn ( [ workspaceFolder ] ) ;
222+
223+ const expectedSelector = [
224+ { scheme : 'file' , language : PYTHON_LANGUAGE } ,
225+ { scheme : 'untitled' , language : PYTHON_LANGUAGE }
226+ ] ;
227+
228+ const selector = analysisOptions . getDocumentSelector ( workspaceFolder ) ;
229+
230+ expect ( selector ) . to . deep . equal ( expectedSelector ) ;
231+ } ) ;
232+ test ( 'Ensure search pattern is provided in a multi-root workspace' , ( ) => {
233+ const workspaceFolder1 = { name : '1' , index : 0 , uri : Uri . file ( __dirname ) } ;
234+ const workspaceFolder2 = { name : '2' , index : 1 , uri : Uri . file ( __dirname ) } ;
235+ when ( workspace . workspaceFolders ) . thenReturn ( [ workspaceFolder1 , workspaceFolder2 ] ) ;
236+
237+ const expectedSelector = [
238+ { scheme : 'file' , language : PYTHON_LANGUAGE , pattern : `${ workspaceFolder1 . uri . fsPath } /**/*` } ,
239+ { scheme : 'untitled' , language : PYTHON_LANGUAGE }
240+ ] ;
241+
242+ const selector = analysisOptions . getDocumentSelector ( workspaceFolder1 ) ;
243+
244+ expect ( selector ) . to . deep . equal ( expectedSelector ) ;
245+ } ) ;
202246} ) ;
0 commit comments