From fd176119d8a585f92eb0f0605ae1d251d259f354 Mon Sep 17 00:00:00 2001 From: Romain Menke <11521496+romainmenke@users.noreply.github.com> Date: Mon, 31 Jan 2022 12:38:04 +0100 Subject: [PATCH] postcss-preset-env : make logger a class instance (#217) --- plugin-packs/postcss-preset-env/src/index.js | 12 ++-- .../src/lib/format-feature.mjs | 4 +- .../get-options-for-browsers-by-feature.mjs | 7 +-- .../src/lib/list-features.mjs | 23 +++---- .../postcss-preset-env/src/lib/stage.mjs | 9 ++- .../src/log/features-list.mjs | 13 ++-- .../postcss-preset-env/src/log/helper.mjs | 30 +++++---- .../src/test/lib/format-staged-feature.mjs | 7 +++ .../test/lib/list-features/client-side.mjs | 21 +++---- .../src/test/lib/list-features/no-options.mjs | 13 ++-- .../src/test/lib/list-features/preserve.mjs | 21 +++---- .../src/test/lib/list-features/stage-0.mjs | 13 ++-- .../list-features/vendor-implementations.mjs | 13 ++-- .../postcss-preset-env/src/test/lib/stage.mjs | 61 +++++++++---------- .../src/test/log/test-logger.mjs | 6 +- 15 files changed, 131 insertions(+), 122 deletions(-) diff --git a/plugin-packs/postcss-preset-env/src/index.js b/plugin-packs/postcss-preset-env/src/index.js index ba8c0d6f8..ded584e6f 100644 --- a/plugin-packs/postcss-preset-env/src/index.js +++ b/plugin-packs/postcss-preset-env/src/index.js @@ -2,19 +2,21 @@ import autoprefixer from 'autoprefixer'; import cssdb from 'cssdb'; import writeToExports from './side-effects/write-to-exports.mjs'; import { pluginIdHelp } from './plugins/plugin-id-help.mjs'; -import { dumpLogs, resetLogger } from './log/helper.mjs'; +import { newLogger } from './log/helper.mjs'; import logFeaturesList from './log/features-list.mjs'; import { listFeatures } from './lib/list-features.mjs'; import { initializeSharedOptions } from './lib/shared-options.mjs'; const plugin = (opts) => { + const logger = newLogger(); + // initialize options const options = Object(opts); const featureNamesInOptions = Object.keys(Object(options.features)); const browsers = options.browsers; const sharedOptions = initializeSharedOptions(options); - const features = listFeatures(cssdb, options, sharedOptions); + const features = listFeatures(cssdb, options, sharedOptions, logger); const plugins = features.map((feature) => { return feature.plugin; }); @@ -25,7 +27,7 @@ const plugin = (opts) => { ); } - logFeaturesList(features, options); + logFeaturesList(features, options, logger); const internalPlugin = () => { return { @@ -34,11 +36,11 @@ const plugin = (opts) => { pluginIdHelp(featureNamesInOptions, root, result); if (options.debug) { - dumpLogs(result); + logger.dumpLogs(result); } // Always reset the logger, if when debug is false - resetLogger(); + logger.resetLogger(); if (options.exportTo) { writeToExports(sharedOptions.exportTo, opts.exportTo); diff --git a/plugin-packs/postcss-preset-env/src/lib/format-feature.mjs b/plugin-packs/postcss-preset-env/src/lib/format-feature.mjs index a3acf5ead..8c89d8dfb 100644 --- a/plugin-packs/postcss-preset-env/src/lib/format-feature.mjs +++ b/plugin-packs/postcss-preset-env/src/lib/format-feature.mjs @@ -33,11 +33,11 @@ export function formatPolyfillableFeature(feature) { }; } -export function formatStagedFeature(cssdbList, browsers, features, feature, sharedOptions) { +export function formatStagedFeature(cssdbList, browsers, features, feature, sharedOptions, logger) { let options; let plugin; - options = getOptionsForBrowsersByFeature(browsers, feature, cssdbList); + options = getOptionsForBrowsersByFeature(browsers, feature, cssdbList, logger); if (features[feature.id] === true) { if (sharedOptions) { diff --git a/plugin-packs/postcss-preset-env/src/lib/get-options-for-browsers-by-feature.mjs b/plugin-packs/postcss-preset-env/src/lib/get-options-for-browsers-by-feature.mjs index 91a903cd3..f1db958cf 100644 --- a/plugin-packs/postcss-preset-env/src/lib/get-options-for-browsers-by-feature.mjs +++ b/plugin-packs/postcss-preset-env/src/lib/get-options-for-browsers-by-feature.mjs @@ -1,9 +1,8 @@ import browserslist from 'browserslist'; import getUnsupportedBrowsersByFeature from './get-unsupported-browsers-by-feature.mjs'; -import { log } from '../log/helper.mjs'; // add extra options for certain browsers by feature -export default function getOptionsForBrowsersByFeature(browsers, feature, cssdbList) { +export default function getOptionsForBrowsersByFeature(browsers, feature, cssdbList, logger) { const supportedBrowsers = browserslist(browsers, { ignoreUnknownVersions: true }); switch (feature.id) { @@ -21,7 +20,7 @@ export default function getOptionsForBrowsersByFeature(browsers, feature, cssdbL const feature = cssdbList.find(feature => feature.id === 'is-pseudo-class'); if (needsOptionFor(feature, supportedBrowsers)) { - log('Disabling :is on "nesting-rules" due to lack of browser support.'); + logger.log('Disabling :is on "nesting-rules" due to lack of browser support.'); return { noIsPseudoSelector: true, }; @@ -37,7 +36,7 @@ export default function getOptionsForBrowsersByFeature(browsers, feature, cssdbL }); if (hasIEOrEdge) { - log('Adding area[href] fallbacks for ":any-link" support in Edge and IE.'); + logger.log('Adding area[href] fallbacks for ":any-link" support in Edge and IE.'); return { subFeatures: { areaHrefNeedsFixing: true, diff --git a/plugin-packs/postcss-preset-env/src/lib/list-features.mjs b/plugin-packs/postcss-preset-env/src/lib/list-features.mjs index 69d7ab5bd..5fe580a76 100644 --- a/plugin-packs/postcss-preset-env/src/lib/list-features.mjs +++ b/plugin-packs/postcss-preset-env/src/lib/list-features.mjs @@ -1,6 +1,5 @@ import browserslist from 'browserslist'; import { pluginHasSideEffects } from '../side-effects/plugins.mjs'; -import { log, resetLogger } from '../log/helper.mjs'; import { featuresWithClientSide } from '../client-side-polyfills/plugins.mjs'; import { stageFromOptions } from './stage.mjs'; import { prepareFeaturesList } from './prepare-features-list.mjs'; @@ -9,7 +8,7 @@ import { clamp } from '../util/clamp.mjs'; import { intOrZero } from '../util/int-or-zero.mjs'; import { insertAfterKey, insertBeforeKey } from '../own-keys/keys.mjs'; -export function listFeatures(cssdbList, options, sharedOptions) { +export function listFeatures(cssdbList, options, sharedOptions, logger) { // initialize options const features = Object(options.features); const enableClientSidePolyfills = 'enableClientSidePolyfills' in options ? options.enableClientSidePolyfills : true; @@ -24,13 +23,11 @@ export function listFeatures(cssdbList, options, sharedOptions) { 3, // There are currently only 3 vendors that are tracked (Blink, Webkit, Gecko) ); - resetLogger(); - if (minimumVendorImplementations > 0) { - log(`Using features with ${minimumVendorImplementations} or more vendor implementations`); + logger.log(`Using features with ${minimumVendorImplementations} or more vendor implementations`); } - const stage = stageFromOptions(options); + const stage = stageFromOptions(options, logger); // TODO : remove this hack in the next major // see : https://github.com/csstools/cssdb/pull/78 @@ -65,7 +62,7 @@ export function listFeatures(cssdbList, options, sharedOptions) { return true; } - log(` ${feature.id} with ${feature.vendors_implementations} vendor implementations has been disabled`); + logger.log(` ${feature.id} with ${feature.vendors_implementations} vendor implementations has been disabled`); return false; }); @@ -78,20 +75,20 @@ export function listFeatures(cssdbList, options, sharedOptions) { const isAllowedFeature = features[feature.id] ? features[feature.id] : isAllowedStage && isAllowedByType; if (isDisabled) { - log(` ${feature.id} has been disabled by options`); + logger.log(` ${feature.id} has been disabled by options`); } else if (!isAllowedStage) { if (isAllowedFeature) { - log(` ${feature.id} has been enabled by options`); + logger.log(` ${feature.id} has been enabled by options`); } else { - log(` ${feature.id} with stage ${feature.stage} has been disabled`); + logger.log(` ${feature.id} with stage ${feature.stage} has been disabled`); } } else if (!isAllowedByType) { - log(` ${feature.id} has been disabled by "enableClientSidePolyfills: false".`); + logger.log(` ${feature.id} has been disabled by "enableClientSidePolyfills: false".`); } return isAllowedFeature; }).map((feature) => { - return formatStagedFeature(cssdbList, browsers, features, feature, sharedOptions); + return formatStagedFeature(cssdbList, browsers, features, feature, sharedOptions, logger); }); // browsers supported by the configuration @@ -119,7 +116,7 @@ export function listFeatures(cssdbList, options, sharedOptions) { }); if (!needsPolyfill) { - log(`${feature.id} disabled due to browser support`); + logger.log(`${feature.id} disabled due to browser support`); } return needsPolyfill; diff --git a/plugin-packs/postcss-preset-env/src/lib/stage.mjs b/plugin-packs/postcss-preset-env/src/lib/stage.mjs index e35faed7f..27677bc40 100644 --- a/plugin-packs/postcss-preset-env/src/lib/stage.mjs +++ b/plugin-packs/postcss-preset-env/src/lib/stage.mjs @@ -1,14 +1,13 @@ -import { log } from '../log/helper.mjs'; import { clamp } from '../util/clamp.mjs'; export const DEFAULT_STAGE = 2; export const OUT_OF_RANGE_STAGE = 5; -export function stageFromOptions(options) { +export function stageFromOptions(options, logger) { let stage = DEFAULT_STAGE; if (typeof options.stage === 'undefined') { - log(`Using features from Stage ${stage} (default)`); + logger.log(`Using features from Stage ${stage} (default)`); return stage; } @@ -24,9 +23,9 @@ export function stageFromOptions(options) { } if (stage === OUT_OF_RANGE_STAGE) { - log('Stage has been disabled, features will be handled via the "features" option.'); + logger.log('Stage has been disabled, features will be handled via the "features" option.'); } else { - log(`Using features from Stage ${stage}`); + logger.log(`Using features from Stage ${stage}`); } return stage; diff --git a/plugin-packs/postcss-preset-env/src/log/features-list.mjs b/plugin-packs/postcss-preset-env/src/log/features-list.mjs index b603d85a9..8fcf83764 100644 --- a/plugin-packs/postcss-preset-env/src/log/features-list.mjs +++ b/plugin-packs/postcss-preset-env/src/log/features-list.mjs @@ -1,16 +1,15 @@ -import { log } from './helper.mjs'; import { clientSideDocumentation } from '../client-side-polyfills/plugins.mjs'; -export default function logFeaturesList(supportedFeatures, options) { +export default function logFeaturesList(supportedFeatures, options, logger) { if (options.debug) { - log('Enabling the following feature(s):'); + logger.log('Enabling the following feature(s):'); const clientSideFeatures = []; supportedFeatures.forEach(feature => { if (feature.id.startsWith('before') || feature.id.startsWith('after')) { - log(` ${feature.id} (injected via options)`); + logger.log(` ${feature.id} (injected via options)`); } else { - log(` ${feature.id}`); + logger.log(` ${feature.id}`); } if (typeof clientSideDocumentation[feature.id] !== 'undefined') { @@ -19,8 +18,8 @@ export default function logFeaturesList(supportedFeatures, options) { }); if (clientSideFeatures.length) { - log('These feature(s) need a browser library to work:'); - clientSideFeatures.forEach(featureId => log(` ${featureId}: ${clientSideDocumentation[featureId]}`)); + logger.log('These feature(s) need a browser library to work:'); + clientSideFeatures.forEach(featureId => logger.log(` ${featureId}: ${clientSideDocumentation[featureId]}`)); } } } diff --git a/plugin-packs/postcss-preset-env/src/log/helper.mjs b/plugin-packs/postcss-preset-env/src/log/helper.mjs index 858687717..4b4465d43 100644 --- a/plugin-packs/postcss-preset-env/src/log/helper.mjs +++ b/plugin-packs/postcss-preset-env/src/log/helper.mjs @@ -1,18 +1,26 @@ -const logs = []; +class Logger { + constructor() { + this.logs = []; + } -export function log(str) { - logs.push(str); -} + log(str) { + this.logs.push(str); + } -export function resetLogger() { - logs.length = 0; -} + resetLogger() { + this.logs.length = 0; + } + + dumpLogs(result) { + if (result) { + this.logs.forEach(line => result.warn(line)); + } -export function dumpLogs(result) { - if (result) { - logs.forEach(line => result.warn(line)); + this.resetLogger(); } +} - resetLogger(); +export function newLogger() { + return new Logger(); } diff --git a/plugin-packs/postcss-preset-env/src/test/lib/format-staged-feature.mjs b/plugin-packs/postcss-preset-env/src/test/lib/format-staged-feature.mjs index b66ee22d5..e8ef84f65 100644 --- a/plugin-packs/postcss-preset-env/src/test/lib/format-staged-feature.mjs +++ b/plugin-packs/postcss-preset-env/src/test/lib/format-staged-feature.mjs @@ -1,5 +1,8 @@ import { formatStagedFeature } from '../../lib/format-feature.mjs'; import { strict as assert } from 'assert'; +import { newTestLogger } from '../log/test-logger.mjs'; + +const testLogger = newTestLogger(); assert.deepStrictEqual( formatStagedFeature( @@ -15,6 +18,7 @@ assert.deepStrictEqual( vendors_implementations: 1, }, undefined, + testLogger.logger, ), { browsers: [ @@ -43,6 +47,7 @@ assert.deepStrictEqual( vendors_implementations: 1, }, undefined, + testLogger.logger, ), { browsers: [ @@ -73,6 +78,7 @@ assert.deepStrictEqual( { shared: true, }, + testLogger.logger, ), { browsers: [ @@ -101,6 +107,7 @@ assert.deepStrictEqual( { shared: true, }, + testLogger.logger, ), { browsers: [ diff --git a/plugin-packs/postcss-preset-env/src/test/lib/list-features/client-side.mjs b/plugin-packs/postcss-preset-env/src/test/lib/list-features/client-side.mjs index f5129f0f5..9897147a7 100644 --- a/plugin-packs/postcss-preset-env/src/test/lib/list-features/client-side.mjs +++ b/plugin-packs/postcss-preset-env/src/test/lib/list-features/client-side.mjs @@ -1,14 +1,13 @@ -import { testLogger } from '../../log/test-logger.mjs'; +import { newTestLogger } from '../../log/test-logger.mjs'; import { strict as assert } from 'assert'; -import { dumpLogs, resetLogger } from '../../../log/helper.mjs'; import { listFeatures } from '../../../lib/list-features.mjs'; import { cssdb } from './cssdb-fixture.mjs'; -const logger = testLogger(); +const testLogger = newTestLogger(); -resetLogger(); +testLogger.logger.resetLogger(); assert.deepStrictEqual( - cleanResult(listFeatures(cssdb, {stage: 0, enableClientSidePolyfills: false})), + cleanResult(listFeatures(cssdb, {stage: 0, enableClientSidePolyfills: false}, undefined, testLogger.logger)), [ { browsers: [ @@ -28,9 +27,9 @@ assert.deepStrictEqual( ], ); -dumpLogs(logger); +testLogger.logger.dumpLogs(testLogger); assert.deepStrictEqual( - logger.getLogs(), + testLogger.getLogs(), [ 'Using features from Stage 0', ' blank-pseudo-class has been disabled by "enableClientSidePolyfills: false".', @@ -38,9 +37,9 @@ assert.deepStrictEqual( ], ); -resetLogger(); +testLogger.logger.resetLogger(); assert.deepStrictEqual( - cleanResult(listFeatures(cssdb, {stage: 0, enableClientSidePolyfills: true})), + cleanResult(listFeatures(cssdb, {stage: 0, enableClientSidePolyfills: true}, undefined, testLogger.logger)), [ { browsers: [ @@ -75,9 +74,9 @@ assert.deepStrictEqual( ], ); -dumpLogs(logger); +testLogger.logger.dumpLogs(testLogger); assert.deepStrictEqual( - logger.getLogs(), + testLogger.getLogs(), [ 'Using features from Stage 0', 'Adding area[href] fallbacks for ":any-link" support in Edge and IE.', diff --git a/plugin-packs/postcss-preset-env/src/test/lib/list-features/no-options.mjs b/plugin-packs/postcss-preset-env/src/test/lib/list-features/no-options.mjs index 9b2403fde..9f5b3e01e 100644 --- a/plugin-packs/postcss-preset-env/src/test/lib/list-features/no-options.mjs +++ b/plugin-packs/postcss-preset-env/src/test/lib/list-features/no-options.mjs @@ -1,14 +1,13 @@ -import { testLogger } from '../../log/test-logger.mjs'; +import { newTestLogger } from '../../log/test-logger.mjs'; import { strict as assert } from 'assert'; -import { dumpLogs, resetLogger } from '../../../log/helper.mjs'; import { listFeatures } from '../../../lib/list-features.mjs'; import { cssdb } from './cssdb-fixture.mjs'; -const logger = testLogger(); +const testLogger = newTestLogger(); -resetLogger(); +testLogger.logger.resetLogger(); assert.deepStrictEqual( - cleanResult(listFeatures(cssdb, {})), + cleanResult(listFeatures(cssdb, {}, undefined, testLogger.logger)), [ { browsers: [ @@ -28,9 +27,9 @@ assert.deepStrictEqual( ], ); -dumpLogs(logger); +testLogger.logger.dumpLogs(testLogger); assert.deepStrictEqual( - logger.getLogs(), + testLogger.getLogs(), [ 'Using features from Stage 2 (default)', ' blank-pseudo-class with stage 1 has been disabled', diff --git a/plugin-packs/postcss-preset-env/src/test/lib/list-features/preserve.mjs b/plugin-packs/postcss-preset-env/src/test/lib/list-features/preserve.mjs index 56ba978d6..a8a5ac91d 100644 --- a/plugin-packs/postcss-preset-env/src/test/lib/list-features/preserve.mjs +++ b/plugin-packs/postcss-preset-env/src/test/lib/list-features/preserve.mjs @@ -1,14 +1,13 @@ -import { testLogger } from '../../log/test-logger.mjs'; +import { newTestLogger } from '../../log/test-logger.mjs'; import { strict as assert } from 'assert'; -import { dumpLogs, resetLogger } from '../../../log/helper.mjs'; import { listFeatures } from '../../../lib/list-features.mjs'; import { cssdb } from './cssdb-fixture.mjs'; -const logger = testLogger(); +const testLogger = newTestLogger(); -resetLogger(); +testLogger.logger.resetLogger(); assert.deepStrictEqual( - cleanResult(listFeatures(cssdb, { stage: 0 }, { preserve: true })), + cleanResult(listFeatures(cssdb, { stage: 0 }, { preserve: true }, testLogger.logger)), [ { browsers: [ @@ -43,9 +42,9 @@ assert.deepStrictEqual( ], ); -dumpLogs(logger); +testLogger.logger.dumpLogs(testLogger); assert.deepStrictEqual( - logger.getLogs(), + testLogger.getLogs(), [ 'Using features from Stage 0', 'Adding area[href] fallbacks for ":any-link" support in Edge and IE.', @@ -53,9 +52,9 @@ assert.deepStrictEqual( ); -resetLogger(); +testLogger.logger.resetLogger(); assert.deepStrictEqual( - cleanResult(listFeatures(cssdb, { stage: 0 }, { preserve: false })), + cleanResult(listFeatures(cssdb, { stage: 0 }, { preserve: false }, testLogger.logger)), [ { browsers: [ @@ -90,9 +89,9 @@ assert.deepStrictEqual( ], ); -dumpLogs(logger); +testLogger.logger.dumpLogs(testLogger); assert.deepStrictEqual( - logger.getLogs(), + testLogger.getLogs(), [ 'Using features from Stage 0', 'Adding area[href] fallbacks for ":any-link" support in Edge and IE.', diff --git a/plugin-packs/postcss-preset-env/src/test/lib/list-features/stage-0.mjs b/plugin-packs/postcss-preset-env/src/test/lib/list-features/stage-0.mjs index 516a30bb5..768ce1b87 100644 --- a/plugin-packs/postcss-preset-env/src/test/lib/list-features/stage-0.mjs +++ b/plugin-packs/postcss-preset-env/src/test/lib/list-features/stage-0.mjs @@ -1,14 +1,13 @@ -import { testLogger } from '../../log/test-logger.mjs'; +import { newTestLogger } from '../../log/test-logger.mjs'; import { strict as assert } from 'assert'; -import { dumpLogs, resetLogger } from '../../../log/helper.mjs'; import { listFeatures } from '../../../lib/list-features.mjs'; import { cssdb } from './cssdb-fixture.mjs'; -const logger = testLogger(); +const testLogger = newTestLogger(); -resetLogger(); +testLogger.logger.resetLogger(); assert.deepStrictEqual( - cleanResult(listFeatures(cssdb, {stage: 0})), + cleanResult(listFeatures(cssdb, {stage: 0}, undefined, testLogger.logger)), [ { browsers: [ @@ -43,9 +42,9 @@ assert.deepStrictEqual( ], ); -dumpLogs(logger); +testLogger.logger.dumpLogs(testLogger); assert.deepStrictEqual( - logger.getLogs(), + testLogger.getLogs(), [ 'Using features from Stage 0', 'Adding area[href] fallbacks for ":any-link" support in Edge and IE.', diff --git a/plugin-packs/postcss-preset-env/src/test/lib/list-features/vendor-implementations.mjs b/plugin-packs/postcss-preset-env/src/test/lib/list-features/vendor-implementations.mjs index 415b276d5..5a856dc97 100644 --- a/plugin-packs/postcss-preset-env/src/test/lib/list-features/vendor-implementations.mjs +++ b/plugin-packs/postcss-preset-env/src/test/lib/list-features/vendor-implementations.mjs @@ -1,14 +1,13 @@ -import { testLogger } from '../../log/test-logger.mjs'; +import { newTestLogger } from '../../log/test-logger.mjs'; import { strict as assert } from 'assert'; -import { dumpLogs, resetLogger } from '../../../log/helper.mjs'; import { listFeatures } from '../../../lib/list-features.mjs'; import { cssdb } from './cssdb-fixture.mjs'; -const logger = testLogger(); +const testLogger = newTestLogger(); -resetLogger(); +testLogger.logger.resetLogger(); assert.deepStrictEqual( - cleanResult(listFeatures(cssdb, {minimumVendorImplementations: 2, stage: 0})), + cleanResult(listFeatures(cssdb, {minimumVendorImplementations: 2, stage: 0}, undefined, testLogger.logger)), [ { browsers: [ @@ -28,9 +27,9 @@ assert.deepStrictEqual( ], ); -dumpLogs(logger); +testLogger.logger.dumpLogs(testLogger); assert.deepStrictEqual( - logger.getLogs(), + testLogger.getLogs(), [ 'Using features with 2 or more vendor implementations', 'Using features from Stage 0', diff --git a/plugin-packs/postcss-preset-env/src/test/lib/stage.mjs b/plugin-packs/postcss-preset-env/src/test/lib/stage.mjs index 2ea241bee..a0f819ea7 100644 --- a/plugin-packs/postcss-preset-env/src/test/lib/stage.mjs +++ b/plugin-packs/postcss-preset-env/src/test/lib/stage.mjs @@ -1,90 +1,89 @@ -import { testLogger } from '../log/test-logger.mjs'; +import { newTestLogger } from '../log/test-logger.mjs'; import { strict as assert } from 'assert'; import { OUT_OF_RANGE_STAGE, stageFromOptions } from '../../lib/stage.mjs'; -import { dumpLogs, resetLogger } from '../../log/helper.mjs'; -const logger = testLogger(); +const testLogger = newTestLogger(); -resetLogger(); +testLogger.logger.resetLogger(); assert.deepStrictEqual( - stageFromOptions({stage: 4}), + stageFromOptions({stage: 4}, testLogger.logger), 4, ); -dumpLogs(logger); +testLogger.logger.dumpLogs(testLogger); assert.deepStrictEqual( - logger.getLogs(), + testLogger.getLogs(), ['Using features from Stage 4'], ); -resetLogger(); +testLogger.logger.resetLogger(); assert.deepStrictEqual( - stageFromOptions({stage: '4'}), + stageFromOptions({stage: '4'}, testLogger.logger), 4, ); -dumpLogs(logger); +testLogger.logger.dumpLogs(testLogger); assert.deepStrictEqual( - logger.getLogs(), + testLogger.getLogs(), ['Using features from Stage 4'], ); -resetLogger(); +testLogger.logger.resetLogger(); assert.deepStrictEqual( - stageFromOptions({stage: -1}), + stageFromOptions({stage: -1}, testLogger.logger), 0, ); -dumpLogs(logger); +testLogger.logger.dumpLogs(testLogger); assert.deepStrictEqual( - logger.getLogs(), + testLogger.getLogs(), ['Using features from Stage 0'], ); -resetLogger(); +testLogger.logger.resetLogger(); assert.deepStrictEqual( - stageFromOptions({stage: false}), + stageFromOptions({stage: false}, testLogger.logger), OUT_OF_RANGE_STAGE, ); -dumpLogs(logger); +testLogger.logger.dumpLogs(testLogger); assert.deepStrictEqual( - logger.getLogs(), + testLogger.getLogs(), ['Stage has been disabled, features will be handled via the "features" option.'], ); -resetLogger(); +testLogger.logger.resetLogger(); assert.deepStrictEqual( - stageFromOptions({stage: 'esfgdfg'}), + stageFromOptions({stage: 'esfgdfg'}, testLogger.logger), 0, ); -dumpLogs(logger); +testLogger.logger.dumpLogs(testLogger); assert.deepStrictEqual( - logger.getLogs(), + testLogger.getLogs(), ['Using features from Stage 0'], ); -resetLogger(); +testLogger.logger.resetLogger(); assert.deepStrictEqual( - stageFromOptions({}), + stageFromOptions({}, testLogger.logger), 2, ); -dumpLogs(logger); +testLogger.logger.dumpLogs(testLogger); assert.deepStrictEqual( - logger.getLogs(), + testLogger.getLogs(), ['Using features from Stage 2 (default)'], ); -resetLogger(); +testLogger.logger.resetLogger(); assert.deepStrictEqual( - stageFromOptions({stage: OUT_OF_RANGE_STAGE+2}), + stageFromOptions({stage: OUT_OF_RANGE_STAGE+2}, testLogger.logger), OUT_OF_RANGE_STAGE, ); -dumpLogs(logger); +testLogger.logger.dumpLogs(testLogger); assert.deepStrictEqual( - logger.getLogs(), + testLogger.getLogs(), ['Stage has been disabled, features will be handled via the "features" option.'], ); diff --git a/plugin-packs/postcss-preset-env/src/test/log/test-logger.mjs b/plugin-packs/postcss-preset-env/src/test/log/test-logger.mjs index 130f0d1f9..e4f9274e2 100644 --- a/plugin-packs/postcss-preset-env/src/test/log/test-logger.mjs +++ b/plugin-packs/postcss-preset-env/src/test/log/test-logger.mjs @@ -1,7 +1,11 @@ -export function testLogger() { +import { newLogger } from '../../log/helper.mjs'; + +export function newTestLogger() { let logs = []; + const logger = newLogger(); return { + logger: logger, warn: (line) => { logs.push(line); },