in src/goTest/explore.ts [34:199]
static setup(context: ExtensionContext): GoTestExplorer {
if (!isVscodeTestingAPIAvailable) throw new Error('VSCode Testing API is unavailable');
const ctrl = vscode.tests.createTestController('go', 'Go');
const symProvider = new GoDocumentSymbolProvider(true);
const inst = new this(workspace, ctrl, context.workspaceState, (doc, token) =>
symProvider.provideDocumentSymbols(doc, token)
);
// Process already open editors
vscode.window.visibleTextEditors.forEach((ed) => {
inst.documentUpdate(ed.document);
});
context.subscriptions.push(ctrl);
context.subscriptions.push(vscode.window.registerTreeDataProvider('go.test.profile', inst.profiler.view));
context.subscriptions.push(
vscode.commands.registerCommand('go.test.refresh', async (item) => {
if (!item) {
await vscode.window.showErrorMessage('No test selected');
return;
}
try {
await inst.resolver.resolve(item);
inst.resolver.updateGoTestContext();
} catch (error) {
const m = 'Failed to resolve tests';
outputChannel.appendLine(`${m}: ${error}`);
outputChannel.show();
await vscode.window.showErrorMessage(m);
}
})
);
context.subscriptions.push(
vscode.commands.registerCommand('go.test.showProfiles', async (item) => {
if (!item) {
await vscode.window.showErrorMessage('No test selected');
return;
}
try {
await inst.profiler.show(item);
} catch (error) {
const m = 'Failed to open profiles';
outputChannel.appendLine(`${m}: ${error}`);
outputChannel.show();
await vscode.window.showErrorMessage(m);
}
})
);
context.subscriptions.push(
vscode.commands.registerCommand('go.test.captureProfile', async (item) => {
if (!item) {
await vscode.window.showErrorMessage('No test selected');
return;
}
const options = await inst.profiler.configure();
if (!options) return;
try {
await inst.runner.run(new TestRunRequest([item]), null, options);
} catch (error) {
const m = 'Failed to execute tests';
outputChannel.appendLine(`${m}: ${error}`);
outputChannel.show();
await vscode.window.showErrorMessage(m);
return;
}
await inst.profiler.show(item);
})
);
context.subscriptions.push(
vscode.commands.registerCommand('go.test.deleteProfile', async (file) => {
if (!file) {
await vscode.window.showErrorMessage('No profile selected');
return;
}
try {
await inst.profiler.delete(file);
} catch (error) {
const m = 'Failed to delete profile';
outputChannel.appendLine(`${m}: ${error}`);
outputChannel.show();
await vscode.window.showErrorMessage(m);
return;
}
})
);
context.subscriptions.push(
workspace.onDidChangeConfiguration(async (x) => {
try {
await inst.didChangeConfiguration(x);
} catch (error) {
if (isInTest()) throw error;
else outputChannel.appendLine(`Failed while handling 'onDidChangeConfiguration': ${error}`);
}
})
);
context.subscriptions.push(
workspace.onDidOpenTextDocument(async (x) => {
try {
await inst.didOpenTextDocument(x);
} catch (error) {
if (isInTest()) throw error;
else outputChannel.appendLine(`Failed while handling 'onDidOpenTextDocument': ${error}`);
}
})
);
context.subscriptions.push(
workspace.onDidChangeTextDocument(async (x) => {
try {
await inst.didChangeTextDocument(x);
} catch (error) {
if (isInTest()) throw error;
else outputChannel.appendLine(`Failed while handling 'onDidChangeTextDocument': ${error}`);
}
})
);
context.subscriptions.push(
workspace.onDidChangeWorkspaceFolders(async (x) => {
try {
await inst.didChangeWorkspaceFolders(x);
} catch (error) {
if (isInTest()) throw error;
else outputChannel.appendLine(`Failed while handling 'onDidChangeWorkspaceFolders': ${error}`);
}
})
);
const watcher = workspace.createFileSystemWatcher('**/*_test.go', false, true, false);
context.subscriptions.push(watcher);
context.subscriptions.push(
watcher.onDidCreate(async (x) => {
try {
await inst.didCreateFile(x);
} catch (error) {
if (isInTest()) throw error;
else outputChannel.appendLine(`Failed while handling 'FileSystemWatcher.onDidCreate': ${error}`);
}
})
);
context.subscriptions.push(
watcher.onDidDelete(async (x) => {
try {
await inst.didDeleteFile(x);
} catch (error) {
if (isInTest()) throw error;
else outputChannel.appendLine(`Failed while handling 'FileSystemWatcher.onDidDelete': ${error}`);
}
})
);
return inst;
}