lix-website/themes/lix/assets/bootstrap/node_modules/karma-detect-browsers/index.js
2024-04-26 22:49:34 -06:00

131 lines
4.7 KiB
JavaScript

'use strict';
var headlessBrowsers = [
'Chrome',
'Chromium',
'ChromeCanary',
'Firefox',
'FirefoxDeveloper',
'FirefoxAurora',
'FirefoxNightly',
];
var DetectBrowsers = function (config, logger) {
var fs = require('fs'),
os = require('os'),
which = require('which'),
browsers = require('./browsers'),
log = logger.create('framework.detect-browsers');
/**
* Returns all browser names found on the current system.
*
* @param {!Object} browsers The object with all browsers fro the browsers directory.
* @returns {Array}
*/
function getInstalledBrowsers (browsers) {
var i, length,
browserNames = Object.keys(browsers),
result = [];
// only use one firefox version on linux
if (process.platform === 'linux') {
browserNames = browserNames.filter(function (name) {
return name !== 'firefoxAurora' && name !== 'firefoxNightly';
});
}
// iterate over all browsers in the browsers folder
for (i = 0, length = browserNames.length; i < length; i++) {
var browser = browsers[browserNames[i]],
browserPaths = browser.DEFAULT_CMD[process.platform] || [],
y, paths = browserPaths.length;
if (process.env[browser.ENV_CMD]) {
log.info('which.sync(process.env[browser.ENV_CMD]): ', which.sync(process.env[browser.ENV_CMD]));
}
if (process.env[browser.ENV_CMD] && which.sync(process.env[browser.ENV_CMD])) {
result.push(browser.name);
continue;
}
// iterate over all browser paths
for (y = 0; y < paths; y++) {
try {
var browserLocated = fs.existsSync(browserPaths[y]) || which.sync(browserPaths[y]);
// don't use Edge on operating systems other than Windows 10
// (the launcher would be found, but would fail to run)
var useBrowser = browser.name !== 'Edge' || process.platform === 'win32' && /^1\d/.test(os.release());
if (browserLocated && useBrowser && result.indexOf(browser.name) < 0) {
// add browser when found in file system or when env variable is set
result.push(browser.name);
// set env variable on win32 when it does not exist yet
if (process.platform === 'win32') {
process.env[browser.ENV_CMD] = browserPaths[y];
}
break;
}
} catch (e) {
// which.sync() failed to find the browser.
}
}
}
return result;
}
config = config || {};
config.detectBrowsers = config.detectBrowsers || {};
config.plugins = config.plugins || [];
if (config.detectBrowsers.enabled === false) {
log.info('Detecting browsers is disabled. The browsers of the browsers array are used.');
return;
}
var availableBrowsers = getInstalledBrowsers(browsers);
if (config.detectBrowsers.preferHeadless) {
availableBrowsers = availableBrowsers.map(function (browser) {
return headlessBrowsers.indexOf(browser) >= 0 ? browser + 'Headless' : browser;
});
}
// override the browsers in the config only when browsers where find by this plugin
if (availableBrowsers.length >= 0) {
// check for PhantomJS option
if (config.detectBrowsers.usePhantomJS !== false) {
availableBrowsers.push('PhantomJS');
}
if (config.detectBrowsers.postDetection && typeof config.detectBrowsers.postDetection === 'function') {
//Add specific process to manage browsers list
availableBrowsers = config.detectBrowsers.postDetection(availableBrowsers);
}
var browserList = config.browsers || [];
if (availableBrowsers.length > 0) {
config.browsers = browserList.concat(
availableBrowsers.filter(function (browser) {
return browserList.indexOf(browser) === -1;
})
);
}
log.info('The following browsers will be used:', config.browsers);
} else {
log.warn('No browsers were detected. The browsers of the browsers array are used.');
}
};
// inject karma runner config
DetectBrowsers.$inject = ['config', 'logger'];
// PUBLISH DI MODULE
module.exports = {
'framework:detectBrowsers': ['factory', DetectBrowsers]
};