207 lines
4.9 KiB
JavaScript
207 lines
4.9 KiB
JavaScript
var util = require('util');
|
|
var events = require('events');
|
|
var Q = require('q');
|
|
var Nightwatch = require('../index.js');
|
|
|
|
function ClientManager() {
|
|
events.EventEmitter.call(this);
|
|
this.setMaxListeners(0);
|
|
}
|
|
|
|
util.inherits(ClientManager, events.EventEmitter);
|
|
|
|
ClientManager.prototype.init = function(opts) {
|
|
try {
|
|
this['@client'] = Nightwatch.client(opts);
|
|
} catch (err) {
|
|
console.log(err.stack);
|
|
this.emit('error', err, false);
|
|
return;
|
|
}
|
|
|
|
var self = this;
|
|
this.options = opts;
|
|
|
|
this['@client'].once('selenium:session_create', function() {
|
|
var capabilities = this.api.capabilities || {};
|
|
var browserName = (capabilities.browserName && capabilities.browserName.toUpperCase()) || '';
|
|
|
|
self.options.report_prefix = browserName + '_' + this.api.capabilities.version + '_' + this.api.capabilities.platform + '_';
|
|
});
|
|
return this;
|
|
};
|
|
|
|
ClientManager.prototype.start = function(done) {
|
|
var self = this;
|
|
|
|
this.resetTerminated();
|
|
|
|
this['@client'].once('nightwatch:finished', function(results, errors) {
|
|
self.emit('complete', results, errors);
|
|
if (done) {
|
|
if (results.failed > 0 || results.errors > 0) {
|
|
done(results.lastError);
|
|
results.lastError = null;
|
|
} else {
|
|
done();
|
|
}
|
|
}
|
|
});
|
|
|
|
this['@client'].once('error', function(error, data) {
|
|
var result = {
|
|
message: 'Connection refused! Is selenium server started?\n',
|
|
data : error || data
|
|
};
|
|
|
|
self.emit('error', result, false);
|
|
});
|
|
|
|
this['@client'].start();
|
|
|
|
return this;
|
|
};
|
|
|
|
ClientManager.prototype.get = function() {
|
|
return this['@client'];
|
|
};
|
|
|
|
ClientManager.prototype.set = function(prop, value) {
|
|
this['@client'][prop] = value;
|
|
return this;
|
|
};
|
|
|
|
ClientManager.prototype.publishTestResults = function(testcase, results) {
|
|
if (!this['@client'].api.currentTest) {
|
|
return this;
|
|
}
|
|
|
|
results = results || {};
|
|
|
|
var currentTestSuite = this['@client'].api.currentTest.results;
|
|
|
|
currentTestSuite.passed += results.passed;
|
|
currentTestSuite.failed += results.failed;
|
|
currentTestSuite.errors += results.errors;
|
|
currentTestSuite.skipped += results.skipped;
|
|
currentTestSuite.tests += results.tests.length;
|
|
|
|
currentTestSuite.testcases = currentTestSuite.testcases || {};
|
|
currentTestSuite.testcases[testcase] = {
|
|
passed : results.passed,
|
|
failed : results.failed,
|
|
errors : results.errors,
|
|
skipped : results.skipped,
|
|
tests : results.tests.length,
|
|
assertions : results.tests,
|
|
stackTrace : results.stackTrace
|
|
};
|
|
|
|
return this;
|
|
};
|
|
|
|
ClientManager.prototype.results = function(type, value) {
|
|
if (typeof value == 'undefined' && typeof type == 'undefined') {
|
|
return this['@client'].results;
|
|
}
|
|
|
|
if (typeof value == 'undefined') {
|
|
return this['@client'].results[type] || 0;
|
|
}
|
|
this['@client'].results[type] = value;
|
|
return this;
|
|
};
|
|
|
|
ClientManager.prototype.errors = function() {
|
|
return this['@client'].errors;
|
|
};
|
|
|
|
ClientManager.prototype.handleException = function(err) {
|
|
return this['@client'].handleException(err);
|
|
};
|
|
|
|
ClientManager.prototype.clearGlobalResult = function() {
|
|
return this['@client'].clearResult();
|
|
};
|
|
|
|
ClientManager.prototype.terminated = function() {
|
|
return this['@client'].terminated;
|
|
};
|
|
|
|
ClientManager.prototype.terminate = function() {
|
|
this['@client'].terminate();
|
|
return this;
|
|
};
|
|
|
|
|
|
ClientManager.prototype.resetTerminated = function() {
|
|
this['@client'].resetTerminated();
|
|
return this;
|
|
};
|
|
|
|
ClientManager.prototype.print = function(startTime) {
|
|
return this['@client'].printResult(startTime);
|
|
};
|
|
|
|
ClientManager.prototype.api = function(key, value) {
|
|
if (key && (typeof value != 'undefined')) {
|
|
this['@client'].api[key] = value;
|
|
}
|
|
return this['@client'].api;
|
|
};
|
|
|
|
ClientManager.prototype.globals = function(key, value) {
|
|
if (key) {
|
|
if (typeof value != 'undefined') {
|
|
this['@client'].api.globals[key] = value;
|
|
return this;
|
|
}
|
|
|
|
return this['@client'].api.globals[key];
|
|
}
|
|
|
|
return this['@client'].api.globals;
|
|
};
|
|
|
|
ClientManager.prototype.resetQueue = function() {
|
|
this['@client'].queue.reset();
|
|
return this;
|
|
};
|
|
|
|
ClientManager.prototype.restartQueue = function(onComplete) {
|
|
this.resetQueue();
|
|
this['@client'].queue.run(onComplete);
|
|
};
|
|
|
|
ClientManager.prototype.shouldRestartQueue = function() {
|
|
return this['@client'] && this['@client'].queue.list().length > 0;
|
|
};
|
|
|
|
ClientManager.prototype.checkQueue = function() {
|
|
var deferred = Q.defer();
|
|
if (this.shouldRestartQueue()) {
|
|
this.restartQueue(function() {
|
|
deferred.resolve();
|
|
});
|
|
} else {
|
|
deferred.resolve();
|
|
}
|
|
|
|
return deferred.promise;
|
|
};
|
|
|
|
ClientManager.prototype.endSessionOnFail = function(value) {
|
|
if (typeof value == 'undefined') {
|
|
return this['@client'].endSessionOnFail();
|
|
}
|
|
this['@client'].endSessionOnFail(value);
|
|
|
|
return this;
|
|
};
|
|
|
|
ClientManager.prototype.skipTestcasesOnFail = function() {
|
|
return this.api().options.skip_testcases_on_fail;
|
|
};
|
|
|
|
module.exports = ClientManager;
|