diff --git a/lib/interface/arrow.js b/lib/interface/arrow.js index 816dfc39..a1cb0189 100644 --- a/lib/interface/arrow.js +++ b/lib/interface/arrow.js @@ -9,6 +9,7 @@ var log4js = require("log4js"); var path = require("path"); var fs = require("fs"); +var events = require("events"); function Arrow(config, args) { this.logger = log4js.getLogger("Arrow"); @@ -23,11 +24,18 @@ Arrow.getInstance = function () { return Arrow.instance; }; +Arrow.prototype.__proto__ = events.EventEmitter.prototype; + Arrow.prototype.run = function () { var SessionFactory = require("../session/sessionfactory"), - sf; + sf, + arrow = this; + this.emit('start'); sf = new SessionFactory(this.config, this.args); + sf.on('end', function(e) { + arrow.emit('end', e) + }); sf.runAllTestSessions(); }; @@ -39,6 +47,8 @@ Arrow.prototype.runController = function (controllerName, testConfig, testParams getControllerFromShareLib, errorMsg; + this.emit('start'); + if (!testConfig) { testConfig = {}; } @@ -127,6 +137,7 @@ Arrow.prototype.runController = function (controllerName, testConfig, testParams } // error, data from previous controller, controller instance + self.emit('end'); callback(error, data, controller); } diff --git a/lib/session/sessionfactory.js b/lib/session/sessionfactory.js index 229ad030..ee1f716f 100644 --- a/lib/session/sessionfactory.js +++ b/lib/session/sessionfactory.js @@ -20,6 +20,7 @@ var os = require("os"); var ProxyManager = require("../proxy/proxymanager"); var Servermanager = require("../../arrow_server/arrowservermanager.js"); var PhantomJsSetup = require("../util/phantomJsSetup.js"); +var events = require("events"); /** * SessionFactory is the main entry point for all Arrow Tests. @@ -106,6 +107,8 @@ function SessionFactory(config, args) { } +SessionFactory.prototype.__proto__ = events.EventEmitter.prototype; + SessionFactory.prototype.runAllTestSessions = function () { var self = this, testExecutor = new TestExecutor(self); @@ -401,6 +404,7 @@ SessionFactory.prototype.tearDown = function (testQueue, wdSessions) { PhantomJsSetup.stopPhantomJs(); } + this.emit('end'); if (global.workingDirectory) { failed = false; diff --git a/tests/unit/lib/interface/arrow-tests.js b/tests/unit/lib/interface/arrow-tests.js index b620aa95..ebb48457 100644 --- a/tests/unit/lib/interface/arrow-tests.js +++ b/tests/unit/lib/interface/arrow-tests.js @@ -69,6 +69,34 @@ YUI.add('arrow-tests', function (Y, NAME) { }); A.isTrue(executed, 'Should have executed controller with testName'); + }, + + 'test start event': function() { + var driver = new StubDriver(), + arrow = new Arrow(), + got_event = false; + + arrow.on('start', function() { + got_event = true; + }); + + arrow.runController(controllerName, {}, {}, driver, function(error, data, controller) { + A.isTrue(got_event, 'should be true'); + }); + }, + + 'test end event': function() { + var driver = new StubDriver(), + arrow = new Arrow(), + got_event = false; + + arrow.on('end', function() { + got_event = true; + }); + + arrow.runController(controllerName, {}, {}, driver, function(error, data, controller) { + A.isTrue(got_event, 'should be true'); + }); } }));