if (parseInt(env.NODE_NO_READLINE)) {
opts.terminal = false;
}
- if (parseInt(env.NODE_DISABLE_COLORS)) {
+ // the "dumb" special terminal, as defined by terminfo, doesn't support
+ // ANSI colour control codes.
+ // see http://invisible-island.net/ncurses/terminfo.ti.html#toc-_Specials
+ if (parseInt(env.NODE_DISABLE_COLORS) || env.TERM === 'dumb') {
opts.useColors = false;
}
--- /dev/null
+'use strict';
+
+// Flags: --expose-internals
+
+const common = require('../common');
+const stream = require('stream');
+const REPL = require('internal/repl');
+const assert = require('assert');
+const inspect = require('util').inspect;
+
+const tests = [{
+ env: {},
+ expected: { terminal: true, useColors: true }
+},
+{
+ env: { NODE_DISABLE_COLORS: '1' },
+ expected: { terminal: true, useColors: false }
+},
+{
+ env: { NODE_NO_READLINE: '1' },
+ expected: { terminal: false, useColors: false }
+},
+{
+ env: { TERM: 'dumb' },
+ expected: { terminal: true, useColors: false }
+},
+{
+ env: { NODE_NO_READLINE: '1', NODE_DISABLE_COLORS: '1' },
+ expected: { terminal: false, useColors: false }
+},
+{
+ env: { NODE_NO_READLINE: '0' },
+ expected: { terminal: true, useColors: true }
+}];
+
+function run(test) {
+ const env = test.env;
+ const expected = test.expected;
+ const opts = {
+ terminal: true,
+ input: new stream.Readable({ read() {} }),
+ output: new stream.Writable({ write() {} })
+ };
+
+ REPL.createInternalRepl(env, opts, function(err, repl) {
+ if (err) throw err;
+ assert.equal(expected.terminal, repl.terminal,
+ 'Expected ' + inspect(expected) + ' with ' + inspect(env));
+ assert.equal(expected.useColors, repl.useColors,
+ 'Expected ' + inspect(expected) + ' with ' + inspect(env));
+ repl.close();
+ });
+}
+
+tests.forEach(run);