import * as path from 'path';
import { runTests } from 'vscode-test';

async function main() {
		// The folder containing the Extension Manifest package.json
		// Passed to `--extensionDevelopmentPath`
	const extensionDevelopmentPath = path.resolve(__dirname, '../../');

	let failed = false;

	try {
		// The path to the extension test script
		// Passed to --extensionTestsPath
		const extensionTestsPath = path.resolve(__dirname, './integration/index');

		// Download VS Code, unzip it and run the integration test
		await runTests({
			extensionDevelopmentPath,
			extensionTestsPath,
			launchArgs: ['--disable-extensions'],  // disable all other extensions
		});
	} catch (err) {
		console.error('Failed to run integration tests' + err);
		failed = true;
	}

	// Integration tests using gopls.
	try {
		// Currently gopls requires a workspace. Code in test environment does not support
		// dynamically adding folders.
		// tslint:disable-next-line:max-line-length
		// https://github.com/microsoft/vscode/blob/890f62dfd9f3e70198931f788c5c332b3e8b7ad7/src/vs/workbench/services/workspaces/browser/abstractWorkspaceEditingService.ts#L281
		// So, we start the test extension host with a dummy workspace (test/gopls/testfixtures/src/workspace)
		// and copy necessary files to the workspace.
		const ws = path.resolve(extensionDevelopmentPath, 'test/gopls/testfixtures/src/workspace');

		await runTests({
			extensionDevelopmentPath,
			extensionTestsPath: path.resolve(__dirname, './gopls/index'),
			launchArgs: [
				'--disable-extensions',  // disable all other extensions
				ws  // dummy workspace to start with
			],
		});
	} catch (err) {
		console.error('Failed to run gopls tests' + err);
		failed = true;
	}

	if (failed) {
		process.exit(1);
	}
}

main();
