chore: 整理 third-party Dark Reader 目录并移除本地说明文件跟踪
This commit is contained in:
+144
@@ -0,0 +1,144 @@
|
||||
/** @typedef {import('karma').Config & {headless: boolean, debug: boolean, ci: boolean, coverage: boolean}} LocalConfig */
|
||||
/** @typedef {import('karma').ConfigOptions} ConfigOptions */
|
||||
|
||||
import fs from 'node:fs';
|
||||
import os from 'node:os';
|
||||
|
||||
import rollupPluginReplace from '@rollup/plugin-replace';
|
||||
import rollupPluginTypescript from '@rollup/plugin-typescript';
|
||||
import rollupPluginIstanbul from 'rollup-plugin-istanbul';
|
||||
import typescript from 'typescript';
|
||||
|
||||
import {absolutePath} from '../../tasks/paths.js';
|
||||
|
||||
import {createEchoServer} from './support/echo-server.js';
|
||||
|
||||
/**
|
||||
* @param {Partial<LocalConfig>} config
|
||||
* @param {Record<string, string>} env
|
||||
* @returns {ConfigOptions}
|
||||
*/
|
||||
export function configureKarma(config, env) {
|
||||
const headless = config.headless || Boolean(env.KARMA_HEADLESS) || false;
|
||||
|
||||
/** @type {ConfigOptions} */
|
||||
const options = {
|
||||
failOnFailingTestSuite: true,
|
||||
failOnEmptyTestSuite: true,
|
||||
basePath: '../..',
|
||||
frameworks: ['jasmine'],
|
||||
files: [
|
||||
'tests/inject/support/customize.ts',
|
||||
'tests/inject/support/polyfills.ts',
|
||||
{pattern: 'tests/inject/**/*.tests.ts', watched: false},
|
||||
],
|
||||
plugins: [
|
||||
'karma-chrome-launcher',
|
||||
'karma-firefox-launcher',
|
||||
process.platform === 'darwin' ? 'karma-safari-launcher' : null,
|
||||
'karma-rollup-preprocessor',
|
||||
'karma-jasmine',
|
||||
'karma-spec-reporter',
|
||||
].filter(Boolean),
|
||||
preprocessors: {
|
||||
'**/*.+(ts|tsx)': ['rollup'],
|
||||
},
|
||||
rollupPreprocessor: {
|
||||
plugins: [
|
||||
rollupPluginTypescript({
|
||||
rootDir: absolutePath('.'),
|
||||
typescript,
|
||||
outDir: 'build/tests',
|
||||
tsconfig: absolutePath('tests/inject/tsconfig.json'),
|
||||
cacheDir: `${fs.realpathSync(os.tmpdir())}/darkreader_typescript_test_cache`,
|
||||
}),
|
||||
rollupPluginReplace({
|
||||
preventAssignment: true,
|
||||
__DEBUG__: false,
|
||||
__FIREFOX_MV2__: false,
|
||||
__CHROMIUM_MV2__: false,
|
||||
__CHROMIUM_MV3__: false,
|
||||
__THUNDERBIRD__: false,
|
||||
__PLUS__: false,
|
||||
__PORT__: '-1',
|
||||
__TEST__: true,
|
||||
__WATCH__: false,
|
||||
}),
|
||||
],
|
||||
output: {
|
||||
dir: 'build/tests',
|
||||
strict: true,
|
||||
format: 'iife',
|
||||
sourcemap: 'inline',
|
||||
},
|
||||
},
|
||||
reporters: ['spec'],
|
||||
port: 9876,
|
||||
colors: true,
|
||||
logLevel: config.LOG_INFO,
|
||||
autoWatch: true,
|
||||
browsers: headless
|
||||
? ['ChromeHeadless', 'FirefoxHeadless']
|
||||
: ['Chrome', 'Firefox', process.platform === 'darwin' ? 'Safari' : null].filter(Boolean),
|
||||
singleRun: true,
|
||||
concurrency: 1,
|
||||
};
|
||||
|
||||
if (config.debug) {
|
||||
options.browsers = ['Chrome'];
|
||||
options.singleRun = false;
|
||||
options.concurrency = Infinity;
|
||||
options.logLevel = config.LOG_DEBUG;
|
||||
}
|
||||
|
||||
if (config.ci) {
|
||||
options.customLaunchers = {};
|
||||
options.browsers = [];
|
||||
|
||||
// CHROME_TEST and FIREFOX_TEST are used in CI
|
||||
const chrome = env.CHROME_TEST;
|
||||
const firefox = env.FIREFOX_TEST;
|
||||
const all = !chrome && !firefox;
|
||||
// Chrome
|
||||
if (chrome || all) {
|
||||
options.customLaunchers['CIChromeHeadless'] = {
|
||||
base: 'ChromeHeadless',
|
||||
flags: ['--no-sandbox', '--disable-setuid-sandbox'],
|
||||
};
|
||||
options.browsers.push('CIChromeHeadless');
|
||||
}
|
||||
|
||||
// Firefox
|
||||
if (firefox || all) {
|
||||
options.customLaunchers['CIFirefoxHeadless'] = {
|
||||
base: 'FirefoxHeadless',
|
||||
};
|
||||
options.browsers.push('CIFirefoxHeadless');
|
||||
}
|
||||
|
||||
options.autoWatch = false;
|
||||
options.singleRun = true;
|
||||
options.concurrency = 1;
|
||||
options.logLevel = config.LOG_DEBUG;
|
||||
}
|
||||
|
||||
if (config.coverage) {
|
||||
options.plugins.push('karma-coverage');
|
||||
const plugin = rollupPluginIstanbul({
|
||||
exclude: ['tests/**/*.*', 'src/inject/dynamic-theme/stylesheet-proxy.ts'],
|
||||
});
|
||||
options.rollupPreprocessor.plugins.push(plugin);
|
||||
options.reporters.push('coverage');
|
||||
options.coverageReporter = {
|
||||
type: 'html',
|
||||
dir: 'tests/inject/coverage/',
|
||||
};
|
||||
}
|
||||
|
||||
// HACK: Create CORS server here
|
||||
// Previously a separate Karma runner file was used
|
||||
const corsServerPort = 9966;
|
||||
createEchoServer(corsServerPort).then(() => console.log(`CORS echo server running on port ${corsServerPort}`));
|
||||
|
||||
return options;
|
||||
}
|
||||
Reference in New Issue
Block a user