Skip to content
This repository has been archived by the owner on Sep 21, 2022. It is now read-only.

Commit

Permalink
Introduce State objects instead string states
Browse files Browse the repository at this point in the history
  • Loading branch information
Sergey Tatarintsev committed Feb 21, 2014
1 parent 3543786 commit 296e3b0
Show file tree
Hide file tree
Showing 7 changed files with 62 additions and 43 deletions.
11 changes: 4 additions & 7 deletions lib/browser.js
Expand Up @@ -39,17 +39,14 @@ module.exports = inherit({
return this._driver.findElement(By.css(selector));
},

captureState: function (plan, state) {
captureState: function (state) {
var _this = this;
return this.open(this.config.getAbsoluteUrl(plan.url))
return this.open(this.config.getAbsoluteUrl(state.getUrl()))
.then(function() {
return _this.findElements(plan.elements);
return _this.findElements(state.getElementsSelectors());
})
.then(function(elements) {
var actions = _this.createActionSequence();

plan.toState(state, actions, elements);
return actions.perform()
return state.activate(_this, elements)
.then(function() {
return _this.takeScreenshot();
})
Expand Down
2 changes: 1 addition & 1 deletion lib/cli/gather.js
Expand Up @@ -21,7 +21,7 @@ module.exports = function() {
var shooter = new ScreenShooter(config);

shooter.on('endCapture', function(data) {
console.log(chalk.blue(data.name) + ': ' + chalk.green(data.state));
console.log(chalk.blue(data.plan) + ': ' + chalk.green(data.state));
});
return shooter.runPlans(plans);

Expand Down
14 changes: 5 additions & 9 deletions lib/plan.js
Expand Up @@ -2,15 +2,16 @@

var path = require('path'),
q = require('q'),
inherit = require('inherit');
inherit = require('inherit'),
State = require('./state');

function nothing() {
return q.resolve();
}

var Plan = module.exports = inherit({
__constructor: function() {
this._states = {};
this._states = [];
},

setName: function setName(name) {
Expand All @@ -30,18 +31,13 @@ var Plan = module.exports = inherit({

addState: function state(name, cb) {
cb = cb || nothing;
this._states[name] = cb;
this._states.push(new State(this, name, cb));
return this;
},

getStates: function getStates() {
return Object.keys(this._states);
},

toState: function toState(name, actions, elements) {
return this._states[name].call(this, actions, elements);
return this._states;
}

}, {
read: function(file) {
var plan = new Plan();
Expand Down
16 changes: 8 additions & 8 deletions lib/runner.js
Expand Up @@ -32,7 +32,7 @@ module.exports = inherit(EventEmitter, {

runPlan: function(plan) {
var states = plan.getStates(),
runState = this._runState.bind(this, plan);
runState = this._runState.bind(this);
return this._beforePlan(plan)
.then(function() {
return promiseUtils.seqMap(states, runState);
Expand All @@ -48,26 +48,26 @@ module.exports = inherit(EventEmitter, {
return q.resolve();
},

_runState: function(plan, state) {
_runState: function(state) {
var _this = this;
return this._beforeState(plan, state)
return this._beforeState(state)
.then(function() {
return promiseUtils.seqMap(_this.config.browsers, function(browser) {
return _this._runStateInBrowser(plan, state, new Browser(_this.config, browser));
return _this._runStateInBrowser(state, new Browser(_this.config, browser));
});
})
.then(this._afterState.bind(this, plan, state));
.then(this._afterState.bind(this, state));
},

_beforeState: function(plan, state) {
_beforeState: function(state) {
return q.resolve();
},

_afterState: function(plan, state) {
_afterState: function(state) {
return q.resolve();
},

_runStateInBrowser: function(plan, state, browser) {
_runStateInBrowser: function(state, browser) {
return q.resolve();
},
});
16 changes: 8 additions & 8 deletions lib/screen-shooter.js
Expand Up @@ -6,17 +6,17 @@ var fs = require('q-io/fs'),

module.exports = inherit(Runner, {

_beforeState: function(plan, state) {
return fs.makeTree(this.config.getScreenshotsDir(plan.name, state));
_beforeState: function(state) {
return fs.makeTree(this.config.getScreenshotsDir(state.plan.name, state.name));
},

_runStateInBrowser: function(plan, state, browser) {
_runStateInBrowser: function(state, browser) {
var _this = this;

this.emit('beginCapture', plan, state);
return browser.captureState(plan, state)
this.emit('beginCapture', state.plan.name, state.name);
return browser.captureState(state)
.then(function(image) {
var savePath = _this.config.getScreenshotPath(plan.name, state, browser.name);
var savePath = _this.config.getScreenshotPath(state.plan.name, state.name, browser.name);
return image.save(savePath).then(function() {
return savePath;
});
Expand All @@ -28,8 +28,8 @@ module.exports = inherit(Runner, {
})
.then(function(savePath) {
var data = {
name: plan.name,
state: state,
plan: state.plan.name,
state: state.name,
path: savePath,
browser: browser.name
};
Expand Down
26 changes: 26 additions & 0 deletions lib/state.js
@@ -0,0 +1,26 @@
'use strict';

var inherit = require('inherit');

module.exports = inherit({
__constructor: function(plan, name, cb) {
this.plan = plan;
this.name = name;
this._callback = cb;
},

activate: function(browser, elements) {
var sequence = browser.createActionSequence();
this._callback.call(null, sequence, elements);
return sequence.perform();
},

getUrl: function () {
return this.plan.url;
},

getElementsSelectors: function() {
return this.plan.elements;
}

});
20 changes: 10 additions & 10 deletions lib/tester.js
Expand Up @@ -35,31 +35,31 @@ module.exports = inherit(Runner, {
return this._shooter._afterPlan(plan);
},

_beforeState: function(plan, state) {
this.emit('beginState', state);
return this._shooter._beforeState(plan, state);
_beforeState: function(state) {
this.emit('beginState', state.name);
return this._shooter._beforeState(state);
},

_afterState: function(plan, state) {
this.emit('endState', state);
return this._shooter._afterState(plan, state);
_afterState: function(state) {
this.emit('endState', state.name);
return this._shooter._afterState(state);
},

_runStateInBrowser: function(plan, state, browser) {
_runStateInBrowser: function(state, browser) {
this.emit('beginTest', browser.name);
return this._shooter._runStateInBrowser(plan, state, browser)
return this._shooter._runStateInBrowser(state, browser)
.then(this._compareScreenshots.bind(this));
},

_compareScreenshots: function (captureData) {
var prevPath = this.config.getScreenshotPath(captureData.name,
var prevPath = this.config.getScreenshotPath(captureData.plan,
captureData.state,
captureData.browser),
_this = this;
return Image.compare(captureData.path, prevPath)
.then(function(isEqual) {
_this.emit('endTest', {
name: captureData.name,
plan: captureData.plan,
state: captureData.state,
equal: isEqual,
previousPath: prevPath,
Expand Down

0 comments on commit 296e3b0

Please sign in to comment.