Don't use ANSI codes if stdout isn't a TTY (#2903)

Don't use ANSI codes if stdout isn't a TTY
master
Joern Bernhardt 2017-10-05 13:02:31 +02:00 committed by Lucas Azzola
parent f82fcbc98e
commit 201105334d
4 changed files with 74 additions and 4 deletions

View File

@ -274,7 +274,7 @@ function eachFilename(argv, patterns, callback) {
function formatFiles(argv) {
eachFilename(argv, argv.__filePatterns, (filename, options) => {
if (argv["write"]) {
if (argv["write"] && process.stdout.isTTY) {
// Don't use `console.log` here since we need to replace this line.
process.stdout.write(filename);
}
@ -315,9 +315,11 @@ function formatFiles(argv) {
}
if (argv["write"]) {
// Remove previously printed filename to log it with duration.
readline.clearLine(process.stdout, 0);
readline.cursorTo(process.stdout, 0, null);
if (process.stdout.isTTY) {
// Remove previously printed filename to log it with duration.
readline.clearLine(process.stdout, 0);
readline.cursorTo(process.stdout, 0, null);
}
// Don't write the file if it won't change in order not to invalidate
// mtime based caches.

View File

@ -0,0 +1,15 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`no file diffs with --list-different + formatted file 1`] = `Array []`;
exports[`no file diffs with --list-different + formatted file 2`] = `Array []`;
exports[`output with --list-different + unformatted differs when piped 1`] = `
"unformated.jsunformated.js
"
`;
exports[`output with --list-different + unformatted differs when piped 2`] = `
"unformated.js
"
`;

View File

@ -0,0 +1,50 @@
"use strict";
const runPrettier = require("../runPrettier");
test("output with --list-different + unformatted differs when piped", () => {
const result0 = runPrettier(
"cli/write",
["--write", "--list-different", "--no-color", "unformated.js"],
{ stdoutIsTTY: true }
);
const result1 = runPrettier(
"cli/write",
["--write", "--list-different", "--no-color", "unformated.js"],
{ stdoutIsTTY: false }
);
expect(result0.stdout).toMatchSnapshot();
expect(result0.status).toEqual(1);
expect(result1.stdout).toMatchSnapshot();
expect(result1.status).toEqual(1);
expect(result0.stdout).not.toEqual(result1.stdout);
expect(result0.stdout.length).toBeGreaterThan(result1.stdout.length);
expect(result0.write).toEqual(result1.write);
});
test("no file diffs with --list-different + formatted file", () => {
const result0 = runPrettier(
"cli/write",
["--write", "--list-different", "--no-color", "formated.js"],
{ stdoutIsTTY: true }
);
const result1 = runPrettier(
"cli/write",
["--write", "--list-different", "--no-color", "formated.js"],
{ stdoutIsTTY: false }
);
expect(result0.write).toMatchSnapshot();
expect(result0.status).toEqual(0);
expect(result1.write).toMatchSnapshot();
expect(result1.status).toEqual(0);
expect(result0.stdout).not.toEqual(result1.stdout);
expect(result0.stdout.length).toBeGreaterThan(result1.stdout.length);
expect(result0.write).toEqual(result1.write);
});

View File

@ -52,9 +52,11 @@ function runPrettier(dir, args, options) {
const originalArgv = process.argv;
const originalExitCode = process.exitCode;
const originalStdinIsTTY = process.stdin.isTTY;
const originalStdoutIsTTY = process.stdout.isTTY;
process.chdir(normalizeDir(dir));
process.stdin.isTTY = !!options.isTTY;
process.stdout.isTTY = !!options.stdoutIsTTY;
process.argv = ["path/to/node", "path/to/prettier/bin"].concat(args);
jest.resetModules();
@ -79,6 +81,7 @@ function runPrettier(dir, args, options) {
process.argv = originalArgv;
process.exitCode = originalExitCode;
process.stdin.isTTY = originalStdinIsTTY;
process.stdout.isTTY = originalStdoutIsTTY;
jest.restoreAllMocks();
}