1 /**
  2  * Runner
  3  *
  4  * @constructor
  5  * @param {jasmine.Env} env
  6  */
  7 jasmine.Runner = function(env) {
  8   var self = this;
  9   self.env = env;
 10   self.queue = new jasmine.Queue(env);
 11   self.before_ = [];
 12   self.after_ = [];
 13   self.suites_ = [];
 14 };
 15 
 16 jasmine.Runner.prototype.execute = function() {
 17   var self = this;
 18   if (self.env.reporter.reportRunnerStarting) {
 19     self.env.reporter.reportRunnerStarting(this);
 20   }
 21   self.queue.start(function () {
 22     self.finishCallback();
 23   });
 24 };
 25 
 26 jasmine.Runner.prototype.beforeEach = function(beforeEachFunction) {
 27   beforeEachFunction.typeName = 'beforeEach';
 28   this.before_.push(beforeEachFunction);
 29 };
 30 
 31 jasmine.Runner.prototype.afterEach = function(afterEachFunction) {
 32   afterEachFunction.typeName = 'afterEach';
 33   this.after_.push(afterEachFunction);
 34 };
 35 
 36 
 37 jasmine.Runner.prototype.finishCallback = function() {
 38   this.env.reporter.reportRunnerResults(this);
 39 };
 40 
 41 jasmine.Runner.prototype.addSuite = function(suite) {
 42   this.suites_.push(suite);
 43 };
 44 
 45 jasmine.Runner.prototype.add = function(block) {
 46   if (block instanceof jasmine.Suite) {
 47     this.addSuite(block);
 48   }
 49   this.queue.add(block);
 50 };
 51 
 52 jasmine.Runner.prototype.specs = function () {
 53   var suites = this.suites();
 54   var specs = [];
 55   for (var i = 0; i < suites.length; i++) {
 56     specs = specs.concat(suites[i].specs());
 57   }
 58   return specs;
 59 };
 60 
 61 
 62 jasmine.Runner.prototype.suites = function() {
 63   return this.suites_;
 64 };
 65 
 66 jasmine.Runner.prototype.results = function() {
 67   return this.queue.results();
 68 };