in src/goGenerateTests.ts [161:242]
function generateTests(
ctx: vscode.ExtensionContext,
goCtx: GoExtensionContext,
conf: Config,
goConfig: vscode.WorkspaceConfiguration
): Promise<boolean> {
return new Promise<boolean>((resolve, reject) => {
const cmd = getBinPath('gotests');
let args = ['-w'];
const goGenerateTestsFlags: string[] = goConfig['generateTestsFlags'] || [];
for (let i = 0; i < goGenerateTestsFlags.length; i++) {
const flag = goGenerateTestsFlags[i];
if (flag === '-w' || flag === 'all') {
continue;
}
if (flag === '-only') {
i++;
continue;
}
if (i + 1 < goGenerateTestsFlags.length && (flag === '-template_dir' || flag === '-template_params_file')) {
const configFilePath = resolvePath(goGenerateTestsFlags[i + 1]);
args.push(flag, configFilePath);
i++;
continue;
}
args.push(flag);
}
if (conf.func) {
args = args.concat(['-only', `^${conf.func}$`, conf.dir]);
} else {
args = args.concat(['-all', conf.dir]);
}
cp.execFile(cmd, args, { env: toolExecutionEnvironment() }, (err, stdout, stderr) => {
outputChannel.appendLine('Generating Tests: ' + cmd + ' ' + args.join(' '));
try {
if (err && (<any>err).code === 'ENOENT') {
promptForMissingTool('gotests');
return resolve(false);
}
if (err) {
console.log(err);
outputChannel.appendLine(err.message);
return reject('Cannot generate test due to errors');
}
let message = stdout;
let testsGenerated = false;
// Expected stdout is of the format "Generated TestMain\nGenerated Testhello\n"
if (stdout.startsWith(generatedWord)) {
const lines = stdout
.split('\n')
.filter((element) => {
return element.startsWith(generatedWord);
})
.map((element) => {
return element.substr(generatedWord.length);
});
message = `Generated ${lines.join(', ')}`;
testsGenerated = true;
}
vscode.window.showInformationMessage(message);
outputChannel.append(message);
if (testsGenerated && !conf.isTestFile) {
toggleTestFile(ctx, goCtx)();
}
return resolve(true);
} catch (e) {
vscode.window.showInformationMessage((e as any).msg);
outputChannel.append((e as any).msg);
reject(e);
}
});
});
}