process.env.CHROME_BIN = '/snap/bin/chromium';
 
module.exports = function(config) {
  config.set({
    //root path location to resolve paths defined in files and exclude
    basePath: '',
    //files/patterns to exclude from loaded files
    exclude: [],
    //files/patterns to load in the browser
    files: [
     'tests/*.spec.js'
      /*parameters*/
          //watched: if autoWatch is true all files that have set watched to true will be watched for changes
          //served: should the files be served by Karma's webserver?
          //included: should the files be included in the browser using <script> tag?
          //nocache: should the files be served from disk on each request by Karma's webserver?
      /*assets*/
          //{pattern: '*.html', watched:true, served:true, included:false}
          //{pattern: 'images/*', watched:false, served:true, included:false}      
    ],
    
    //executes the tests whenever one of watched files changes
    autoWatch: false,
    //if true, Karma will run tests and then exit browser
    singleRun: true,
    //if true, Karma fails on running empty test-suites
    failOnEmptyTestSuite:false,
    //reduce the kind of information passed to the bash
    logLevel: config.LOG_WARN, //config.LOG_DISABLE, config.LOG_ERROR, config.LOG_INFO, config.LOG_DEBUG
                                      
    //list of frameworks you want to use, only jasmine is installed automatically
    frameworks: ['jasmine'],
    //list of browsers to launch and capture
    browsers: ['ChromeHeadless'/*,'PhantomJS','Firefox','Edge','ChromeCanary','Opera','IE','Safari'*/],
    //list of reporters to use
    reporters: ['mocha' /*,'kjhtml','dots','progress','spec'*/],
    
    //address that the server will listen on, '0.0.0.0' is default
    listenAddress: '0.0.0.0',
    //hostname to be used when capturing browsers, 'localhost' is default
    hostname: 'localhost',
    //the port where the web server will be listening, 9876 is default
    port: 9876,
    //when a browser crashes, karma will try to relaunch, 2 is default
    retryLimit:0,
    //how long does Karma wait for a browser to reconnect, 2000 is default
    browserDisconnectTimeout: 5000,
    //how long will Karma wait for a message from a browser before disconnecting from it, 10000 is default
    browserNoActivityTimeout: 60000,
    //timeout for capturing a browser, 60000 is default
    captureTimeout: 60000,
 
    client: {
      //capture all console output and pipe it to the terminal, true is default
      captureConsole:false,
      //if true, Karma clears the context window upon the completion of running the tests, true is default
      clearContext:false,
      //run the tests on the same window as the client, without using iframe or a new window, false is default
      runInParent: false,
      //true: runs the tests inside an iFrame; false: runs the tests in a new window, true is default
      useIframe:true,
      jasmine:{
        //tells jasmine to run specs in semi random order, false is default
        random: false
      }
    },
 
    /*karma-webpack config*/
    //pass your webpack configuration for karma
    webpack: {
      node: {
        fs: 'empty',
      },
      module: {
        rules: [
            {
              test: /\.js$/,
              exclude: /(node_modules)/,
              use: {
                loader: "babel-loader",
                options: {
                  presets: ["@babel/preset-env"]
                }
              }
            },
            {
              test: /\.g4$/,
              exclude: /(node_modules)/,
              use: {
                loader:'antlr4-webpack-loader'
              }
            }
        ]
    },
    },
    preprocessors: {
      //use webpack to support require() in test-suits .js files
      //use babel-loader from webpack to compile es2015 features in .js files
      //add webpack as preprocessor
      'tests/*.spec.js': ['webpack']
    },
    webpackMiddleware: {
      //turn off webpack bash output when run the tests
      noInfo: true,
      stats: {
        chunks: false
      }
    },
 
    /*karma-mocha-reporter config*/
    mochaReporter: {
      output: 'full'  //full, autowatch, minimal
    }
  });
};