Skip to content

Commit

Permalink
test(unit/runner.spec.js): Minor tweeks related to #3686 (#3704)
Browse files Browse the repository at this point in the history
* Refactored portions of tests for increased clarity.
* Updated code to run all stacktrace tests on Windows (previously skipped).
* Updated/replaced logic for generation of overlong messages used in filter tests.
  • Loading branch information
plroebuck committed Feb 1, 2019
1 parent a406503 commit d0cc3b2
Showing 1 changed file with 56 additions and 28 deletions.
84 changes: 56 additions & 28 deletions test/unit/runner.spec.js
@@ -1,12 +1,11 @@
'use strict';

var path = require('path');
var mocha = require('../../lib/mocha');
var Suite = mocha.Suite;
var Runner = mocha.Runner;
var Test = mocha.Test;
var Hook = mocha.Hook;
var path = require('path');
var fs = require('fs');
var noop = mocha.utils.noop;

describe('Runner', function() {
Expand Down Expand Up @@ -452,9 +451,29 @@ describe('Runner', function() {
'at processImmediate [as _immediateCallback] (timers.js:321:17)'
];

before(function() {
// Only for Node running on Windows
if (process.platform === 'win32') {
var addDrive = function(str) {
var drive = 'C:';
var pos = str.indexOf(path.posix.sep);
return pos !== -1 ? str.slice(0, pos) + drive + str.slice(pos) : str;
};

var useWinPathSep = function(str) {
return str.split(path.posix.sep).join(path.win32.sep);
};

// Fake Windows pathnames in stacktrace
stack = stack.map(function(line) {
return useWinPathSep(addDrive(line));
});
}
});

describe('shortStackTrace', function() {
beforeEach(function() {
if (path.sep !== '/') {
before(function() {
if (process.browser) {
this.skip();
}
});
Expand All @@ -475,12 +494,6 @@ describe('Runner', function() {
});

describe('longStackTrace', function() {
beforeEach(function() {
if (path.sep !== '/') {
this.skip();
}
});

it('should display the full stack-trace', function(done) {
var hook = new Hook();
hook.parent = suite;
Expand All @@ -499,29 +512,47 @@ describe('Runner', function() {
});

describe('hugeStackTrace', function() {
beforeEach(function() {
if (path.sep !== '/') {
before(function() {
if (process.browser) {
this.skip();
}
});

it('should not hang if the error message is ridiculously long single line', function(done) {
// Generate 64k string
function genOverlongSingleLineMessage() {
var n = 8200;
var data = [];
data.length = n;
for (var i = 0; i < n; i++) {
data[i] = {a: 1};
}
return JSON.stringify(data);
}

// Generate 64k string
function genOverlongMultiLineMessage() {
var n = 1150;
var data = [];
data.length = n;
var str = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.';
for (var i = 0; i < n; i++) {
data[i] = str;
}
return data.join('\n');
}

it('should not hang if overlong error message is single line', function(done) {
var hook = new Hook();
hook.parent = suite;
var data = [];
// mock a long message
for (var i = 0; i < 10000; i++) data[i] = {a: 1};
var message = JSON.stringify(data);
var message = genOverlongSingleLineMessage();
var err = new Error();
// Fake stack-trace
err.stack = [message].concat(stack).join('\n');

runner.on('fail', function(hook, err) {
var filteredErrStack = err.stack.split('\n').slice(1);
expect(
err.stack
.split('\n')
.slice(1)
.join('\n'),
filteredErrStack.join('\n'),
'to be',
stack.slice(0, 3).join('\n')
);
Expand All @@ -530,21 +561,18 @@ describe('Runner', function() {
runner.failHook(hook, err);
});

it('should not hang if error message is ridiculously long multiple lines either', function(done) {
it('should not hang if overlong error message is multiple lines', function(done) {
var hook = new Hook();
hook.parent = suite;
var fpath = path.join(__dirname, '../../mocha.js');
var message = fs.readFileSync(fpath, 'utf8');
var message = genOverlongMultiLineMessage();
var err = new Error();
// Fake stack-trace
err.stack = [message].concat(stack).join('\n');

runner.on('fail', function(hook, err) {
var filteredErrStack = err.stack.split('\n').slice(-3);
expect(
err.stack
.split('\n')
.slice(-3)
.join('\n'),
filteredErrStack.join('\n'),
'to be',
stack.slice(0, 3).join('\n')
);
Expand Down

0 comments on commit d0cc3b2

Please sign in to comment.