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