Replaced jasmine testing framework by mocha, expect.js and sinon
as discussed in #319
This commit is contained in:
86
test/mocha-phantomjs/core_extensions.js
Normal file
86
test/mocha-phantomjs/core_extensions.js
Normal file
@@ -0,0 +1,86 @@
|
||||
(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)); };
|
||||
|
||||
})();
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user