/* eslint-disable import/no-commonjs */

const babel = require('rollup-plugin-babel');
const commonjs = require('@rollup/plugin-commonjs');
const json = require('@rollup/plugin-json');
const resolve = require('@rollup/plugin-node-resolve');
const webWorkerLoader = require('rollup-plugin-web-worker-loader');
const builds = require('./rollup.config');
const yargs = require('yargs');


module.exports = function(karma) {
	const args = yargs
		.option('verbose', {default: false})
		.argv;

	const grep = args.grep === true ? '' : args.grep;
	const specPattern = 'test/specs/**/*' + grep + '*.js';

	// Use the same rollup config as our dist files: when debugging (--watch),
	// we will prefer the unminified build which is easier to browse and works
	// better with source mapping. In other cases, pick the minified build to
	// make sure that the minification process (terser) doesn't break anything.
	const regex = args.watch ? /chart\.js$/ : /chart\.min\.js$/;
	const build = builds.filter(v => v.output.file.match(regex))[0];

	karma.set({
		frameworks: ['jasmine'],
		reporters: ['progress', 'kjhtml'],
		browsers: (args.browsers || 'chrome,firefox').split(','),
		logLevel: karma.LOG_INFO,

		client: {
			jasmine: {
				failFast: !!karma.autoWatch
			}
		},

		// Explicitly disable hardware acceleration to make image
		// diff more stable when ran on Travis and dev machine.
		// https://github.com/chartjs/Chart.js/pull/5629
		customLaunchers: {
			chrome: {
				base: 'Chrome',
				flags: [
					'--disable-accelerated-2d-canvas'
				]
			},
			firefox: {
				base: 'Firefox',
				prefs: {
					'layers.acceleration.disabled': true
				}
			},
			safari: {
				base: 'SafariPrivate'
			},
			edge: {
				base: 'Edge'
			}
		},

		files: [
			{pattern: 'test/fixtures/**/*.js', included: false},
			{pattern: 'test/fixtures/**/*.json', included: false},
			{pattern: 'test/fixtures/**/*.png', included: false},
			'node_modules/moment/min/moment.min.js',
			{pattern: 'test/index.js', watched: false},
			{pattern: 'src/index.js', watched: false},
			'node_modules/chartjs-adapter-moment/dist/chartjs-adapter-moment.js',
			{pattern: specPattern, watched: false}
		],

		preprocessors: {
			[specPattern]: ['rollup'],
			'test/index.js': ['rollup'],
			'src/index.js': ['sources']
		},

		rollupPreprocessor: {
			plugins: [
				json(),
				resolve(),
				babel({exclude: 'node_modules/**'}), // use babel since we have ES proposal features
				commonjs({exclude: ['src/**', 'test/**']}),
				webWorkerLoader()
			],
			output: {
				name: 'test',
				format: 'umd',
				sourcemap: karma.autoWatch ? 'inline' : false
			}
		},

		customPreprocessors: {
			sources: {
				base: 'rollup',
				options: build
			}
		},

		// These settings deal with browser disconnects. We had seen test flakiness from Firefox
		// [Firefox 56.0.0 (Linux 0.0.0)]: Disconnected (1 times), because no message in 10000 ms.
		// https://github.com/jasmine/jasmine/issues/1327#issuecomment-332939551
		browserDisconnectTolerance: 3
	});

	// https://swizec.com/blog/how-to-run-javascript-tests-in-chrome-on-travis/swizec/6647
	if (process.env.TRAVIS) {
		karma.customLaunchers.chrome.flags.push('--no-sandbox');
	}

	if (args.coverage) {
		karma.reporters.push('coverage');
		karma.coverageReporter = {
			dir: 'coverage/',
			reporters: [
				{type: 'html', subdir: 'html'},
				{type: 'lcovonly', subdir: '.'}
			]
		};
	}
};

@@ -661,15 +661,19 @@
 ng (
---watch
+npm run dev
 ),%0A%09
@@ -918,14 +918,19 @@
 x = 
+k
 ar
-gs.w
+ma.autoW
 atch

Use verbose build in dev mode (#7455)