提交 debe0292 编写于 作者: B Benjamin Pasero

allow to run plugin tests through the command line

上级 303b02ee
......@@ -106,6 +106,9 @@ if (!fs.existsSync(userPluginsHome)) {
fs.mkdirSync(userPluginsHome);
}
// Helper to identify if we have plugin tests to run from the command line without debugger
export const isTestingFromCli = cliArgs.pluginTestsPath && !cliArgs.debugBrkPluginHost;
export function log(...a: any[]): void {
if (cliArgs.verboseLogging) {
console.log.apply(null, a);
......
......@@ -67,7 +67,8 @@ export class Lifecycle {
// Windows/Linux: we quit when all windows have closed
// Mac: we only quit when quit was requested
if (this.quitRequested || process.platform !== 'darwin') {
// Tests: we always quit
if (this.quitRequested || process.platform !== 'darwin' || env.isTestingFromCli) {
app.quit();
}
});
......
......@@ -85,6 +85,11 @@ export interface IOpenedPathsList {
files: string[];
}
interface ILogEntry {
severity: string;
arguments: any;
}
export class WindowsManager {
public static autoSaveDelayStorageKey = 'autoSaveDelay';
......@@ -121,7 +126,7 @@ export class WindowsManager {
}
private registerListeners(): void {
app.on('activate', (event:Event, hasVisibleWindows:boolean) => {
app.on('activate', (event: Event, hasVisibleWindows: boolean) => {
env.log('App#activate');
// Mac only event: reopen last window when we get activated
......@@ -247,7 +252,19 @@ export class WindowsManager {
if (broadcast.channel && broadcast.payload) {
this.sendToAll('vscode:broadcast', broadcast, [windowId]);
}
})
});
ipc.on('vscode:log', (event: Event, logEntry: ILogEntry) => {
let args = [];
try {
let parsed = JSON.parse(logEntry.arguments);
args.push(...Object.getOwnPropertyNames(parsed).map(o => parsed[o]));
} catch (error) {
args.push(logEntry.arguments);
}
console[logEntry.severity].apply(console, args);
});
UpdateManager.on('update-downloaded', (update: IUpdate) => {
this.sendToFocused('vscode:telemetry', { eventName: 'update:downloaded', data: { version: update.version } });
......
......@@ -107,6 +107,7 @@ class PluginHostProcessManager {
public startPluginHostProcess(onPluginHostMessage: (msg: any) => void): void {
let config = this.contextService.getConfiguration();
let isDev = !config.env.isBuilt || !!config.env.pluginDevelopmentPath;
let isTestingFromCli = !!config.env.pluginTestsPath && !config.env.debugBrkPluginHost;
let opts: any = {
env: objects.mixin(objects.clone(process.env), { AMD_ENTRYPOINT: 'vs/workbench/node/pluginHostProcess', PIPE_LOGGING: 'true', VERBOSE_LOGGING: true })
......@@ -184,11 +185,18 @@ class PluginHostProcessManager {
consoleArgs = ['%c[Plugin Host]', 'color: blue', ...args];
}
// Send to local console
console[logEntry.severity].apply(console, consoleArgs);
// Send to local console unless we run tests from cli
if (!isTestingFromCli) {
console[logEntry.severity].apply(console, consoleArgs);
}
// Log on main side if running tests from cli
if (isTestingFromCli) {
ipc.send('vscode:log', logEntry);
}
// Broadcast to other windows if we are in development mode
if (isDev) {
else if (isDev) {
this.windowService.broadcast({
channel: PLUGIN_LOG_BROADCAST_CHANNEL,
payload: logEntry
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册