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