mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
test: reverse dumpio into quiet, serialize output (#3491)
This commit is contained in:
parent
73d2dc11d7
commit
c44f841f33
@ -109,15 +109,6 @@ class FixturePool {
|
|||||||
return fn(params);
|
return fn(params);
|
||||||
}
|
}
|
||||||
|
|
||||||
patchToEnableFixtures(object, name) {
|
|
||||||
const original = object[name];
|
|
||||||
object[name] = fn => {
|
|
||||||
return original(async () => {
|
|
||||||
return await this.resolveParametersAndRun(fn);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
wrapTestCallback(callback) {
|
wrapTestCallback(callback) {
|
||||||
if (!callback)
|
if (!callback)
|
||||||
return callback;
|
return callback;
|
||||||
|
@ -58,7 +58,7 @@ function specBuilder(modifiers, specCallback) {
|
|||||||
return builder({}, null);
|
return builder({}, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
function fixturesUI(trialRun, suite) {
|
function fixturesUI(testRunner, suite) {
|
||||||
const suites = [suite];
|
const suites = [suite];
|
||||||
|
|
||||||
suite.on(Suite.constants.EVENT_FILE_PRE_REQUIRE, function(context, file, mocha) {
|
suite.on(Suite.constants.EVENT_FILE_PRE_REQUIRE, function(context, file, mocha) {
|
||||||
@ -69,7 +69,7 @@ function fixturesUI(trialRun, suite) {
|
|||||||
if (suite.isPending())
|
if (suite.isPending())
|
||||||
fn = null;
|
fn = null;
|
||||||
let wrapper;
|
let wrapper;
|
||||||
if (trialRun) {
|
if (testRunner.trialRun) {
|
||||||
if (fn)
|
if (fn)
|
||||||
wrapper = () => {};
|
wrapper = () => {};
|
||||||
} else {
|
} else {
|
||||||
@ -113,17 +113,20 @@ function fixturesUI(trialRun, suite) {
|
|||||||
return suite;
|
return suite;
|
||||||
});
|
});
|
||||||
|
|
||||||
context.beforeEach = common.beforeEach;
|
context.beforeEach = (fn) => {
|
||||||
context.afterEach = common.afterEach;
|
if (testRunner.trialRun)
|
||||||
if (trialRun) {
|
return;
|
||||||
context.beforeEach = () => {};
|
return common.beforeEach(async () => {
|
||||||
context.afterEach = () => {};
|
return await fixturePool.resolveParametersAndRun(fn);
|
||||||
} else {
|
});
|
||||||
context.beforeEach = common.beforeEach;
|
};
|
||||||
context.afterEach = common.afterEach;
|
context.afterEach = (fn) => {
|
||||||
fixturePool.patchToEnableFixtures(context, 'beforeEach');
|
if (testRunner.trialRun)
|
||||||
fixturePool.patchToEnableFixtures(context, 'afterEach');
|
return;
|
||||||
}
|
return common.afterEach(async () => {
|
||||||
|
return await fixturePool.resolveParametersAndRun(fn);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
context.run = mocha.options.delay && common.runWithSuite(suite);
|
context.run = mocha.options.delay && common.runWithSuite(suite);
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ program
|
|||||||
.option('-j, --jobs <jobs>', 'Number of concurrent jobs for --parallel; use 1 to run in serial, default: (number of CPU cores / 2)', Math.ceil(require('os').cpus().length / 2))
|
.option('-j, --jobs <jobs>', 'Number of concurrent jobs for --parallel; use 1 to run in serial, default: (number of CPU cores / 2)', Math.ceil(require('os').cpus().length / 2))
|
||||||
.option('--reporter <reporter>', 'Specify reporter to use', '')
|
.option('--reporter <reporter>', 'Specify reporter to use', '')
|
||||||
.option('--trial-run', 'Only collect the matching tests and report them as passing')
|
.option('--trial-run', 'Only collect the matching tests and report them as passing')
|
||||||
.option('--dumpio', 'Dump stdout and stderr from workers', false)
|
.option('--quiet', 'Suppress stdio', false)
|
||||||
.option('--debug', 'Run tests in-process for debugging', false)
|
.option('--debug', 'Run tests in-process for debugging', false)
|
||||||
.option('--timeout <timeout>', 'Specify test timeout threshold (in milliseconds), default: 10000', 10000)
|
.option('--timeout <timeout>', 'Specify test timeout threshold (in milliseconds), default: 10000', 10000)
|
||||||
.action(async (command) => {
|
.action(async (command) => {
|
||||||
@ -70,7 +70,7 @@ program
|
|||||||
const jobs = (command.trialRun || command.debug) ? 1 : command.jobs;
|
const jobs = (command.trialRun || command.debug) ? 1 : command.jobs;
|
||||||
const runner = new Runner(rootSuite, {
|
const runner = new Runner(rootSuite, {
|
||||||
debug: command.debug,
|
debug: command.debug,
|
||||||
dumpio: command.dumpio,
|
quiet: command.quiet,
|
||||||
grep: command.grep,
|
grep: command.grep,
|
||||||
jobs,
|
jobs,
|
||||||
reporter: command.reporter,
|
reporter: command.reporter,
|
||||||
|
@ -197,17 +197,17 @@ class OopWorker extends EventEmitter {
|
|||||||
});
|
});
|
||||||
this.stdout = [];
|
this.stdout = [];
|
||||||
this.stderr = [];
|
this.stderr = [];
|
||||||
this.on('stdout', data => {
|
this.on('stdout', params => {
|
||||||
if (runner._options.dumpio)
|
const chunk = chunkFromParams(params);
|
||||||
process.stdout.write(data);
|
if (!runner._options.quiet)
|
||||||
else
|
process.stdout.write(chunk);
|
||||||
this.stdout.push(data);
|
this.stdout.push(chunk);
|
||||||
});
|
});
|
||||||
this.on('stderr', data => {
|
this.on('stderr', params => {
|
||||||
if (runner._options.dumpio)
|
const chunk = chunkFromParams(params);
|
||||||
process.stderr.write(data);
|
if (!runner._options.quiet)
|
||||||
else
|
process.stderr.write(chunk);
|
||||||
this.stderr.push(data);
|
this.stderr.push(chunk);
|
||||||
});
|
});
|
||||||
this.on('debug', data => {
|
this.on('debug', data => {
|
||||||
process.stderr.write(data + '\n');
|
process.stderr.write(data + '\n');
|
||||||
@ -273,4 +273,10 @@ class InProcessWorker extends EventEmitter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function chunkFromParams(params) {
|
||||||
|
if (typeof params === 'string')
|
||||||
|
return params;
|
||||||
|
return Buffer.from(params.buffer, 'base64');
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = { Runner };
|
module.exports = { Runner };
|
||||||
|
@ -39,7 +39,7 @@ class TestRunner extends EventEmitter {
|
|||||||
forbidOnly: options.forbidOnly,
|
forbidOnly: options.forbidOnly,
|
||||||
reporter: NullReporter,
|
reporter: NullReporter,
|
||||||
timeout: options.timeout,
|
timeout: options.timeout,
|
||||||
ui: fixturesUI.bind(null, options.trialRun),
|
ui: fixturesUI.bind(null, this),
|
||||||
});
|
});
|
||||||
if (options.grep)
|
if (options.grep)
|
||||||
this.mocha.grep(options.grep);
|
this.mocha.grep(options.grep);
|
||||||
@ -49,6 +49,7 @@ class TestRunner extends EventEmitter {
|
|||||||
this.suite = this.mocha.suite;
|
this.suite = this.mocha.suite;
|
||||||
this._lastOrdinal = -1;
|
this._lastOrdinal = -1;
|
||||||
this._failedWithError = false;
|
this._failedWithError = false;
|
||||||
|
this.trialRun = options.trialRun;
|
||||||
}
|
}
|
||||||
|
|
||||||
async run() {
|
async run() {
|
||||||
|
@ -18,17 +18,26 @@ const debug = require('debug');
|
|||||||
const { fixturePool } = require('./fixturesUI');
|
const { fixturePool } = require('./fixturesUI');
|
||||||
const { gracefullyCloseAll } = require('../../lib/server/processLauncher');
|
const { gracefullyCloseAll } = require('../../lib/server/processLauncher');
|
||||||
const { TestRunner } = require('./testRunner');
|
const { TestRunner } = require('./testRunner');
|
||||||
|
const util = require('util');
|
||||||
|
|
||||||
let closed = false;
|
let closed = false;
|
||||||
|
|
||||||
sendMessageToParent('ready');
|
sendMessageToParent('ready');
|
||||||
|
|
||||||
|
function chunkToParams(chunk) {
|
||||||
|
if (chunk instanceof Buffer)
|
||||||
|
return { buffer: chunk.toString('base64') };
|
||||||
|
if (typeof chunk !== 'string')
|
||||||
|
return util.inspect(chunk);
|
||||||
|
return chunk;
|
||||||
|
}
|
||||||
|
|
||||||
process.stdout.write = chunk => {
|
process.stdout.write = chunk => {
|
||||||
sendMessageToParent('stdout', chunk);
|
sendMessageToParent('stdout', chunkToParams(chunk));
|
||||||
};
|
};
|
||||||
|
|
||||||
process.stderr.write = chunk => {
|
process.stderr.write = chunk => {
|
||||||
sendMessageToParent('stderr', chunk);
|
sendMessageToParent('stderr', chunkToParams(chunk));
|
||||||
};
|
};
|
||||||
|
|
||||||
debug.log = data => {
|
debug.log = data => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user