@@ -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