Skip to content

Commit 6ba6ae0

Browse files
committed
Add objectscript.unitTest.enabled setting for better coexistence with other testing extensions
1 parent b83438b commit 6ba6ae0

File tree

3 files changed

+49
-4
lines changed

3 files changed

+49
-4
lines changed

package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1526,6 +1526,11 @@
15261526
"type": "boolean",
15271527
"default": true
15281528
},
1529+
"objectscript.unitTest.enabled": {
1530+
"description": "Controls whether the unit testing features are available.",
1531+
"type": "boolean",
1532+
"default": true
1533+
},
15291534
"objectscript.unitTest.relativeTestRoots": {
15301535
"description": "Paths to where client-side test classes are stored. Relative to the workspace folder root.",
15311536
"type": "array",

src/commands/unitTest.ts

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

src/extension.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1856,7 +1856,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<any> {
18561856
}
18571857
}
18581858
}),
1859-
...setUpTestController(),
1859+
...setUpTestController(context),
18601860
vscode.commands.registerCommand("vscode-objectscript.reopenInLowCodeEditor", (uri: vscode.Uri) => {
18611861
if (vscode.window.activeTextEditor?.document.uri.toString() == uri.toString()) {
18621862
vscode.commands

0 commit comments

Comments
 (0)