87 lines
2.9 KiB
JavaScript
87 lines
2.9 KiB
JavaScript
(function(){
|
|
|
|
// A shim for non ES5 supporting browsers, like PhantomJS. Lovingly inspired by:
|
|
// http://www.angrycoding.com/2011/09/to-bind-or-not-to-bind-that-is-in.html
|
|
if (!('bind' in Function.prototype)) {
|
|
Function.prototype.bind = function() {
|
|
var funcObj = this;
|
|
var extraArgs = Array.prototype.slice.call(arguments);
|
|
var thisObj = extraArgs.shift();
|
|
return function() {
|
|
return funcObj.apply(thisObj, extraArgs.concat(Array.prototype.slice.call(arguments)));
|
|
};
|
|
};
|
|
}
|
|
|
|
// Mocha needs process.stdout.write in order to change the cursor position. However,
|
|
// PhantomJS console.log always puts a new line character when logging and no STDOUT or
|
|
// stream access is available, outside writing to /dev/stdout, etc. To work around
|
|
// this, runner classes typically override `process.stdout.write` as needed to simulate
|
|
// write to standard out using cursor commands.
|
|
process.cursor = {
|
|
count: 0,
|
|
margin: 0,
|
|
buffer: '',
|
|
CRCleanup: false,
|
|
CRMatcher: undefined,
|
|
CRCleaner: undefined,
|
|
hide: '\u001b[?25l',
|
|
show: '\u001b[?25h',
|
|
deleteLine: '\u001b[2K',
|
|
beginningOfLine: '\u001b[0G',
|
|
up: '\u001b[A',
|
|
down: '\u001b[B',
|
|
forward: '\u001b[C',
|
|
forwardN: function(n){ return '\u001b[' + n + 'C'; },
|
|
backward: '\u001b[D',
|
|
nextLine: '\u001b[E',
|
|
previousLine: '\u001b[F'
|
|
}
|
|
process.stdout.columns = 0;
|
|
process.stdout.write = function(string) { console.log(string); }
|
|
|
|
// Mocha needs the formating feature of console.log so copy node's format function and
|
|
// monkey-patch it into place. This code is copied from node's, links copyright applies.
|
|
// https://github.com/joyent/node/blob/master/lib/util.js
|
|
console.format = function(f) {
|
|
if (typeof f !== 'string') {
|
|
var objects = [];
|
|
for (var i = 0; i < arguments.length; i++) {
|
|
objects.push(JSON.stringify(arguments[i]));
|
|
}
|
|
return objects.join(' ');
|
|
}
|
|
var i = 1;
|
|
var args = arguments;
|
|
var len = args.length;
|
|
var str = String(f).replace(/%[sdj%]/g, function(x) {
|
|
if (x === '%%') return '%';
|
|
if (i >= len) return x;
|
|
switch (x) {
|
|
case '%s': return String(args[i++]);
|
|
case '%d': return Number(args[i++]);
|
|
case '%j': return JSON.stringify(args[i++]);
|
|
default:
|
|
return x;
|
|
}
|
|
});
|
|
for (var x = args[i]; i < len; x = args[++i]) {
|
|
if (x === null || typeof x !== 'object') {
|
|
str += ' ' + x;
|
|
} else {
|
|
str += ' ' + JSON.stringify(x);
|
|
}
|
|
}
|
|
return str;
|
|
};
|
|
var origError = console.error;
|
|
console.error = function(){ origError.call(console, console.format.apply(console, arguments)); };
|
|
var origLog = console.log;
|
|
console.log = function(){ origLog.call(console, console.format.apply(console, arguments)); };
|
|
|
|
})();
|
|
|
|
|
|
|
|
|