89 lines
2.5 KiB
JavaScript
89 lines
2.5 KiB
JavaScript
/*
|
||
* grunt
|
||
* http://gruntjs.com/
|
||
*
|
||
* Copyright (c) 2012 "Cowboy" Ben Alman
|
||
* Licensed under the MIT license.
|
||
* http://benalman.com/about/license/
|
||
*/
|
||
|
||
/*global QUnit:true, alert:true*/
|
||
|
||
'use strict';
|
||
|
||
// Don't re-order tests.
|
||
QUnit.config.reorder = false;
|
||
// Run tests serially, not in parallel.
|
||
QUnit.config.autorun = false;
|
||
|
||
// Send messages to the parent PhantomJS process via alert! Good times!!
|
||
function sendMessage() {
|
||
var args = [].slice.call(arguments);
|
||
alert(JSON.stringify(args));
|
||
}
|
||
|
||
// These methods connect QUnit to PhantomJS.
|
||
QUnit.log(function(obj) {
|
||
// What is this I don’t even
|
||
if (obj.message === '[object Object], undefined:undefined') { return; }
|
||
// Parse some stuff before sending it.
|
||
var actual = QUnit.jsDump.parse(obj.actual);
|
||
var expected = QUnit.jsDump.parse(obj.expected);
|
||
// Send it.
|
||
sendMessage('qunit.log', obj.result, actual, expected, obj.message, obj.source);
|
||
});
|
||
|
||
QUnit.testStart(function(obj) {
|
||
sendMessage('qunit.testStart', obj.name);
|
||
});
|
||
|
||
QUnit.testDone(function(obj) {
|
||
sendMessage('qunit.testDone', obj.name, obj.failed, obj.passed, obj.total);
|
||
});
|
||
|
||
QUnit.moduleStart(function(obj) {
|
||
sendMessage('qunit.moduleStart', obj.name);
|
||
});
|
||
|
||
QUnit.moduleDone(function(obj) {
|
||
sendMessage('qunit.moduleDone', obj.name, obj.failed, obj.passed, obj.total);
|
||
});
|
||
|
||
QUnit.begin(function() {
|
||
sendMessage('qunit.begin');
|
||
});
|
||
|
||
QUnit.done(function(obj) {
|
||
sendMessage('qunit.done', obj.failed, obj.passed, obj.total, obj.runtime);
|
||
});
|
||
|
||
// PhantomJS (up to and including 1.7) uses a version of webkit so old
|
||
// it does not have Function.prototype.bind:
|
||
// http://code.google.com/p/phantomjs/issues/detail?id=522
|
||
|
||
// Use moz polyfill:
|
||
// https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind#Compatibility
|
||
if (!Function.prototype.bind) {
|
||
Function.prototype.bind = function (oThis) {
|
||
if (typeof this !== "function") {
|
||
// closest thing possible to the ECMAScript 5 internal IsCallable function
|
||
throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
|
||
}
|
||
|
||
var aArgs = Array.prototype.slice.call(arguments, 1),
|
||
fToBind = this,
|
||
fNOP = function () {},
|
||
fBound = function () {
|
||
return fToBind.apply(this instanceof fNOP && oThis
|
||
? this
|
||
: oThis,
|
||
aArgs.concat(Array.prototype.slice.call(arguments)));
|
||
};
|
||
|
||
fNOP.prototype = this.prototype;
|
||
fBound.prototype = new fNOP();
|
||
|
||
return fBound;
|
||
};
|
||
}
|