@@ -27,6 +27,7 @@ import { ITestingSettings } from '../../../client/testing/configuration/types';
2727import { MockAutoSelectionService } from '../../mocks/autoSelector' ;
2828import { MockMemento } from '../../mocks/mementos' ;
2929import { untildify } from '../../../client/common/helpers' ;
30+ import { MockExtensions } from '../../mocks/extensions' ;
3031
3132suite ( 'Python Settings' , async ( ) => {
3233 class CustomPythonSettings extends PythonSettings {
@@ -40,13 +41,15 @@ suite('Python Settings', async () => {
4041 let config : TypeMoq . IMock < WorkspaceConfiguration > ;
4142 let expected : CustomPythonSettings ;
4243 let settings : CustomPythonSettings ;
44+ let extensions : MockExtensions ;
4345 setup ( ( ) => {
4446 sinon . stub ( EnvFileTelemetry , 'sendSettingTelemetry' ) . returns ( ) ;
4547 config = TypeMoq . Mock . ofType < WorkspaceConfiguration > ( undefined , TypeMoq . MockBehavior . Loose ) ;
4648
4749 const workspaceService = new WorkspaceService ( ) ;
4850 const workspaceMemento = new MockMemento ( ) ;
4951 const globalMemento = new MockMemento ( ) ;
52+ extensions = new MockExtensions ( ) ;
5053 const persistentStateFactory = new PersistentStateFactory ( globalMemento , workspaceMemento ) ;
5154 expected = new CustomPythonSettings (
5255 undefined ,
@@ -55,7 +58,8 @@ suite('Python Settings', async () => {
5558 new InterpreterPathService ( persistentStateFactory , workspaceService , [ ] , {
5659 remoteName : undefined ,
5760 } as IApplicationEnvironment ) ,
58- undefined ,
61+ { defaultLSType : LanguageServerType . Jedi } ,
62+ extensions ,
5963 ) ;
6064 settings = new CustomPythonSettings (
6165 undefined ,
@@ -64,7 +68,8 @@ suite('Python Settings', async () => {
6468 new InterpreterPathService ( persistentStateFactory , workspaceService , [ ] , {
6569 remoteName : undefined ,
6670 } as IApplicationEnvironment ) ,
67- undefined ,
71+ { defaultLSType : LanguageServerType . Jedi } ,
72+ extensions ,
6873 ) ;
6974 expected . defaultInterpreterPath = 'python' ;
7075 } ) ;
@@ -226,7 +231,7 @@ suite('Python Settings', async () => {
226231 const values = [
227232 { ls : LanguageServerType . Jedi , expected : LanguageServerType . Jedi , default : false } ,
228233 { ls : LanguageServerType . JediLSP , expected : LanguageServerType . Jedi , default : false } ,
229- { ls : LanguageServerType . Microsoft , expected : LanguageServerType . None , default : true } ,
234+ { ls : LanguageServerType . Microsoft , expected : LanguageServerType . Jedi , default : true } ,
230235 { ls : LanguageServerType . Node , expected : LanguageServerType . Node , default : false } ,
231236 { ls : LanguageServerType . None , expected : LanguageServerType . None , default : false } ,
232237 ] ;
@@ -235,7 +240,48 @@ suite('Python Settings', async () => {
235240 testLanguageServer ( v . ls , v . expected , v . default ) ;
236241 } ) ;
237242
238- testLanguageServer ( 'invalid' as LanguageServerType , LanguageServerType . None , true ) ;
243+ testLanguageServer ( 'invalid' as LanguageServerType , LanguageServerType . Jedi , true ) ;
244+ } ) ;
245+
246+ function testPyreflySettings ( pyreflyInstalled : boolean , pyreflyDisabled : boolean , languageServerDisabled : boolean ) {
247+ test ( `pyrefly ${ pyreflyInstalled ? 'installed' : 'not installed' } and ${
248+ pyreflyDisabled ? 'disabled' : 'enabled'
249+ } `, ( ) => {
250+ if ( pyreflyInstalled ) {
251+ extensions . extensionIdsToFind = [ 'meta.pyrefly' ] ;
252+ } else {
253+ extensions . extensionIdsToFind = [ ] ;
254+ }
255+ config . setup ( ( c ) => c . get < boolean > ( 'pyrefly.disableLanguageServices' ) ) . returns ( ( ) => pyreflyDisabled ) ;
256+
257+ config
258+ . setup ( ( c ) => c . get < string > ( 'languageServer' ) )
259+ . returns ( ( ) => undefined )
260+ . verifiable ( TypeMoq . Times . once ( ) ) ;
261+
262+ settings . update ( config . object ) ;
263+
264+ if ( languageServerDisabled ) {
265+ expect ( settings . languageServer ) . to . equal ( LanguageServerType . None ) ;
266+ } else {
267+ expect ( settings . languageServer ) . not . to . equal ( LanguageServerType . None ) ;
268+ }
269+ expect ( settings . languageServerIsDefault ) . to . equal ( true ) ;
270+ config . verifyAll ( ) ;
271+ } ) ;
272+ }
273+
274+ suite ( 'pyrefly languageServer settings' , async ( ) => {
275+ const values = [
276+ { pyreflyInstalled : true , pyreflyDisabled : false , languageServerDisabled : true } ,
277+ { pyreflyInstalled : true , pyreflyDisabled : true , languageServerDisabled : false } ,
278+ { pyreflyInstalled : false , pyreflyDisabled : true , languageServerDisabled : false } ,
279+ { pyreflyInstalled : false , pyreflyDisabled : false , languageServerDisabled : false } ,
280+ ] ;
281+
282+ values . forEach ( ( v ) => {
283+ testPyreflySettings ( v . pyreflyInstalled , v . pyreflyDisabled , v . languageServerDisabled ) ;
284+ } ) ;
239285 } ) ;
240286
241287 function testExperiments ( enabled : boolean ) {
0 commit comments