diff options
Diffstat (limited to 'date-fns/config')
-rw-r--r-- | date-fns/config/.eslintrc.js | 5 | ||||
-rw-r--r-- | date-fns/config/_lib/benchmarkJSONReporter.js | 48 | ||||
-rw-r--r-- | date-fns/config/_lib/countReporter.js | 34 | ||||
-rw-r--r-- | date-fns/config/karma.js | 220 | ||||
-rw-r--r-- | date-fns/config/webpack.js | 79 |
5 files changed, 386 insertions, 0 deletions
diff --git a/date-fns/config/.eslintrc.js b/date-fns/config/.eslintrc.js new file mode 100644 index 0000000..a40aaa8 --- /dev/null +++ b/date-fns/config/.eslintrc.js @@ -0,0 +1,5 @@ +module.exports = { + rules: { + 'no-console': 'off' + } +} diff --git a/date-fns/config/_lib/benchmarkJSONReporter.js b/date-fns/config/_lib/benchmarkJSONReporter.js new file mode 100644 index 0000000..d435c96 --- /dev/null +++ b/date-fns/config/_lib/benchmarkJSONReporter.js @@ -0,0 +1,48 @@ +var fs = require('fs') + +var benchmarkResultFilename = './tmp/benchmark.json' + +function benchmarkJSONReporter () { + var benchmarkResult = {} + + this.onSpecComplete = function (_, result) { + var fnName = result.benchmark.suite + var libraryName = result.benchmark.name + var operationsPerSecond = Math.floor(result.benchmark.hz) + + if (!benchmarkResult[fnName]) { + benchmarkResult[fnName] = {} + } + + benchmarkResult[fnName][libraryName] = operationsPerSecond + } + + this.onRunComplete = function () { + var benchmarkResultArray = [] + for (var fnName in benchmarkResult) { + if (benchmarkResult.hasOwnProperty(fnName)) { + var element = {fn: fnName} + + if (benchmarkResult[fnName]['date-fns']) { + element.dateFns = benchmarkResult[fnName]['date-fns'] + } + + if (benchmarkResult[fnName]['Moment.js']) { + element.moment = benchmarkResult[fnName]['Moment.js'] + } + + benchmarkResultArray.push(element) + } + } + + fs.writeFile(benchmarkResultFilename, JSON.stringify(benchmarkResultArray), 'utf-8', function (err) { + if (err) { + throw err + } + + console.log('See results at ' + benchmarkResultFilename) + }) + } +} + +module.exports = benchmarkJSONReporter diff --git a/date-fns/config/_lib/countReporter.js b/date-fns/config/_lib/countReporter.js new file mode 100644 index 0000000..e78e238 --- /dev/null +++ b/date-fns/config/_lib/countReporter.js @@ -0,0 +1,34 @@ +var fs = require('fs') + +var countFilename = './tmp/tests_count.txt' + +function countReporter() { + this.onRunComplete = function (_, result) { + var runCount = result.success + + fs.readFile( + countFilename, + { encoding: 'utf-8', flag: 'a+' }, + function (err, data) { + if (err) { + throw err + } + + var totalCount = (parseInt(data, 10) || 0) + runCount + + fs.writeFile( + countFilename, + totalCount.toString(), + 'utf-8', + function (err) { + if (err) { + throw err + } + } + ) + } + ) + } +} + +module.exports = countReporter diff --git a/date-fns/config/karma.js b/date-fns/config/karma.js new file mode 100644 index 0000000..e43fe80 --- /dev/null +++ b/date-fns/config/karma.js @@ -0,0 +1,220 @@ +process.env.PHANTOMJS_BIN = 'node_modules/.bin/phantomjs' +process.env.NODE_ENV = 'test' + +const webpackConfig = require('./webpack') +const countReporter = require('./_lib/countReporter') +const benchmarkJSONReporter = require('./_lib/benchmarkJSONReporter') + +const sauceLabsLaunchers = { + // TODO: See if Safari became more reliable + safari: { + base: 'SauceLabs', + platform: 'OS X 10.11', + browserName: 'safari', + version: '9.0', + }, + + chrome: { + base: 'SauceLabs', + platform: 'Windows 8.1', + browserName: 'chrome', + version: '46.0', + }, + + firefox: { + base: 'SauceLabs', + platform: 'Windows 8.1', + browserName: 'firefox', + version: '41.0', + }, + + ie8: { + base: 'SauceLabs', + platform: 'Windows 7', + browserName: 'internet explorer', + version: '8.0', + }, + + ie9: { + base: 'SauceLabs', + platform: 'Windows 7', + browserName: 'internet explorer', + version: '9.0', + }, + + ie10: { + base: 'SauceLabs', + platform: 'Windows 7', + browserName: 'internet explorer', + version: '10.0', + }, + + ie11: { + base: 'SauceLabs', + platform: 'Windows 8.1', + browserName: 'internet explorer', + version: '11.0', + }, + + edge: { + base: 'SauceLabs', + platform: 'Windows 10', + browserName: 'microsoftedge', + version: '20.10240', + }, + + // TODO: See if iPhone became more reliable + // ios: { + // base: 'SauceLabs', + // browserName: 'iphone', + // platform: 'OS X 10.10', + // version: '9.1', + // deviceName: 'iPhone 6', + // deviceOrientation: 'portrait' + // }, + + android: { + base: 'SauceLabs', + browserName: 'android', + platform: 'Linux', + version: '5.1', + deviceName: 'Android Emulator', + deviceOrientation: 'portrait', + }, +} + +const localLaunchers = { + LocalChrome: { + base: 'Chrome', + }, +} + +const ciLaunchers = { + CIChrome: { + base: 'ChromeHeadless', + }, +} + +function config(config) { + config.set({ + frameworks: getFrameworksConfig(), + files: getFilesConfig(), + preprocessors: getPreprocessorsConfig(), + webpack: webpackConfig, + webpackMiddleware: { + stats: { + assets: false, + chunks: false, + hash: false, + timings: false, + version: false, + }, + }, + + // We are limited in the number of parallel VMs in SauceLabs (5) + // and Karma don't know how to limit parallel browser instances + // so waiting time must be insanely high. + browserNoActivityTimeout: process.env.TEST_CROSS_BROWSER + ? 60 * 60 * 1000 /* 1 hour */ + : 10 * 1000 /* 10 sec */, + captureTimeout: process.env.TEST_CROSS_BROWSER + ? 120 * 1000 /* 2 min */ + : 60 * 1000 /* 1 min */, + + sauceLabs: { + startConnect: false, + tunnelIdentifier: process.env.GITHUB_RUN_ID, + recordScreenshots: false, + public: 'public', + }, + + coveageIstanbulReporter: { + reports: ['html', 'lcovonly'], + fixWebpackSourcePaths: true, + }, + + mochaReporter: { + output: 'minimal', + }, + + plugins: (process.env.COVERAGE_REPORT + ? ['karma-coverage', 'karma-coverage-istanbul-reporter'] + : [] + ).concat([ + 'karma-mocha', + 'karma-mocha-reporter', + 'karma-phantomjs-launcher', + 'karma-chrome-launcher', + // TODO: Make it work + // 'karma-sauce-launcher', + 'karma-sourcemap-loader', + 'karma-webpack', + 'karma-benchmark', + 'karma-benchmark-reporter', + { 'reporter:count': ['type', countReporter] }, + { 'reporter:benchmark-json': ['type', benchmarkJSONReporter] }, + ]), + + customLaunchers: process.env.TEST_CROSS_BROWSER + ? sauceLabsLaunchers + : process.env.CI + ? ciLaunchers + : localLaunchers, + browsers: getBrowsersConfig(), + reporters: getReportersConfig(), + }) +} + +function getFrameworksConfig() { + if (process.env.TEST_BENCHMARK) { + return ['benchmark'] + } else { + return ['mocha'] + } +} + +function getFilesConfig() { + if (process.env.USE_STATIC_TESTS) { + return ['../tmp/tests.js'] + } else if (process.env.TEST_BENCHMARK) { + return ['../node_modules/moment/moment.js', '../benchmark.js'] + } else { + return ['../test.js'] + } +} + +function getPreprocessorsConfig() { + if (process.env.USE_STATIC_TESTS) { + return { '../tmp/tests.js': ['sourcemap'] } + } else if (process.env.TEST_BENCHMARK) { + return { '../benchmark.js': ['webpack', 'sourcemap'] } + } else { + return { '../test.js': ['webpack', 'sourcemap'] } + } +} + +function getBrowsersConfig() { + if (process.env.TEST_CROSS_BROWSER) { + return Object.keys(sauceLabsLaunchers) + } else if (process.env.TEST_BENCHMARK) { + return ['PhantomJS'] + } else if (process.env.CI) { + return Object.keys(ciLaunchers) + } else { + return Object.keys(localLaunchers) + } +} + +function getReportersConfig() { + if (process.env.TEST_CROSS_BROWSER) { + return ['dots', 'saucelabs', 'count'] + } else if (process.env.TEST_BENCHMARK) { + return ['benchmark', 'benchmark-json'] + } else if (process.env.COVERAGE_REPORT) { + return ['coverage-istanbul'] + } else { + return ['mocha', 'count'] + } +} + +module.exports = config diff --git a/date-fns/config/webpack.js b/date-fns/config/webpack.js new file mode 100644 index 0000000..327b587 --- /dev/null +++ b/date-fns/config/webpack.js @@ -0,0 +1,79 @@ +const path = require('path') +const webpack = require('webpack') + +const isProduction = process.env.NODE_ENV === 'production' + +const config = { + mode: isProduction ? 'production' : 'development', + devtool: isProduction ? 'source-map' : 'inline-source-map', + entry: getEntryConfig(), + output: getOutputConfig(), + resolve: { + extensions: ['.ts', '.js'] + }, + module: { + rules: [ + { test: /\.(js|ts)$/, exclude: /node_modules/, use: 'babel-loader' } + ].concat( + process.env.COVERAGE_REPORT + ? [ + { + test: /\.(js|ts)$/, + use: { + loader: 'istanbul-instrumenter-loader', + options: { esModules: true } + }, + enforce: 'post', + exclude: /node_modules|test.js|src\/locale$/ + } + ] + : [] + ) + }, + plugins: getPlugins() +} + +module.exports = config + +function getEntryConfig() { + if (process.env.BUILD_TESTS) { + return { + tests: './testWithoutLocales.js' + } + } else if (process.env.NODE_ENV === 'test') { + return undefined + } else { + return { + date_fns: './tmp/umd/index.js' + } + } +} + +function getOutputConfig() { + if (process.env.BUILD_TESTS) { + return { + path: path.join(process.cwd(), 'tmp'), + filename: '[name].js' + } + } else if (process.env.NODE_ENV === 'test') { + return undefined + } else { + return { + path: path.join(process.cwd(), 'dist'), + filename: '[name].js', + library: 'dateFns', + libraryTarget: 'umd' + } + } +} + +function getPlugins() { + return process.env.NODE_ENV === 'test' + ? [ + new webpack.ContextReplacementPlugin( + /power-assert-formatter[\\/]lib/, + new RegExp('^\\./.*\\.js$') + ) + ] + : undefined +} |