@@ -923,7 +923,27 @@ function configureHandler(): void {
923923}
924924
925925/** Set up the `TestController` and all of its dependencies. */
926- export function setUpTestController ( ) : vscode . Disposable [ ] {
926+ export function setUpTestController ( context : vscode . ExtensionContext ) : vscode . Disposable [ ] {
927+ // If currently disabled, just create a mechanism to activate when the setting changes
928+ if ( vscode . workspace . getConfiguration ( "objectscript.unitTest" ) . get ( "enabled" ) === false ) {
929+ const disposablesWhenDisabled = [
930+ vscode . workspace . onDidChangeConfiguration ( ( e ) => {
931+ if ( e . affectsConfiguration ( "objectscript.unitTest" ) ) {
932+ if ( vscode . workspace . getConfiguration ( "objectscript.unitTest" ) . get ( "enabled" ) === true ) {
933+ // Set myself up as active
934+ const disposablesWhenEnabled = setUpTestController ( context ) ;
935+ context . subscriptions . push ( ...disposablesWhenEnabled ) ;
936+ // Clean up after inactive state
937+ disposablesWhenDisabled . forEach ( ( disposable ) => {
938+ disposable . dispose ( ) ;
939+ } ) ;
940+ return ;
941+ }
942+ }
943+ } ) ,
944+ ] ;
945+ return disposablesWhenDisabled ;
946+ }
927947 // Create and set up the test controller
928948 const testController = vscode . tests . createTestController ( extensionId , "ObjectScript" ) ;
929949 testController . resolveHandler = async ( item ?: vscode . TestItem ) => {
@@ -1049,8 +1069,8 @@ export function setUpTestController(): vscode.Disposable[] {
10491069 return result ;
10501070 } ;
10511071
1052- // Register disposables
1053- return [
1072+ // Gather disposables
1073+ const disposables = [
10541074 testController ,
10551075 runProfile ,
10561076 debugProfile ,
@@ -1130,4 +1150,24 @@ export function setUpTestController(): vscode.Disposable[] {
11301150 } )
11311151 ) ,
11321152 ] ;
1153+
1154+ return [
1155+ ...disposables ,
1156+ // Add a listener to disable myself if the setting changes
1157+ vscode . workspace . onDidChangeConfiguration ( ( e ) => {
1158+ if ( e . affectsConfiguration ( "objectscript.unitTest" ) ) {
1159+ if ( vscode . workspace . getConfiguration ( "objectscript.unitTest" ) . get ( "enabled" ) === false ) {
1160+ // Remove my active self and clean up
1161+ testController . dispose ( ) ;
1162+ disposables . forEach ( ( disposable ) => {
1163+ disposable . dispose ( ) ;
1164+ } ) ;
1165+ // Create a stub self that will reactivate when enabled again
1166+ const disposablesWhenEnabled = setUpTestController ( context ) ;
1167+ context . subscriptions . push ( ...disposablesWhenEnabled ) ;
1168+ return ;
1169+ }
1170+ }
1171+ } ) ,
1172+ ] ;
11331173}
0 commit comments