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