提交 7de4737b 编写于 作者: S Sandeep Somavarapu

Fix #58060

上级 58c34085
......@@ -16,7 +16,7 @@ export enum Quality {
export interface ApplicationOptions extends SpawnOptions {
quality: Quality;
workspacePath: string;
folderPath: string;
workspaceFilePath: string;
waitTime: number;
}
......@@ -61,20 +61,29 @@ export class Application {
}
async start(): Promise<any> {
this.options.workspacePath = this.options.folderPath;
await this._start();
await this.code.waitForElement('.explorer-folders-view');
await this.code.waitForActiveElement(`.editor-instance[id="workbench.editor.walkThroughPart"] > div > div[tabIndex="0"]`);
}
async restart(options: { workspaceOrFolder?: string, extraArgs?: string[] }): Promise<any> {
async restart(options: { workspaceFilePath?: string, userDataDir?: string, extraArgs?: string[] }): Promise<any> {
await this.stop();
await new Promise(c => setTimeout(c, 1000));
await this._start(options.workspaceOrFolder, options.extraArgs);
Object.keys(options).forEach(key => {
if (options[key] === null || options[key] === undefined) {
delete options[key];
}
});
this.options = { ...this.options, ...options };
this.options.workspacePath = options.workspaceFilePath ? options.workspaceFilePath : this.options.workspacePath;
await this._start();
}
private async _start(workspaceOrFolder = this.options.workspacePath, extraArgs: string[] = []): Promise<any> {
cp.execSync('git checkout .', { cwd: this.options.workspacePath });
await this.startApplication(workspaceOrFolder, extraArgs);
private async _start(): Promise<any> {
cp.execSync('git checkout .', { cwd: this.options.folderPath });
this._code = await spawn(this.options);
this._workbench = new Workbench(this._code, this.userDataPath);
await this.checkWindowReady();
}
......@@ -98,21 +107,6 @@ export class Application {
return this.code.capturePage();
}
private async startApplication(workspaceOrFolder: string, extraArgs: string[] = []): Promise<any> {
this._code = await spawn({
codePath: this.options.codePath,
workspacePath: workspaceOrFolder,
userDataDir: this.options.userDataDir,
extensionsPath: this.options.extensionsPath,
logger: this.options.logger,
verbose: this.options.verbose,
log: this.options.log,
extraArgs,
});
this._workbench = new Workbench(this._code, this.userDataPath);
}
private async checkWindowReady(): Promise<any> {
if (!this.code) {
console.error('No code instance found');
......
......@@ -13,7 +13,7 @@ export function setup() {
// restart with preventing additional windows from restoring
// to ensure the window after restart is the multi-root workspace
await app.restart({ workspaceOrFolder: app.workspaceFilePath, extraArgs: ['--disable-restore-windows'] });
await app.restart({ workspaceFilePath: app.workspaceFilePath, extraArgs: ['--disable-restore-windows'] });
});
it('shows results from all folders', async function () {
......
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as path from 'path';
import { Application } from '../../application';
export function setup() {
describe('Launch', () => {
it(`verifies that application launches when user data directory has non-ascii characters`, async function () {
const app = this.app as Application;
await app.restart({ userDataDir: path.join(app.userDataPath, 'abcdø') });
});
});
}
\ No newline at end of file
......@@ -27,6 +27,7 @@ import { setup as setupDataExtensionTests } from './areas/extensions/extensions.
import { setup as setupTerminalTests } from './areas/terminal/terminal.test';
import { setup as setupDataMultirootTests } from './areas/multiroot/multiroot.test';
import { setup as setupDataLocalizationTests } from './areas/workbench/localization.test';
import { setup as setupLaunchTests } from './areas/workbench/launch.test';
import { MultiLogger, Logger, ConsoleLogger, FileLogger } from './logger';
const tmpDir = tmp.dirSync({ prefix: 't' }) as { name: string; removeCallback: Function; };
......@@ -53,7 +54,7 @@ const opts = minimist(args, {
const workspaceFilePath = path.join(testDataPath, 'smoketest.code-workspace');
const testRepoUrl = 'https://github.com/Microsoft/vscode-smoketest-express';
const workspacePath = path.join(testDataPath, 'vscode-smoketest-express');
const folderPath = path.join(testDataPath, 'vscode-smoketest-express');
const extensionsPath = path.join(testDataPath, 'extensions-dir');
mkdirp.sync(extensionsPath);
......@@ -158,13 +159,13 @@ async function createWorkspaceFile(): Promise<void> {
const workspace = {
folders: [
{
path: toUri(path.join(workspacePath, 'public'))
path: toUri(path.join(folderPath, 'public'))
},
{
path: toUri(path.join(workspacePath, 'routes'))
path: toUri(path.join(folderPath, 'routes'))
},
{
path: toUri(path.join(workspacePath, 'views'))
path: toUri(path.join(folderPath, 'views'))
}
]
};
......@@ -175,22 +176,22 @@ async function createWorkspaceFile(): Promise<void> {
async function setupRepository(): Promise<void> {
if (opts['test-repo']) {
console.log('*** Copying test project repository:', opts['test-repo']);
rimraf.sync(workspacePath);
rimraf.sync(folderPath);
// not platform friendly
cp.execSync(`cp -R "${opts['test-repo']}" "${workspacePath}"`);
cp.execSync(`cp -R "${opts['test-repo']}" "${folderPath}"`);
} else {
if (!fs.existsSync(workspacePath)) {
if (!fs.existsSync(folderPath)) {
console.log('*** Cloning test project repository...');
cp.spawnSync('git', ['clone', testRepoUrl, workspacePath]);
cp.spawnSync('git', ['clone', testRepoUrl, folderPath]);
} else {
console.log('*** Cleaning test project repository...');
cp.spawnSync('git', ['fetch'], { cwd: workspacePath });
cp.spawnSync('git', ['reset', '--hard', 'FETCH_HEAD'], { cwd: workspacePath });
cp.spawnSync('git', ['clean', '-xdf'], { cwd: workspacePath });
cp.spawnSync('git', ['fetch'], { cwd: folderPath });
cp.spawnSync('git', ['reset', '--hard', 'FETCH_HEAD'], { cwd: folderPath });
cp.spawnSync('git', ['clean', '-xdf'], { cwd: folderPath });
}
console.log('*** Running yarn...');
cp.execSync('yarn', { cwd: workspacePath, stdio: 'inherit' });
cp.execSync('yarn', { cwd: folderPath, stdio: 'inherit' });
}
}
......@@ -221,7 +222,8 @@ function createApp(quality: Quality): Application {
return new Application({
quality,
codePath: opts.build,
workspacePath,
folderPath,
workspacePath: folderPath,
userDataDir,
extensionsPath,
workspaceFilePath,
......@@ -308,4 +310,5 @@ describe('Test', () => {
setupTerminalTests();
setupDataMultirootTests();
setupDataLocalizationTests();
setupLaunchTests();
});
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册