43 строки
1.5 KiB
JavaScript
43 строки
1.5 KiB
JavaScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
const mocha = require('mocha');
|
|
const FullJsonStreamReporter = require('./fullJsonStreamReporter');
|
|
const path = require('path');
|
|
|
|
function parseReporterOption(value) {
|
|
const r = /^([^=]+)=(.*)$/.exec(value);
|
|
return r ? { [r[1]]: r[2] } : {};
|
|
}
|
|
|
|
exports.importMochaReporter = name => {
|
|
if (name === 'full-json-stream') {
|
|
return FullJsonStreamReporter;
|
|
}
|
|
|
|
const reporterPath = path.join(path.dirname(require.resolve('mocha')), 'lib', 'reporters', name);
|
|
return require(reporterPath);
|
|
};
|
|
|
|
exports.applyReporter = (runner, argv) => {
|
|
let Reporter;
|
|
try {
|
|
Reporter = exports.importMochaReporter(argv.reporter);
|
|
} catch (err) {
|
|
try {
|
|
Reporter = require(argv.reporter);
|
|
} catch (err) {
|
|
Reporter = process.platform === 'win32' ? mocha.reporters.List : mocha.reporters.Spec;
|
|
console.warn(`could not load reporter: ${argv.reporter}, using ${Reporter.name}`);
|
|
}
|
|
}
|
|
|
|
let reporterOptions = argv['reporter-options'];
|
|
reporterOptions = typeof reporterOptions === 'string' ? [reporterOptions] : reporterOptions;
|
|
reporterOptions = reporterOptions.reduce((r, o) => Object.assign(r, parseReporterOption(o)), {});
|
|
|
|
return new Reporter(runner, { reporterOptions });
|
|
};
|