/* eslint-env node */ const path = require('path') const ip = require('ip') const { babel } = require('@rollup/plugin-babel') const istanbul = require('rollup-plugin-istanbul') const { nodeResolve } = require('@rollup/plugin-node-resolve') const replace = require('@rollup/plugin-replace') const { browsers, browsersKeys } = require('./browsers') const { env } = process const browserStack = env.BROWSER === 'true' const debug = env.DEBUG === 'true' const jQueryTest = env.JQUERY === 'true' const frameworks = [ 'jasmine' ] const plugins = [ 'karma-jasmine', 'karma-rollup-preprocessor' ] const reporters = ['dots'] const detectBrowsers = { usePhantomJS: false, postDetection(availableBrowser) { if (env.CI === true || availableBrowser.includes('Chrome')) { return debug ? ['Chrome'] : ['ChromeHeadless'] } if (availableBrowser.includes('Chromium')) { return debug ? ['Chromium'] : ['ChromiumHeadless'] } if (availableBrowser.includes('Firefox')) { return debug ? ['Firefox'] : ['FirefoxHeadless'] } throw new Error('Please install Chrome, Chromium or Firefox') } } const customLaunchers = { FirefoxHeadless: { base: 'Firefox', flags: ['-headless'] } } const conf = { basePath: '../..', port: 9876, colors: true, autoWatch: false, singleRun: true, concurrency: Infinity, client: { clearContext: false }, files: [ 'node_modules/hammer-simulator/index.js', { pattern: 'js/tests/unit/**/!(jquery).spec.js', watched: !browserStack } ], preprocessors: { 'js/tests/unit/**/*.spec.js': ['rollup'] }, rollupPreprocessor: { plugins: [ replace({ 'process.env.NODE_ENV': '"dev"' }), istanbul({ exclude: [ 'node_modules/**', 'js/tests/unit/**/*.spec.js', 'js/tests/helpers/**/*.js' ] }), babel({ // Only transpile our source code exclude: 'node_modules/**', // Inline the required helpers in each file babelHelpers: 'inline' }), nodeResolve() ], output: { format: 'iife', name: 'bootstrapTest', sourcemap: 'inline' } } } if (browserStack) { conf.hostname = ip.address() conf.browserStack = { username: env.BROWSER_STACK_USERNAME, accessKey: env.BROWSER_STACK_ACCESS_KEY, build: `bootstrap-${new Date().toISOString()}`, project: 'Bootstrap', retryLimit: 2 } plugins.push('karma-browserstack-launcher', 'karma-jasmine-html-reporter') conf.customLaunchers = browsers conf.browsers = browsersKeys reporters.push('BrowserStack', 'kjhtml') } else if (jQueryTest) { frameworks.push('detectBrowsers') plugins.push( 'karma-chrome-launcher', 'karma-firefox-launcher', 'karma-detect-browsers' ) conf.customLaunchers = customLaunchers conf.detectBrowsers = detectBrowsers conf.files = [ 'node_modules/jquery/dist/jquery.slim.min.js', { pattern: 'js/tests/unit/jquery.spec.js', watched: false } ] } else { frameworks.push('detectBrowsers') plugins.push( 'karma-chrome-launcher', 'karma-firefox-launcher', 'karma-detect-browsers', 'karma-coverage-istanbul-reporter' ) reporters.push('coverage-istanbul') conf.customLaunchers = customLaunchers conf.detectBrowsers = detectBrowsers conf.coverageIstanbulReporter = { dir: path.resolve(__dirname, '../coverage/'), reports: ['lcov', 'text-summary'], thresholds: { emitWarning: false, global: { statements: 90, branches: 89, functions: 90, lines: 90 } } } if (debug) { conf.hostname = ip.address() plugins.push('karma-jasmine-html-reporter') reporters.push('kjhtml') conf.singleRun = false conf.autoWatch = true } } conf.frameworks = frameworks conf.plugins = plugins conf.reporters = reporters module.exports = karmaConfig => { // possible values: karmaConfig.LOG_DISABLE || karmaConfig.LOG_ERROR || karmaConfig.LOG_WARN || karmaConfig.LOG_INFO || karmaConfig.LOG_DEBUG conf.logLevel = karmaConfig.LOG_ERROR || karmaConfig.LOG_WARN karmaConfig.set(conf) }