1*c8dee2aaSAndroid Build Coastguard Workerconst isDocker = require('is-docker')(); 2*c8dee2aaSAndroid Build Coastguard Worker 3*c8dee2aaSAndroid Build Coastguard Workermodule.exports = function(config) { 4*c8dee2aaSAndroid Build Coastguard Worker // Set the default values to be what are needed when testing the 5*c8dee2aaSAndroid Build Coastguard Worker // WebAssembly build locally. 6*c8dee2aaSAndroid Build Coastguard Worker let cfg = { 7*c8dee2aaSAndroid Build Coastguard Worker // frameworks to use 8*c8dee2aaSAndroid Build Coastguard Worker // available frameworks: https://npmjs.org/browse/keyword/karma-adapter 9*c8dee2aaSAndroid Build Coastguard Worker frameworks: ['jasmine'], 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker // list of files / patterns to load in the browser 12*c8dee2aaSAndroid Build Coastguard Worker files: [ 13*c8dee2aaSAndroid Build Coastguard Worker { pattern: 'npm-wasm/bin/pathkit.wasm', included:false, served:true}, 14*c8dee2aaSAndroid Build Coastguard Worker 'perf/perfReporter.js', 15*c8dee2aaSAndroid Build Coastguard Worker 'npm-wasm/bin/pathkit.js', 16*c8dee2aaSAndroid Build Coastguard Worker 'tests/pathkitinit.js', 17*c8dee2aaSAndroid Build Coastguard Worker 'perf/*.bench.js' 18*c8dee2aaSAndroid Build Coastguard Worker ], 19*c8dee2aaSAndroid Build Coastguard Worker 20*c8dee2aaSAndroid Build Coastguard Worker proxies: { 21*c8dee2aaSAndroid Build Coastguard Worker '/pathkit/': '/base/npm-wasm/bin/' 22*c8dee2aaSAndroid Build Coastguard Worker }, 23*c8dee2aaSAndroid Build Coastguard Worker 24*c8dee2aaSAndroid Build Coastguard Worker // test results reporter to use 25*c8dee2aaSAndroid Build Coastguard Worker // possible values: 'dots', 'progress' 26*c8dee2aaSAndroid Build Coastguard Worker // available reporters: https://npmjs.org/browse/keyword/karma-reporter 27*c8dee2aaSAndroid Build Coastguard Worker reporters: ['dots'], 28*c8dee2aaSAndroid Build Coastguard Worker 29*c8dee2aaSAndroid Build Coastguard Worker // web server port 30*c8dee2aaSAndroid Build Coastguard Worker port: 4444, 31*c8dee2aaSAndroid Build Coastguard Worker 32*c8dee2aaSAndroid Build Coastguard Worker // enable / disable colors in the output (reporters and logs) 33*c8dee2aaSAndroid Build Coastguard Worker colors: true, 34*c8dee2aaSAndroid Build Coastguard Worker 35*c8dee2aaSAndroid Build Coastguard Worker // level of logging 36*c8dee2aaSAndroid Build Coastguard Worker // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG 37*c8dee2aaSAndroid Build Coastguard Worker logLevel: config.LOG_INFO, 38*c8dee2aaSAndroid Build Coastguard Worker 39*c8dee2aaSAndroid Build Coastguard Worker // enable / disable watching file and executing tests whenever any file changes 40*c8dee2aaSAndroid Build Coastguard Worker autoWatch: true, 41*c8dee2aaSAndroid Build Coastguard Worker 42*c8dee2aaSAndroid Build Coastguard Worker browserDisconnectTimeout: 20000, 43*c8dee2aaSAndroid Build Coastguard Worker browserNoActivityTimeout: 20000, 44*c8dee2aaSAndroid Build Coastguard Worker 45*c8dee2aaSAndroid Build Coastguard Worker // start these browsers 46*c8dee2aaSAndroid Build Coastguard Worker browsers: ['Chrome'], 47*c8dee2aaSAndroid Build Coastguard Worker 48*c8dee2aaSAndroid Build Coastguard Worker // Continuous Integration mode 49*c8dee2aaSAndroid Build Coastguard Worker // if true, Karma captures browsers, runs the tests and exits 50*c8dee2aaSAndroid Build Coastguard Worker singleRun: false, 51*c8dee2aaSAndroid Build Coastguard Worker 52*c8dee2aaSAndroid Build Coastguard Worker // Concurrency level 53*c8dee2aaSAndroid Build Coastguard Worker // how many browser should be started simultaneous 54*c8dee2aaSAndroid Build Coastguard Worker concurrency: Infinity, 55*c8dee2aaSAndroid Build Coastguard Worker }; 56*c8dee2aaSAndroid Build Coastguard Worker 57*c8dee2aaSAndroid Build Coastguard Worker if (isDocker) { 58*c8dee2aaSAndroid Build Coastguard Worker // See https://hackernoon.com/running-karma-tests-with-headless-chrome-inside-docker-ae4aceb06ed3 59*c8dee2aaSAndroid Build Coastguard Worker cfg.browsers = ['ChromeHeadlessNoSandbox'], 60*c8dee2aaSAndroid Build Coastguard Worker cfg.customLaunchers = { 61*c8dee2aaSAndroid Build Coastguard Worker ChromeHeadlessNoSandbox: { 62*c8dee2aaSAndroid Build Coastguard Worker base: 'ChromeHeadless', 63*c8dee2aaSAndroid Build Coastguard Worker flags: [ 64*c8dee2aaSAndroid Build Coastguard Worker // Without this flag, we see an error: 65*c8dee2aaSAndroid Build Coastguard Worker // Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted 66*c8dee2aaSAndroid Build Coastguard Worker '--no-sandbox', 67*c8dee2aaSAndroid Build Coastguard Worker // may help tests be less flaky 68*c8dee2aaSAndroid Build Coastguard Worker // https://peter.sh/experiments/chromium-command-line-switches/#browser-test 69*c8dee2aaSAndroid Build Coastguard Worker '--browser-test', 70*c8dee2aaSAndroid Build Coastguard Worker // This can also help avoid crashes/timeouts: 71*c8dee2aaSAndroid Build Coastguard Worker // https://github.com/GoogleChrome/puppeteer/issues/1834 72*c8dee2aaSAndroid Build Coastguard Worker '--disable-dev-shm-usage', 73*c8dee2aaSAndroid Build Coastguard Worker ], 74*c8dee2aaSAndroid Build Coastguard Worker }, 75*c8dee2aaSAndroid Build Coastguard Worker }; 76*c8dee2aaSAndroid Build Coastguard Worker } 77*c8dee2aaSAndroid Build Coastguard Worker 78*c8dee2aaSAndroid Build Coastguard Worker if (process.env.ASM_JS) { 79*c8dee2aaSAndroid Build Coastguard Worker console.log('asm.js is under test'); 80*c8dee2aaSAndroid Build Coastguard Worker cfg.files = [ 81*c8dee2aaSAndroid Build Coastguard Worker { pattern: 'npm-asmjs/bin/pathkit.js.mem', included:false, served:true}, 82*c8dee2aaSAndroid Build Coastguard Worker 'perf/perfReporter.js', 83*c8dee2aaSAndroid Build Coastguard Worker 'npm-asmjs/bin/pathkit.js', 84*c8dee2aaSAndroid Build Coastguard Worker 'tests/pathkitinit.js', 85*c8dee2aaSAndroid Build Coastguard Worker 'perf/*.bench.js' 86*c8dee2aaSAndroid Build Coastguard Worker ]; 87*c8dee2aaSAndroid Build Coastguard Worker 88*c8dee2aaSAndroid Build Coastguard Worker cfg.proxies = { 89*c8dee2aaSAndroid Build Coastguard Worker '/pathkit/': '/base/npm-asmjs/bin/' 90*c8dee2aaSAndroid Build Coastguard Worker }; 91*c8dee2aaSAndroid Build Coastguard Worker } else { 92*c8dee2aaSAndroid Build Coastguard Worker console.log('wasm is under test'); 93*c8dee2aaSAndroid Build Coastguard Worker } 94*c8dee2aaSAndroid Build Coastguard Worker 95*c8dee2aaSAndroid Build Coastguard Worker config.set(cfg); 96*c8dee2aaSAndroid Build Coastguard Worker} 97