Skip to content

Commit 27c8366

Browse files
Add objectscript.unitTest.enabled setting for better coexistence with other testing extensions (#1627)
* Add `objectscript.unitTest.enabled` setting for better coexistence with other testing extensions * Add new setting to telemetry
1 parent 72d0a76 commit 27c8366

File tree

3 files changed

+50
-4
lines changed

3 files changed

+50
-4
lines changed

package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1544,6 +1544,11 @@
15441544
"type": "boolean",
15451545
"default": true
15461546
},
1547+
"objectscript.unitTest.enabled": {
1548+
"description": "Controls whether the unit testing features are available.",
1549+
"type": "boolean",
1550+
"default": true
1551+
},
15471552
"objectscript.unitTest.relativeTestRoots": {
15481553
"description": "Paths to where client-side test classes are stored. Relative to the workspace folder root.",
15491554
"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: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1881,7 +1881,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<any> {
18811881
}
18821882
}
18831883
}),
1884-
...setUpTestController(),
1884+
...setUpTestController(context),
18851885
vscode.commands.registerCommand("vscode-objectscript.reopenInLowCodeEditor", (uri: vscode.Uri) => {
18861886
if (vscode.window.activeTextEditor?.document.uri.toString() == uri.toString()) {
18871887
vscode.commands
@@ -1943,6 +1943,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<any> {
19431943
"config.autoPreviewXML": String(conf.get("autoPreviewXML")),
19441944
"config.showGeneratedFileDecorations": String(conf.get("showGeneratedFileDecorations")),
19451945
"config.showProposedApiPrompt": String(conf.get("showProposedApiPrompt")),
1946+
"config.unitTest.enabled": String(conf.get("unitTest.enabled")),
19461947
});
19471948
sendWsFolderTelemetryEvent(vscode.workspace.workspaceFolders);
19481949

0 commit comments

Comments
 (0)