blob: 8d302ef04765cff4c4315d34f6044f42ecc3b064 [file] [log] [blame]
/**
* @license
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
const runUnderBazel = !!process.env["RUNFILES_DIR"];
const path = require('path');
function getModulesDir() {
if(runUnderBazel) {
// Run under bazel
return [
`external/ui_npm/node_modules`,
`external/ui_dev_npm/node_modules`
];
}
// Run from intellij or npm run test:kdebug
return [
path.join(__dirname, 'app/node_modules'),
path.join(__dirname, 'node_modules'),
];
}
function getUiDevNpmFilePath(importPath) {
if(runUnderBazel) {
return `external/ui_dev_npm/node_modules/${importPath}`;
}
else {
return `polygerrit-ui/node_modules/${importPath}`
}
}
module.exports = function(config) {
const localDirName = path.resolve(__dirname, '../.ts-out/polygerrit-ui/app');
const rootDir = runUnderBazel ?
'polygerrit-ui/app/_pg_with_tests_out/' : localDirName + '/';
const testFilesLocationPattern =
`${rootDir}**/!(template_test_srcs)/`;
// Use --test-files to specify pattern for a test files.
// It can be just a file name, without a path:
// --test-files async-foreach-behavior_test.js
// If you specify --test-files without pattern, it gets true value
// In this case we ill run all tests (usefull for package.json "debugtest"
// script)
const testFilesPattern = (typeof config.testFiles == 'string') ?
testFilesLocationPattern + config.testFiles :
testFilesLocationPattern + '*_test.js';
config.set({
// base path that will be used to resolve all patterns (eg. files, exclude)
basePath: '../',
plugins: [
// Do not use karma-* to load all installed plugin
// This can lead to unexpected behavior under bazel
// if you forget to add a plugin in a bazel rule.
require.resolve('@open-wc/karma-esm'),
'karma-mocha',
'karma-chrome-launcher',
'karma-mocha-reporter',
],
// frameworks to use
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
frameworks: ['mocha', 'esm'],
// list of files / patterns to load in the browser
files: [
getUiDevNpmFilePath('accessibility-developer-tools/dist/js/axs_testing.js'),
getUiDevNpmFilePath('sinon/pkg/sinon.js'),
{ pattern: testFilesPattern, type: 'module' },
],
esm: {
nodeResolve: true,
moduleDirs: getModulesDir(),
// Bazel and yarn uses symlinks for files.
// preserveSymlinks is necessary for correct modules paths resolving
preserveSymlinks: true,
// By default, esm-dev-server uses 'auto' compatibility mode.
// In the 'auto' mode it incorrectly applies polyfills and
// breaks tests in some browser versions
// (for example, Chrome 69 on gerrit-ci).
compatibility: 'none',
},
// test results reporter to use
// possible values: 'dots', 'progress'
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
reporters: ['mocha'],
// web server port
port: 9876,
// enable / disable colors in the output (reporters and logs)
colors: true,
// level of logging
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
logLevel: config.LOG_INFO,
// enable / disable watching file and executing tests whenever any file changes
autoWatch: false,
// start these browsers
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
browsers: ["CustomChromeHeadless"],
browserForDebugging: "CustomChromeHeadlessWithDebugPort",
// Continuous Integration mode
// if true, Karma captures browsers, runs the tests and exits
singleRun: true,
// Concurrency level
// how many browser should be started simultaneous
concurrency: Infinity,
client: {
mocha: {
ui: 'tdd',
timeout: 5000,
}
},
customLaunchers: {
// Based on https://developers.google.com/web/updates/2017/06/headless-karma-mocha-chai
"CustomChromeHeadless": {
base: 'ChromeHeadless',
flags: ['--disable-translate', '--disable-extensions'],
},
"ChromeDev": {
base: 'Chrome',
flags: ['--disable-extensions', ' --auto-open-devtools-for-tabs'],
},
"CustomChromeHeadlessWithDebugPort": {
base: 'CustomChromeHeadless',
flags: ['--remote-debugging-port=9222'],
}
}
});
};