Add compiled version of mocha-phantomjs.js
This commit is contained in:
@@ -0,0 +1,468 @@
|
|||||||
|
// Generated by CoffeeScript 1.6.3
|
||||||
|
(function() {
|
||||||
|
var Doc, Dot, HtmlCov, Json, JsonCov, List, Min, Reporter, Spec, Tap, Teamcity, USAGE, Xunit, config, error, reporter, reporterKlass, reporterString, s, system, webpage,
|
||||||
|
__bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
|
||||||
|
__hasProp = {}.hasOwnProperty,
|
||||||
|
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
|
||||||
|
|
||||||
|
system = require('system');
|
||||||
|
|
||||||
|
webpage = require('webpage');
|
||||||
|
|
||||||
|
USAGE = "Usage: phantomjs mocha-phantomjs.coffee URL REPORTER [CONFIG]";
|
||||||
|
|
||||||
|
Reporter = (function() {
|
||||||
|
function Reporter(reporter, config) {
|
||||||
|
this.reporter = reporter;
|
||||||
|
this.config = config;
|
||||||
|
this.checkStarted = __bind(this.checkStarted, this);
|
||||||
|
this.waitForRunMocha = __bind(this.waitForRunMocha, this);
|
||||||
|
this.waitForInitMocha = __bind(this.waitForInitMocha, this);
|
||||||
|
this.waitForMocha = __bind(this.waitForMocha, this);
|
||||||
|
this.url = system.args[1];
|
||||||
|
this.columns = parseInt(system.env.COLUMNS || 75) * .75 | 0;
|
||||||
|
this.mochaStarted = false;
|
||||||
|
this.mochaStartWait = this.config.timeout || 6000;
|
||||||
|
this.startTime = Date.now();
|
||||||
|
if (!this.url) {
|
||||||
|
this.fail(USAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Reporter.prototype.run = function() {
|
||||||
|
this.initPage();
|
||||||
|
return this.loadPage();
|
||||||
|
};
|
||||||
|
|
||||||
|
Reporter.prototype.customizeRunner = function(options) {
|
||||||
|
return void 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
Reporter.prototype.customizeProcessStdout = function(options) {
|
||||||
|
return void 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
Reporter.prototype.customizeConsole = function(options) {
|
||||||
|
return void 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
Reporter.prototype.customizeOptions = function() {
|
||||||
|
return {
|
||||||
|
columns: this.columns
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
Reporter.prototype.fail = function(msg, errno) {
|
||||||
|
if (msg) {
|
||||||
|
console.log(msg);
|
||||||
|
}
|
||||||
|
return phantom.exit(errno || 1);
|
||||||
|
};
|
||||||
|
|
||||||
|
Reporter.prototype.finish = function() {
|
||||||
|
return phantom.exit(this.page.evaluate(function() {
|
||||||
|
return mochaPhantomJS.failures;
|
||||||
|
}));
|
||||||
|
};
|
||||||
|
|
||||||
|
Reporter.prototype.initPage = function() {
|
||||||
|
var name, value, _ref,
|
||||||
|
_this = this;
|
||||||
|
this.page = webpage.create({
|
||||||
|
settings: this.config.settings
|
||||||
|
});
|
||||||
|
if (this.config.headers) {
|
||||||
|
this.page.customHeaders = this.config.headers;
|
||||||
|
}
|
||||||
|
_ref = this.config.cookies;
|
||||||
|
for (name in _ref) {
|
||||||
|
value = _ref[name];
|
||||||
|
this.page.addCookie({
|
||||||
|
name: name,
|
||||||
|
value: value
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (this.config.viewportSize) {
|
||||||
|
this.page.viewportSize = this.config.viewportSize;
|
||||||
|
}
|
||||||
|
this.page.onConsoleMessage = function(msg) {
|
||||||
|
return console.log(msg);
|
||||||
|
};
|
||||||
|
return this.page.onInitialized = function() {
|
||||||
|
return _this.page.evaluate(function() {
|
||||||
|
return window.mochaPhantomJS = {
|
||||||
|
failures: 0,
|
||||||
|
ended: false,
|
||||||
|
started: false,
|
||||||
|
run: function() {
|
||||||
|
mochaPhantomJS.started = true;
|
||||||
|
return window.callPhantom('mochaPhantomJS.run');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
Reporter.prototype.loadPage = function() {
|
||||||
|
var _this = this;
|
||||||
|
this.page.open(this.url);
|
||||||
|
this.page.onLoadFinished = function(status) {
|
||||||
|
_this.page.onLoadFinished = function() {};
|
||||||
|
if (status !== 'success') {
|
||||||
|
_this.onLoadFailed();
|
||||||
|
}
|
||||||
|
return _this.waitForInitMocha();
|
||||||
|
};
|
||||||
|
return this.page.onCallback = function(data) {
|
||||||
|
if (data === 'mochaPhantomJS.run') {
|
||||||
|
if (_this.injectJS()) {
|
||||||
|
return _this.waitForRunMocha();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
Reporter.prototype.onLoadFailed = function() {
|
||||||
|
return this.fail("Failed to load the page. Check the url: " + this.url);
|
||||||
|
};
|
||||||
|
|
||||||
|
Reporter.prototype.injectJS = function() {
|
||||||
|
if (this.page.evaluate(function() {
|
||||||
|
return window.mocha != null;
|
||||||
|
})) {
|
||||||
|
this.page.injectJs('mocha-phantomjs/core_extensions.js');
|
||||||
|
this.page.evaluate(this.customizeProcessStdout, this.customizeOptions());
|
||||||
|
this.page.evaluate(this.customizeConsole, this.customizeOptions());
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
this.fail("Failed to find mocha on the page.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Reporter.prototype.runMocha = function() {
|
||||||
|
if (this.config.useColors === false) {
|
||||||
|
this.page.evaluate(function() {
|
||||||
|
return Mocha.reporters.Base.useColors = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this.page.evaluate(this.runner, this.reporter);
|
||||||
|
this.mochaStarted = this.page.evaluate(function() {
|
||||||
|
return mochaPhantomJS.runner || false;
|
||||||
|
});
|
||||||
|
if (this.mochaStarted) {
|
||||||
|
this.mochaRunAt = new Date().getTime();
|
||||||
|
this.page.evaluate(this.customizeRunner, this.customizeOptions());
|
||||||
|
return this.waitForMocha();
|
||||||
|
} else {
|
||||||
|
return this.fail("Failed to start mocha.");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Reporter.prototype.waitForMocha = function() {
|
||||||
|
var ended;
|
||||||
|
ended = this.page.evaluate(function() {
|
||||||
|
return mochaPhantomJS.ended;
|
||||||
|
});
|
||||||
|
if (ended) {
|
||||||
|
return this.finish();
|
||||||
|
} else {
|
||||||
|
return setTimeout(this.waitForMocha, 100);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Reporter.prototype.waitForInitMocha = function() {
|
||||||
|
if (!this.checkStarted()) {
|
||||||
|
return setTimeout(this.waitForInitMocha, 100);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Reporter.prototype.waitForRunMocha = function() {
|
||||||
|
if (this.checkStarted()) {
|
||||||
|
return this.runMocha();
|
||||||
|
} else {
|
||||||
|
return setTimeout(this.waitForRunMocha, 100);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Reporter.prototype.checkStarted = function() {
|
||||||
|
var started;
|
||||||
|
started = this.page.evaluate(function() {
|
||||||
|
return mochaPhantomJS.started;
|
||||||
|
});
|
||||||
|
if (!started && this.mochaStartWait && this.startTime + this.mochaStartWait < Date.now()) {
|
||||||
|
this.fail("Failed to start mocha: Init timeout", 255);
|
||||||
|
}
|
||||||
|
return started;
|
||||||
|
};
|
||||||
|
|
||||||
|
Reporter.prototype.runner = function(reporter) {
|
||||||
|
var cleanup, error, _ref, _ref1;
|
||||||
|
try {
|
||||||
|
mocha.setup({
|
||||||
|
reporter: reporter
|
||||||
|
});
|
||||||
|
mochaPhantomJS.runner = mocha.run();
|
||||||
|
if (mochaPhantomJS.runner) {
|
||||||
|
cleanup = function() {
|
||||||
|
mochaPhantomJS.failures = mochaPhantomJS.runner.failures;
|
||||||
|
return mochaPhantomJS.ended = true;
|
||||||
|
};
|
||||||
|
if ((_ref = mochaPhantomJS.runner) != null ? (_ref1 = _ref.stats) != null ? _ref1.end : void 0 : void 0) {
|
||||||
|
return cleanup();
|
||||||
|
} else {
|
||||||
|
return mochaPhantomJS.runner.on('end', cleanup);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (_error) {
|
||||||
|
error = _error;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return Reporter;
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
|
Spec = (function(_super) {
|
||||||
|
__extends(Spec, _super);
|
||||||
|
|
||||||
|
function Spec(config) {
|
||||||
|
Spec.__super__.constructor.call(this, 'spec', config);
|
||||||
|
}
|
||||||
|
|
||||||
|
Spec.prototype.customizeProcessStdout = function(options) {
|
||||||
|
return process.stdout.write = function(string) {
|
||||||
|
if (string === process.cursor.deleteLine || string === process.cursor.beginningOfLine) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return console.log(string);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
Spec.prototype.customizeConsole = function(options) {
|
||||||
|
var origLog;
|
||||||
|
process.cursor.CRMatcher = /\s+◦\s\S/;
|
||||||
|
process.cursor.CRCleaner = process.cursor.up + process.cursor.deleteLine;
|
||||||
|
origLog = console.log;
|
||||||
|
return console.log = function() {
|
||||||
|
var string;
|
||||||
|
string = console.format.apply(console, arguments);
|
||||||
|
if (string.match(process.cursor.CRMatcher)) {
|
||||||
|
process.cursor.CRCleanup = true;
|
||||||
|
} else if (process.cursor.CRCleanup) {
|
||||||
|
string = process.cursor.CRCleaner + string;
|
||||||
|
process.cursor.CRCleanup = false;
|
||||||
|
}
|
||||||
|
return origLog.call(console, string);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
return Spec;
|
||||||
|
|
||||||
|
})(Reporter);
|
||||||
|
|
||||||
|
Dot = (function(_super) {
|
||||||
|
__extends(Dot, _super);
|
||||||
|
|
||||||
|
function Dot(config) {
|
||||||
|
Dot.__super__.constructor.call(this, 'dot', config);
|
||||||
|
}
|
||||||
|
|
||||||
|
Dot.prototype.customizeProcessStdout = function(options) {
|
||||||
|
process.cursor.margin = 2;
|
||||||
|
process.cursor.CRMatcher = /\u001b\[\d\dm\․\u001b\[0m/;
|
||||||
|
process.stdout.columns = options.columns;
|
||||||
|
process.stdout.allowedFirstNewLine = false;
|
||||||
|
return process.stdout.write = function(string) {
|
||||||
|
var forward;
|
||||||
|
if (string === '\n ') {
|
||||||
|
if (!process.stdout.allowedFirstNewLine) {
|
||||||
|
process.stdout.allowedFirstNewLine = true;
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else if (string.match(process.cursor.CRMatcher)) {
|
||||||
|
if (process.cursor.count === process.stdout.columns) {
|
||||||
|
process.cursor.count = 0;
|
||||||
|
forward = process.cursor.margin;
|
||||||
|
string = process.cursor.forwardN(forward) + string;
|
||||||
|
} else {
|
||||||
|
forward = process.cursor.margin + process.cursor.count;
|
||||||
|
string = process.cursor.up + process.cursor.forwardN(forward) + string;
|
||||||
|
}
|
||||||
|
++process.cursor.count;
|
||||||
|
}
|
||||||
|
return console.log(string);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
return Dot;
|
||||||
|
|
||||||
|
})(Reporter);
|
||||||
|
|
||||||
|
Tap = (function(_super) {
|
||||||
|
__extends(Tap, _super);
|
||||||
|
|
||||||
|
function Tap(config) {
|
||||||
|
Tap.__super__.constructor.call(this, 'tap', config);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Tap;
|
||||||
|
|
||||||
|
})(Reporter);
|
||||||
|
|
||||||
|
List = (function(_super) {
|
||||||
|
__extends(List, _super);
|
||||||
|
|
||||||
|
function List(config) {
|
||||||
|
List.__super__.constructor.call(this, 'list', config);
|
||||||
|
}
|
||||||
|
|
||||||
|
List.prototype.customizeProcessStdout = function(options) {
|
||||||
|
return process.stdout.write = function(string) {
|
||||||
|
if (string === process.cursor.deleteLine || string === process.cursor.beginningOfLine) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return console.log(string);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
List.prototype.customizeProcessStdout = function(options) {
|
||||||
|
var origLog;
|
||||||
|
process.cursor.CRMatcher = /\u001b\[90m.*:\s\u001b\[0m/;
|
||||||
|
process.cursor.CRCleaner = function(string) {
|
||||||
|
return process.cursor.up + process.cursor.deleteLine + string + process.cursor.up + process.cursor.up;
|
||||||
|
};
|
||||||
|
origLog = console.log;
|
||||||
|
return console.log = function() {
|
||||||
|
var string;
|
||||||
|
string = console.format.apply(console, arguments);
|
||||||
|
if (string.match(/\u001b\[32m\s\s-\u001b\[0m/)) {
|
||||||
|
string = string;
|
||||||
|
process.cursor.CRCleanup = false;
|
||||||
|
}
|
||||||
|
if (string.match(process.cursor.CRMatcher)) {
|
||||||
|
process.cursor.CRCleanup = true;
|
||||||
|
} else if (process.cursor.CRCleanup) {
|
||||||
|
string = process.cursor.CRCleaner(string);
|
||||||
|
process.cursor.CRCleanup = false;
|
||||||
|
}
|
||||||
|
return origLog.call(console, string);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
return List;
|
||||||
|
|
||||||
|
})(Reporter);
|
||||||
|
|
||||||
|
Min = (function(_super) {
|
||||||
|
__extends(Min, _super);
|
||||||
|
|
||||||
|
function Min(config) {
|
||||||
|
Min.__super__.constructor.call(this, 'min', config);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Min;
|
||||||
|
|
||||||
|
})(Reporter);
|
||||||
|
|
||||||
|
Doc = (function(_super) {
|
||||||
|
__extends(Doc, _super);
|
||||||
|
|
||||||
|
function Doc(config) {
|
||||||
|
Doc.__super__.constructor.call(this, 'doc', config);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Doc;
|
||||||
|
|
||||||
|
})(Reporter);
|
||||||
|
|
||||||
|
Teamcity = (function(_super) {
|
||||||
|
__extends(Teamcity, _super);
|
||||||
|
|
||||||
|
function Teamcity(config) {
|
||||||
|
Teamcity.__super__.constructor.call(this, 'teamcity', config);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Teamcity;
|
||||||
|
|
||||||
|
})(Reporter);
|
||||||
|
|
||||||
|
Xunit = (function(_super) {
|
||||||
|
__extends(Xunit, _super);
|
||||||
|
|
||||||
|
function Xunit(config) {
|
||||||
|
Xunit.__super__.constructor.call(this, 'xunit', config);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Xunit;
|
||||||
|
|
||||||
|
})(Reporter);
|
||||||
|
|
||||||
|
Json = (function(_super) {
|
||||||
|
__extends(Json, _super);
|
||||||
|
|
||||||
|
function Json(config) {
|
||||||
|
Json.__super__.constructor.call(this, 'json', config);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Json;
|
||||||
|
|
||||||
|
})(Reporter);
|
||||||
|
|
||||||
|
JsonCov = (function(_super) {
|
||||||
|
__extends(JsonCov, _super);
|
||||||
|
|
||||||
|
function JsonCov(config) {
|
||||||
|
JsonCov.__super__.constructor.call(this, 'json-cov', config);
|
||||||
|
}
|
||||||
|
|
||||||
|
return JsonCov;
|
||||||
|
|
||||||
|
})(Reporter);
|
||||||
|
|
||||||
|
HtmlCov = (function(_super) {
|
||||||
|
__extends(HtmlCov, _super);
|
||||||
|
|
||||||
|
function HtmlCov(config) {
|
||||||
|
HtmlCov.__super__.constructor.call(this, 'html-cov', config);
|
||||||
|
}
|
||||||
|
|
||||||
|
return HtmlCov;
|
||||||
|
|
||||||
|
})(Reporter);
|
||||||
|
|
||||||
|
reporterString = system.args[2] || 'spec';
|
||||||
|
|
||||||
|
reporterString = ((function() {
|
||||||
|
var _i, _len, _ref, _results;
|
||||||
|
_ref = reporterString.split('-');
|
||||||
|
_results = [];
|
||||||
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||||
|
s = _ref[_i];
|
||||||
|
_results.push("" + (s.charAt(0).toUpperCase()) + (s.slice(1)));
|
||||||
|
}
|
||||||
|
return _results;
|
||||||
|
})()).join('');
|
||||||
|
|
||||||
|
reporterKlass = (function() {
|
||||||
|
try {
|
||||||
|
return eval(reporterString);
|
||||||
|
} catch (_error) {
|
||||||
|
error = _error;
|
||||||
|
return void 0;
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
|
config = JSON.parse(system.args[3] || '{}');
|
||||||
|
|
||||||
|
if (reporterKlass) {
|
||||||
|
reporter = new reporterKlass(config);
|
||||||
|
reporter.run();
|
||||||
|
} else {
|
||||||
|
console.log("Reporter class not implemented: " + reporterString);
|
||||||
|
phantom.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
}).call(this);
|
||||||
Reference in New Issue
Block a user