/*--------------------------------------------------------------------------------------------- * 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) { let 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 }); }