text: // Karma configuration
  
  module.exports = (config) => {
    const customLaunchers = {};
    let browsers = [];
    let useSauce = false;
  
    // use Sauce when running on Travis
    if (process.env.TRAVIS_JOB_NUMBER) {
      useSauce = true;
    } 
  
    if (useSauce && process.env.TEST_BROWSER_NAME && process.env.TEST_BROWSER_NAME != 'PhantomJS') {
      const names = process.env.TEST_BROWSER_NAME.split(',');
      const platforms = process.env.TEST_BROWSER_OS.split(',');
      const versions = process.env.TEST_BROWSER_VERSION
        ? process.env.TEST_BROWSER_VERSION.split(',')
        : [null];
  
      for (let i = 0; i < names.length; i++) {
        for (let j = 0; j < platforms.length; j++) {
          for (let k = 0; k < versions.length; k++) {
            let launcher_name = 'sl_' + platforms[j].replace(/[^a-zA-Z0-9]/g, '') + '_' + names[i];
            if (versions[k]) {
              launcher_name += '_' + versions[k];
            }
  
            customLaunchers[launcher_name] = {
              base: 'SauceLabs',
              browserName: names[i],
              platform: platforms[j],
            };
  
            if (versions[i]) {
              customLaunchers[launcher_name].version = versions[k];
            }
          }
        }
      }
  
      browsers = Object.keys(customLaunchers);
    } else {
      useSauce = false;
      //browsers = ['PhantomJS'];
      browsers = [];
    }
  
    const my_conf = {
  
      // base path that will be used to resolve all patterns (eg. files, exclude)
      basePath: '',
  
      // frameworks to use
      // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
      frameworks: ['mocha', 'sinon-chai'],
  
      // list of files / patterns to load in the browser (loaded in order)
      files: [
        { pattern: 'app/localization.js', included: false },
        { pattern: 'app/webutil.js', included: false },
        { pattern: 'core/**/*.js', included: false },
        { pattern: 'vendor/pako/**/*.js', included: false },
        { pattern: 'vendor/browser-es-module-loader/dist/*.js*', included: false },
        { pattern: 'tests/test.*.js', included: false },
        { pattern: 'tests/fake.*.js', included: false },
        { pattern: 'tests/assertions.js', included: false },
        'vendor/promise.js',
        'tests/karma-test-main.js',
      ],
  
      client: {
        mocha: {
          // replace Karma debug page with mocha display
          'reporter': 'html',
          'ui': 'bdd'
        }
      },
  
      // list of files to exclude
      exclude: [
      ],
  
      customLaunchers: customLaunchers,
  
      // start these browsers
      // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
      browsers: browsers,
  
      // test results reporter to use
      // possible values: 'dots', 'progress'
      // available reporters: https://npmjs.org/browse/keyword/karma-reporter
      reporters: ['mocha'],
  
  
      // web server port
      port: 9876,
  
  
      // enable / disable colors in the output (reporters and logs)
      colors: true,
  
  
      // level of logging
      // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
      logLevel: config.LOG_INFO,
  
  
      // enable / disable watching file and executing tests whenever any file changes
      autoWatch: false,
  
      // Continuous Integration mode
      // if true, Karma captures browsers, runs the tests and exits
      singleRun: true,
  
      // Increase timeout in case connection is slow/we run more browsers than possible
      // (we currently get 3 for free, and we try to run 7, so it can take a while)
      captureTimeout: 240000,
  
      // similarly to above
      browserNoActivityTimeout: 100000,
    };
  
    if (useSauce) {
      my_conf.reporters.push('saucelabs');
      my_conf.captureTimeout = 0; // use SL timeout
      my_conf.sauceLabs = {
        testName: 'noVNC Tests (all)',
        startConnect: false,
        tunnelIdentifier: process.env.TRAVIS_JOB_NUMBER
      };
    }
  
    config.set(my_conf);
  };
  