Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support util.inspect.custom with fixing #3985 #4085

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
7 changes: 5 additions & 2 deletions lib/reporters/base.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
var tty = require('tty');
var diff = require('diff');
var milliseconds = require('ms');
var util = require('util');
var utils = require('../utils');
var supportsColor = process.browser ? null : require('supports-color');
var constants = require('../runner').constants;
Expand Down Expand Up @@ -219,10 +220,12 @@ exports.list = function(failures) {
err = test.err;
}
var message;
if (err.message && typeof err.message.toString === 'function') {
message = err.message + '';
if (typeof err[util.inspect.custom] === 'function') {
message = util.inspect(err) + '';
} else if (typeof err.inspect === 'function') {
message = err.inspect() + '';
} else if (err.message && typeof err.message.toString === 'function') {
message = err.message + '';
} else {
message = '';
}
Expand Down
33 changes: 31 additions & 2 deletions test/reporters/base.spec.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use strict';

var util = require('util');
var assert = require('assert');
var chai = require('chai');
var sinon = require('sinon');
Expand Down Expand Up @@ -376,7 +377,22 @@ describe('Base reporter', function() {
expect(errOut, 'to be', '1) test title:\n Error\n foo\n bar');
});

it("should use 'inspect' if 'message' is not set", function() {
it("should use 'util.inspect.custom()' first when generating an error message", function() {
var err = {
showDiff: false
};
err[util.inspect.custom] = function() {
return 'Error: catch me if you can';
};
var test = makeTest(err);

list([test]);

var errOut = stdout.join('\n').trim();
expect(errOut, 'to be', '1) test title:\n Error: catch me if you can');
});

it("should use 'inspect()' if 'util.inspect.custom()' is not set", function() {
var err = {
showDiff: false,
inspect: function() {
Expand All @@ -391,7 +407,20 @@ describe('Base reporter', function() {
expect(errOut, 'to be', '1) test title:\n an error happened');
});

it("should set an empty message if neither 'message' nor 'inspect' is set", function() {
it("should use message if neither 'util.inspect.custom()', nor 'inspect()' is set", function() {
var err = {
showDiff: false,
message: 'foo\nbar'
};
var test = makeTest(err);

list([test]);

var errOut = stdout.join('\n').trim();
expect(errOut, 'to be', '1) test title:\n foo\nbar');
});

it("should set an empty message if neither 'util.inspect.custom()', nor 'inspect()', nor message is set", function() {
var err = {
showDiff: false
};
Expand Down