Skip to content

Commit

Permalink
Deactivate colors in CLI tests, test NO_COLOR option
Browse files Browse the repository at this point in the history
  • Loading branch information
lukastaegert committed Dec 7, 2019
1 parent 6602406 commit a96c498
Show file tree
Hide file tree
Showing 12 changed files with 897 additions and 450 deletions.
366 changes: 223 additions & 143 deletions package-lock.json

Large diffs are not rendered by default.

18 changes: 9 additions & 9 deletions package.json
Expand Up @@ -80,19 +80,19 @@
"chokidar": "^2.1.8",
"codecov": "^3.6.1",
"console-group": "^0.3.3",
"core-js": "^3.4.2",
"core-js": "^3.4.7",
"cross-os": "^1.3.0",
"date-time": "^3.1.0",
"es5-shim": "^4.5.13",
"es6-shim": "^0.35.5",
"eslint": "^6.7.1",
"eslint": "^6.7.2",
"eslint-plugin-import": "^2.18.2",
"execa": "^3.3.0",
"execa": "^3.4.0",
"fixturify": "^1.2.0",
"hash.js": "^1.1.7",
"husky": "^3.1.0",
"is-reference": "^1.1.4",
"lint-staged": "^9.4.3",
"lint-staged": "^9.5.0",
"locate-character": "^2.0.5",
"magic-string": "^0.25.4",
"markdownlint-cli": "^0.19.0",
Expand All @@ -105,12 +105,12 @@
"pretty-ms": "^5.1.0",
"require-relative": "^0.8.7",
"requirejs": "^2.3.6",
"rollup": "^1.27.4",
"rollup": "^1.27.8",
"rollup-plugin-alias": "^2.2.0",
"rollup-plugin-buble": "^0.19.8",
"rollup-plugin-commonjs": "^10.1.0",
"rollup-plugin-json": "^4.0.0",
"rollup-plugin-license": "^0.12.1",
"rollup-plugin-license": "^0.13.0",
"rollup-plugin-node-resolve": "^5.2.0",
"rollup-plugin-replace": "^2.2.0",
"rollup-plugin-string": "^3.0.0",
Expand All @@ -123,12 +123,12 @@
"source-map": "^0.6.1",
"source-map-support": "^0.5.16",
"sourcemap-codec": "^1.4.6",
"systemjs": "^6.1.5",
"terser": "^4.4.0",
"systemjs": "^6.1.7",
"terser": "^4.4.2",
"tslib": "^1.10.0",
"tslint": "^5.20.1",
"turbocolor": "^2.6.1",
"typescript": "^3.7.2",
"typescript": "^3.7.3",
"url-parse": "^1.4.7"
},
"files": [
Expand Down
151 changes: 79 additions & 72 deletions test/cli/index.js
Expand Up @@ -26,92 +26,99 @@ runTestSuiteWithSamples(
const command =
'node ' + path.resolve(__dirname, '../../dist/bin') + path.sep + config.command;

const childProcess = exec(command, { timeout: 40000 }, (err, code, stderr) => {
if (err && !err.killed) {
if (config.error) {
const shouldContinue = config.error(err);
const childProcess = exec(
command,
{ timeout: 40000, env: Object.assign({ FORCE_COLOR: '0' }, process.env, config.env) },
(err, code, stderr) => {
if (err && !err.killed) {
if (config.error) {
const shouldContinue = config.error(err);
if (!shouldContinue) return done();
} else {
throw err;
}
}

if ('stderr' in config) {
const shouldContinue = config.stderr(stderr.trim());
if (!shouldContinue) return done();
} else {
throw err;
} else if (stderr) {
console.error(stderr);
}
}

if ('stderr' in config) {
const shouldContinue = config.stderr(stderr.trim());
if (!shouldContinue) return done();
} else if (stderr) {
console.error(stderr);
}
let unintendedError;

let unintendedError;
if (config.execute) {
try {
if (config.buble) {
code = buble.transform(code, {
transforms: { modules: false }
}).code;
}

if (config.execute) {
try {
if (config.buble) {
code = buble.transform(code, {
transforms: { modules: false }
}).code;
}
const fn = new Function('require', 'module', 'exports', 'assert', code);
const module = {
exports: {}
};
fn(require, module, module.exports, assert);

const fn = new Function('require', 'module', 'exports', 'assert', code);
const module = {
exports: {}
};
fn(require, module, module.exports, assert);
if (config.error) {
unintendedError = new Error('Expected an error while executing output');
}

if (config.error) {
unintendedError = new Error('Expected an error while executing output');
if (config.exports) {
config.exports(module.exports);
}
} catch (err) {
if (config.error) {
config.error(err);
} else {
unintendedError = err;
}
}

if (config.exports) {
config.exports(module.exports);
}
} catch (err) {
if (config.error) {
config.error(err);
} else {
unintendedError = err;
if (config.show || unintendedError) {
console.log(code + '\n\n\n');
}
}

if (config.show || unintendedError) {
console.log(code + '\n\n\n');
}

if (config.solo) console.groupEnd();
if (config.solo) console.groupEnd();

unintendedError ? done(unintendedError) : done();
} else if (config.result) {
try {
config.result(code);
done();
} catch (err) {
done(err);
}
} else if (config.test) {
try {
config.test();
done();
} catch (err) {
done(err);
}
} else if (sander.existsSync('_expected') && sander.statSync('_expected').isDirectory()) {
try {
assertDirectoriesAreEqual('_actual', '_expected');
done();
} catch (err) {
done(err);
}
} else {
const expected = sander.readFileSync('_expected.js').toString();
try {
assert.equal(normaliseOutput(code), normaliseOutput(expected));
done();
} catch (err) {
done(err);
unintendedError ? done(unintendedError) : done();
} else if (config.result) {
try {
config.result(code);
done();
} catch (err) {
done(err);
}
} else if (config.test) {
try {
config.test();
done();
} catch (err) {
done(err);
}
} else if (
sander.existsSync('_expected') &&
sander.statSync('_expected').isDirectory()
) {
try {
assertDirectoriesAreEqual('_actual', '_expected');
done();
} catch (err) {
done(err);
}
} else {
const expected = sander.readFileSync('_expected.js').toString();
try {
assert.equal(normaliseOutput(code), normaliseOutput(expected));
done();
} catch (err) {
done(err);
}
}
}
});
);

childProcess.stderr.on('data', data => {
if (config.abortOnStderr && config.abortOnStderr(data)) {
Expand Down
15 changes: 3 additions & 12 deletions test/cli/samples/code-splitting-named-default-inputs/_config.js
@@ -1,29 +1,20 @@
const assert = require('assert');

const COLOR = '\u001b[36m\u001b[1m';
const STANDARD = '\u001b[22m\u001b[39m';

module.exports = {
description: 'allows defining names via CLI',
command:
'rollup entry1=main1.js "Entry 2"="main 2.js" "main3.js" --entryFileNames [name]-[hash].js -f es',
result(code) {
let color = '';
let standard = '';
if (code[1] === '\u001b') {
color = COLOR;
standard = STANDARD;
}
assert.equal(
code,
'\n' +
`${color}//→ entry1-b70571c1.js:${standard}\n` +
`//→ entry1-b70571c1.js:\n` +
"console.log('main1');\n" +
'\n' +
`${color}//→ Entry 2-cc781491.js:${standard}\n` +
`//→ Entry 2-cc781491.js:\n` +
"console.log('main2');\n" +
'\n' +
`${color}//→ main3-5e259623.js:${standard}\n` +
`//→ main3-5e259623.js:\n` +
"console.log('main3');\n"
);
}
Expand Down
15 changes: 3 additions & 12 deletions test/cli/samples/code-splitting-named-inputs/_config.js
@@ -1,29 +1,20 @@
const assert = require('assert');

const COLOR = '\u001b[36m\u001b[1m';
const STANDARD = '\u001b[22m\u001b[39m';

module.exports = {
description: 'allows defining names via CLI',
command:
'rollup --entryFileNames [name]-[hash].js --input entry1=main1.js -i "Entry 2"="main 2.js" -i "main3.js" -f es',
result(code) {
let color = '';
let standard = '';
if (code[1] === '\u001b') {
color = COLOR;
standard = STANDARD;
}
assert.equal(
code,
'\n' +
`${color}//→ entry1-b70571c1.js:${standard}\n` +
`//→ entry1-b70571c1.js:\n` +
"console.log('main1');\n" +
'\n' +
`${color}//→ Entry 2-cc781491.js:${standard}\n` +
`//→ Entry 2-cc781491.js:\n` +
"console.log('main2');\n" +
'\n' +
`${color}//→ main3-5e259623.js:${standard}\n` +
`//→ main3-5e259623.js:\n` +
"console.log('main3');\n"
);
}
Expand Down
18 changes: 18 additions & 0 deletions test/cli/samples/no-color/_config.js
@@ -0,0 +1,18 @@
const assert = require('assert');

module.exports = {
description: 'respects the NO_COLOR environment variable',
command: 'rollup -i main1.js -i main2.js -f es',
env: { FORCE_COLOR: undefined, NO_COLOR: true },
result(code) {
assert.equal(
code,
'\n' +
'//→ main1.js:\n' +
"console.log('main1');\n" +
'\n' +
'//→ main2.js:\n' +
"console.log('main2');\n"
);
}
};
1 change: 1 addition & 0 deletions test/cli/samples/no-color/main1.js
@@ -0,0 +1 @@
console.log('main1');
1 change: 1 addition & 0 deletions test/cli/samples/no-color/main2.js
@@ -0,0 +1 @@
console.log('main2');
11 changes: 3 additions & 8 deletions test/cli/samples/stdout-code-splitting/_config.js
Expand Up @@ -6,20 +6,15 @@ const STANDARD = '\u001b[22m\u001b[39m';
module.exports = {
description: 'bundles multiple files to stdout while adding file names',
command: 'rollup -i main1.js -i main2.js -f es',
env: { FORCE_COLOR: '1' },
result(code) {
let color = '';
let standard = '';
if (code[1] === '\u001b') {
color = COLOR;
standard = STANDARD;
}
assert.equal(
code,
'\n' +
`${color}//→ main1.js:${standard}\n` +
`${COLOR}//→ main1.js:${STANDARD}\n` +
"console.log('main1');\n" +
'\n' +
`${color}//→ main2.js:${standard}\n` +
`${COLOR}//→ main2.js:${STANDARD}\n` +
"console.log('main2');" +
'\n'
);
Expand Down
5 changes: 3 additions & 2 deletions test/cli/samples/warn-circular/_config.js
Expand Up @@ -3,6 +3,7 @@ const { assertStderrIncludes } = require('../../../utils.js');
module.exports = {
description: 'warns for circular dependencies',
command: 'rollup -c',
stderr: stderr =>
assertStderrIncludes(stderr, '(!) Circular dependency\n' + 'main.js -> dep.js -> main.js\n')
stderr(stderr) {
assertStderrIncludes(stderr, '(!) Circular dependency\nmain.js -> dep.js -> main.js\n');
}
};

0 comments on commit a96c498

Please sign in to comment.