2017-11-10 11:25:47 +01:00
|
|
|
/* eslint-env node */
|
2020-07-07 09:23:11 +02:00
|
|
|
|
2021-01-13 18:16:51 +01:00
|
|
|
'use strict'
|
|
|
|
|
2022-09-20 07:09:14 +02:00
|
|
|
const path = require('node:path')
|
2018-09-13 09:42:15 +02:00
|
|
|
const ip = require('ip')
|
2020-05-26 05:14:12 +02:00
|
|
|
const { babel } = require('@rollup/plugin-babel')
|
2019-08-29 15:20:49 +02:00
|
|
|
const istanbul = require('rollup-plugin-istanbul')
|
2020-07-07 09:23:11 +02:00
|
|
|
const { nodeResolve } = require('@rollup/plugin-node-resolve')
|
2020-06-19 10:17:01 +02:00
|
|
|
const replace = require('@rollup/plugin-replace')
|
2021-10-13 07:42:21 +02:00
|
|
|
const { browsers } = require('./browsers')
|
2017-11-10 11:25:47 +01:00
|
|
|
|
2021-01-13 18:16:51 +01:00
|
|
|
const ENV = process.env
|
|
|
|
const BROWSERSTACK = Boolean(ENV.BROWSERSTACK)
|
|
|
|
const DEBUG = Boolean(ENV.DEBUG)
|
|
|
|
const JQUERY_TEST = Boolean(ENV.JQUERY)
|
|
|
|
|
2018-03-03 22:04:11 +01:00
|
|
|
const frameworks = [
|
2019-03-13 15:23:50 +01:00
|
|
|
'jasmine'
|
2018-03-03 22:04:11 +01:00
|
|
|
]
|
|
|
|
|
2018-10-14 13:59:51 +02:00
|
|
|
const plugins = [
|
2019-03-13 15:23:50 +01:00
|
|
|
'karma-jasmine',
|
|
|
|
'karma-rollup-preprocessor'
|
2018-10-14 13:59:51 +02:00
|
|
|
]
|
|
|
|
|
2018-09-13 09:42:15 +02:00
|
|
|
const reporters = ['dots']
|
|
|
|
|
|
|
|
const detectBrowsers = {
|
|
|
|
usePhantomJS: false,
|
|
|
|
postDetection(availableBrowser) {
|
2021-02-16 11:18:06 +01:00
|
|
|
// On CI just use Chrome
|
|
|
|
if (ENV.CI === true) {
|
|
|
|
return ['ChromeHeadless']
|
|
|
|
}
|
|
|
|
|
|
|
|
if (availableBrowser.includes('Chrome')) {
|
2021-01-13 18:16:51 +01:00
|
|
|
return DEBUG ? ['Chrome'] : ['ChromeHeadless']
|
2018-09-13 09:42:15 +02:00
|
|
|
}
|
|
|
|
|
2020-11-18 12:06:04 +01:00
|
|
|
if (availableBrowser.includes('Chromium')) {
|
2021-01-13 18:16:51 +01:00
|
|
|
return DEBUG ? ['Chromium'] : ['ChromiumHeadless']
|
2020-11-17 20:42:55 +01:00
|
|
|
}
|
|
|
|
|
2018-09-13 09:42:15 +02:00
|
|
|
if (availableBrowser.includes('Firefox')) {
|
2021-01-13 18:16:51 +01:00
|
|
|
return DEBUG ? ['Firefox'] : ['FirefoxHeadless']
|
2018-09-13 09:42:15 +02:00
|
|
|
}
|
|
|
|
|
2020-11-17 20:42:55 +01:00
|
|
|
throw new Error('Please install Chrome, Chromium or Firefox')
|
2018-09-13 09:42:15 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-10-29 09:38:35 +02:00
|
|
|
const config = {
|
2018-09-13 09:42:15 +02:00
|
|
|
basePath: '../..',
|
|
|
|
port: 9876,
|
|
|
|
colors: true,
|
|
|
|
autoWatch: false,
|
|
|
|
singleRun: true,
|
2020-12-18 14:11:07 +01:00
|
|
|
concurrency: Number.POSITIVE_INFINITY,
|
2018-09-13 09:42:15 +02:00
|
|
|
client: {
|
2019-03-13 15:23:50 +01:00
|
|
|
clearContext: false
|
2019-10-02 11:43:54 +02:00
|
|
|
},
|
|
|
|
files: [
|
|
|
|
'node_modules/hammer-simulator/index.js',
|
2020-11-09 19:33:20 +01:00
|
|
|
{
|
|
|
|
pattern: 'js/tests/unit/**/!(jquery).spec.js',
|
2021-01-13 18:16:51 +01:00
|
|
|
watched: !BROWSERSTACK
|
2020-11-09 19:33:20 +01:00
|
|
|
}
|
2019-10-02 11:43:54 +02:00
|
|
|
],
|
|
|
|
preprocessors: {
|
2019-10-09 00:27:43 +02:00
|
|
|
'js/tests/unit/**/*.spec.js': ['rollup']
|
2019-10-02 11:43:54 +02:00
|
|
|
},
|
|
|
|
rollupPreprocessor: {
|
|
|
|
plugins: [
|
2020-06-19 10:17:01 +02:00
|
|
|
replace({
|
2021-03-10 17:47:42 +01:00
|
|
|
'process.env.NODE_ENV': '"dev"',
|
|
|
|
preventAssignment: true
|
2020-06-19 10:17:01 +02:00
|
|
|
}),
|
2019-10-02 11:43:54 +02:00
|
|
|
istanbul({
|
2020-05-09 21:28:09 +02:00
|
|
|
exclude: [
|
|
|
|
'node_modules/**',
|
|
|
|
'js/tests/unit/**/*.spec.js',
|
|
|
|
'js/tests/helpers/**/*.js'
|
|
|
|
]
|
2019-10-02 11:43:54 +02:00
|
|
|
}),
|
|
|
|
babel({
|
|
|
|
// Only transpile our source code
|
|
|
|
exclude: 'node_modules/**',
|
2020-05-26 05:14:12 +02:00
|
|
|
// Inline the required helpers in each file
|
|
|
|
babelHelpers: 'inline'
|
2019-10-02 11:43:54 +02:00
|
|
|
}),
|
2020-07-07 09:23:11 +02:00
|
|
|
nodeResolve()
|
2019-10-02 11:43:54 +02:00
|
|
|
],
|
|
|
|
output: {
|
|
|
|
format: 'iife',
|
|
|
|
name: 'bootstrapTest',
|
2021-10-04 18:46:07 +02:00
|
|
|
sourcemap: 'inline',
|
|
|
|
generatedCode: 'es2015'
|
2019-10-02 11:43:54 +02:00
|
|
|
}
|
2018-09-13 09:42:15 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-01-13 18:16:51 +01:00
|
|
|
if (BROWSERSTACK) {
|
2021-10-29 09:38:35 +02:00
|
|
|
config.hostname = ip.address()
|
|
|
|
config.browserStack = {
|
2021-01-13 18:16:51 +01:00
|
|
|
username: ENV.BROWSER_STACK_USERNAME,
|
|
|
|
accessKey: ENV.BROWSER_STACK_ACCESS_KEY,
|
2022-11-12 09:09:36 +01:00
|
|
|
build: `bootstrap-${ENV.GITHUB_SHA ? `${ENV.GITHUB_SHA.slice(0, 7)}-` : ''}${new Date().toISOString()}`,
|
2018-09-13 09:42:15 +02:00
|
|
|
project: 'Bootstrap',
|
|
|
|
retryLimit: 2
|
|
|
|
}
|
2019-03-13 15:23:50 +01:00
|
|
|
plugins.push('karma-browserstack-launcher', 'karma-jasmine-html-reporter')
|
2021-10-29 09:38:35 +02:00
|
|
|
config.customLaunchers = browsers
|
|
|
|
config.browsers = Object.keys(browsers)
|
2019-03-13 15:23:50 +01:00
|
|
|
reporters.push('BrowserStack', 'kjhtml')
|
2021-01-13 18:16:51 +01:00
|
|
|
} else if (JQUERY_TEST) {
|
2020-05-06 07:23:05 +02:00
|
|
|
frameworks.push('detectBrowsers')
|
|
|
|
plugins.push(
|
|
|
|
'karma-chrome-launcher',
|
|
|
|
'karma-firefox-launcher',
|
|
|
|
'karma-detect-browsers'
|
|
|
|
)
|
2021-10-29 09:38:35 +02:00
|
|
|
config.detectBrowsers = detectBrowsers
|
|
|
|
config.files = [
|
2020-05-06 07:23:05 +02:00
|
|
|
'node_modules/jquery/dist/jquery.slim.min.js',
|
2020-11-09 19:33:20 +01:00
|
|
|
{
|
|
|
|
pattern: 'js/tests/unit/jquery.spec.js',
|
|
|
|
watched: false
|
|
|
|
}
|
2020-05-06 07:23:05 +02:00
|
|
|
]
|
2018-09-13 09:42:15 +02:00
|
|
|
} else {
|
|
|
|
frameworks.push('detectBrowsers')
|
|
|
|
plugins.push(
|
|
|
|
'karma-chrome-launcher',
|
|
|
|
'karma-firefox-launcher',
|
|
|
|
'karma-detect-browsers',
|
|
|
|
'karma-coverage-istanbul-reporter'
|
|
|
|
)
|
|
|
|
reporters.push('coverage-istanbul')
|
2021-10-29 09:38:35 +02:00
|
|
|
config.detectBrowsers = detectBrowsers
|
|
|
|
config.coverageIstanbulReporter = {
|
2019-01-17 11:06:43 +01:00
|
|
|
dir: path.resolve(__dirname, '../coverage/'),
|
2018-09-13 09:42:15 +02:00
|
|
|
reports: ['lcov', 'text-summary'],
|
|
|
|
thresholds: {
|
|
|
|
emitWarning: false,
|
|
|
|
global: {
|
|
|
|
statements: 90,
|
2020-11-01 14:52:24 +01:00
|
|
|
branches: 89,
|
2019-03-13 15:23:50 +01:00
|
|
|
functions: 90,
|
2018-09-13 09:42:15 +02:00
|
|
|
lines: 90
|
2018-05-07 15:56:24 +02:00
|
|
|
}
|
2017-11-10 11:25:47 +01:00
|
|
|
}
|
2018-09-13 09:42:15 +02:00
|
|
|
}
|
|
|
|
|
2021-01-13 18:16:51 +01:00
|
|
|
if (DEBUG) {
|
2021-10-29 09:38:35 +02:00
|
|
|
config.hostname = ip.address()
|
2019-03-13 15:23:50 +01:00
|
|
|
plugins.push('karma-jasmine-html-reporter')
|
|
|
|
reporters.push('kjhtml')
|
2021-10-29 09:38:35 +02:00
|
|
|
config.singleRun = false
|
|
|
|
config.autoWatch = true
|
2019-02-22 23:37:55 +01:00
|
|
|
}
|
|
|
|
}
|
2018-09-13 09:42:15 +02:00
|
|
|
|
2021-10-29 09:38:35 +02:00
|
|
|
config.frameworks = frameworks
|
|
|
|
config.plugins = plugins
|
|
|
|
config.reporters = reporters
|
2018-09-13 09:42:15 +02:00
|
|
|
|
2019-02-26 12:20:34 +01:00
|
|
|
module.exports = karmaConfig => {
|
2021-10-29 09:38:35 +02:00
|
|
|
config.logLevel = karmaConfig.LOG_ERROR
|
|
|
|
karmaConfig.set(config)
|
2017-11-10 11:25:47 +01:00
|
|
|
}
|