text: /* global process */
  
  var path = require('path');
  
  var coverage = process.env.COVERAGE;
  
  // configures browsers to run test against
  // any of [ 'ChromeHeadless', 'Chrome', 'Firefox', 'IE', 'PhantomJS' ]
  var browsers = (process.env.TEST_BROWSERS || 'PhantomJS').split(',');
  
  // use puppeteer provided Chrome for testing
  process.env.CHROME_BIN = require('puppeteer').executablePath();
  
  var absoluteBasePath = path.resolve(__dirname);
  
  var suite = coverage ? 'test/coverageBundle.js' : 'test/testBundle.js';
  
  
  module.exports = function(karma) {
    karma.set({
  
      frameworks: [
        'mocha',
        'sinon-chai'
      ],
  
      files: [
        suite
      ],
  
      preprocessors: {
        [suite]: [ 'webpack' ]
      },
  
      reporters: [ 'progress' ].concat(coverage ? 'coverage' : []),
  
      browsers,
  
      browserNoActivityTimeout: 30000,
  
      coverageReporter: {
        reporters: [
          { type: 'lcov', subdir: '.' }
        ]
      },
  
      autoWatch: false,
      singleRun: true,
  
      webpack: {
        mode: 'development',
        module: {
          rules: [
            {
              test: /\.css$/,
              use: 'raw-loader'
            },
            {
              test: /\.png$/,
              use: 'url-loader'
            }
          ].concat(
            coverage ? {
              test: /\.js$/,
              use: {
                loader: 'istanbul-instrumenter-loader',
                options: { esModules: true }
              },
              include: /lib\.*/,
              exclude: /node_modules/
            } : []
          )
        },
        resolve: {
          mainFields: [
            'dev:module',
            'browser',
            'module',
            'main'
          ],
          modules: [
            'node_modules',
            absoluteBasePath
          ]
        },
        devtool: 'eval-source-map'
      }
    });
  };
  