82 lines
2.4 KiB
JavaScript
82 lines
2.4 KiB
JavaScript
/**
|
|
* A simple perform command which allows access to the "api" in a callback.
|
|
* Can be useful if you want to read variables set by other commands.
|
|
*
|
|
* ```
|
|
* this.demoTest = function (browser) {
|
|
* var elementValue;
|
|
* browser
|
|
* .getValue('.some-element', function(result) {
|
|
* elementValue = result.value;
|
|
* })
|
|
* // other stuff going on ...
|
|
*
|
|
* // self-completing callback
|
|
* .perform(function() {
|
|
* console.log('elementValue', elementValue);
|
|
* // without any defined parameters, perform
|
|
* // completes immediately (synchronously)
|
|
* })
|
|
*
|
|
* // asynchronous completion
|
|
* .perform(function(done) {
|
|
* console.log('elementValue', elementValue);
|
|
* // potentially other async stuff going on
|
|
* // on finished, call the done callback
|
|
* done();
|
|
* })
|
|
*
|
|
* // asynchronous completion including api (client)
|
|
* .perform(function(client, done) {
|
|
* console.log('elementValue', elementValue);
|
|
* // similar to before, but now with client
|
|
* // potentially other async stuff going on
|
|
* // on finished, call the done callback
|
|
* done();
|
|
* });
|
|
* };
|
|
* ```
|
|
*
|
|
* @method perform
|
|
* @param {function} callback The function to run as part of the queue. Its signature can have up to two parameters. No parameters: callback runs and perform completes immediately at the end of the execution of the callback. One parameter: allows for asynchronous execution within the callback providing a done callback function for completion as the first argument. Two parameters: allows for asynchronous execution with the "api" object passed in as the first argument, followed by the done callback.
|
|
* @api commands
|
|
*/
|
|
|
|
var util = require('util');
|
|
var events = require('events');
|
|
|
|
function Perform() {
|
|
events.EventEmitter.call(this);
|
|
}
|
|
|
|
util.inherits(Perform, events.EventEmitter);
|
|
|
|
Perform.prototype.command = function(callback) {
|
|
var self = this;
|
|
var doneCallback;
|
|
if (callback.length === 0) {
|
|
callback.call(self, self.client.api);
|
|
doneCallback = function() {
|
|
self.emit('complete');
|
|
};
|
|
} else {
|
|
doneCallback = function() {
|
|
var args = [function() {
|
|
self.emit('complete');
|
|
}];
|
|
|
|
if (callback.length > 1) {
|
|
args.unshift(self.client.api);
|
|
}
|
|
|
|
callback.apply(self, args);
|
|
};
|
|
}
|
|
|
|
process.nextTick(doneCallback);
|
|
|
|
return this;
|
|
};
|
|
|
|
module.exports = Perform;
|