1 jasmine.WaitsForBlock = function(env, timeout, latchFunction, message, spec) {
  2   this.timeout = timeout;
  3   this.latchFunction = latchFunction;
  4   this.message = message;
  5   this.totalTimeSpentWaitingForLatch = 0;
  6   jasmine.Block.call(this, env, null, spec);
  7 };
  8 
  9 jasmine.util.inherit(jasmine.WaitsForBlock, jasmine.Block);
 10 
 11 jasmine.WaitsForBlock.TIMEOUT_INCREMENT = 100;
 12 
 13 jasmine.WaitsForBlock.prototype.execute = function (onComplete) {
 14   var self = this;
 15   self.env.reporter.log('>> Jasmine waiting for ' + (self.message || 'something to happen'));
 16   var latchFunctionResult;
 17   try {
 18     latchFunctionResult = self.latchFunction.apply(self.spec);
 19   } catch (e) {
 20     self.spec.fail(e);
 21     onComplete();
 22     return;
 23   }
 24 
 25   if (latchFunctionResult) {
 26     onComplete();
 27   } else if (self.totalTimeSpentWaitingForLatch >= self.timeout) {
 28     var message = 'timed out after ' + self.timeout + ' msec waiting for ' + (self.message || 'something to happen');
 29     self.spec.fail({
 30       name: 'timeout',
 31       message: message
 32     });
 33     self.spec._next();
 34   } else {
 35     self.totalTimeSpentWaitingForLatch += jasmine.WaitsForBlock.TIMEOUT_INCREMENT;
 36     self.env.setTimeout(function () { self.execute(onComplete); }, jasmine.WaitsForBlock.TIMEOUT_INCREMENT);
 37   }
 38 };