@@ -923,7 +923,27 @@ function configureHandler(): void {
923
923
}
924
924
925
925
/** 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
+ }
927
947
// Create and set up the test controller
928
948
const testController = vscode . tests . createTestController ( extensionId , "ObjectScript" ) ;
929
949
testController . resolveHandler = async ( item ?: vscode . TestItem ) => {
@@ -1049,8 +1069,8 @@ export function setUpTestController(): vscode.Disposable[] {
1049
1069
return result ;
1050
1070
} ;
1051
1071
1052
- // Register disposables
1053
- return [
1072
+ // Gather disposables
1073
+ const disposables = [
1054
1074
testController ,
1055
1075
runProfile ,
1056
1076
debugProfile ,
@@ -1130,4 +1150,24 @@ export function setUpTestController(): vscode.Disposable[] {
1130
1150
} )
1131
1151
) ,
1132
1152
] ;
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
+ ] ;
1133
1173
}
0 commit comments