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