Re-refactored Queue to use straightforward callbacks

This commit is contained in:
ragaskar 2009-08-03 22:22:13 -07:00
parent 9475de28b3
commit 0d6c6c2a35
8 changed files with 47 additions and 72 deletions

View File

@ -479,24 +479,20 @@ describe("jasmine spec running", function () {
var nested = env.describe('suite', function () { var nested = env.describe('suite', function () {
env.describe('nested', function () { env.describe('nested', function () {
env.it('should run nested suites', function () { env.it('should run nested suites', function () {
console.log('first')
foo++; foo++;
}); });
env.it('should run nested suites', function () { env.it('should run nested suites', function () {
console.log('second')
bar++; bar++;
}); });
}); });
env.describe('nested 2', function () { env.describe('nested 2', function () {
env.it('should run suites following nested suites', function () { env.it('should run suites following nested suites', function () {
console.log('third')
baz++; baz++;
}); });
}); });
env.it('should run tests following nested suites', function () { env.it('should run tests following nested suites', function () {
console.log('fourth')
quux++; quux++;
}); });
}); });

View File

@ -88,5 +88,5 @@ jasmine.ActionCollection.prototype.waitForDone = function(action) {
self.env.clearInterval(id); self.env.clearInterval(id);
afterExecute(); afterExecute();
} }
}, 15000); }, 150);
}; };

View File

@ -12,18 +12,14 @@ jasmine.Block = function(env, func, spec) {
this.spec = spec; this.spec = spec;
}; };
jasmine.Block.prototype._next = function() { jasmine.Block.prototype.execute = function(onComplete) {
this.spec.finish(); // default value is to be done after one function
};
jasmine.Block.prototype.execute = function() {
this.env.reporter.log('>> Jasmine Running ' + this.spec.suite.description + ' ' + this.spec.description + '...'); this.env.reporter.log('>> Jasmine Running ' + this.spec.suite.description + ' ' + this.spec.description + '...');
try { try {
this.func.apply(this.spec); this.func.apply(this.spec);
} catch (e) { } catch (e) {
this.fail(e); this.fail(e);
} }
this._next(); onComplete();
}; };
jasmine.Block.prototype.fail = function(e) { jasmine.Block.prototype.fail = function(e) {

View File

@ -1,49 +1,44 @@
jasmine.Queue = function(onComplete) { jasmine.Queue = function() {
this.blocks = []; this.blocks = [];
this.onComplete = function () { this.running = false;
onComplete();
};
this.index = 0; this.index = 0;
}; };
jasmine.Queue.prototype.add = function(block) { jasmine.Queue.prototype.add = function(block) {
this.setNextOnLastInQueue(block);
this.blocks.push(block); this.blocks.push(block);
}; };
jasmine.Queue.prototype.start = function() { jasmine.Queue.prototype.start = function(onComplete) {
if (this.blocks[0]) { var self = this;
this.blocks[0].execute(); self.onComplete = onComplete;
if (self.blocks[0]) {
self.blocks[0].execute(function () {
self._next();
});
} else { } else {
this.onComplete(); self.finish();
} }
}; };
jasmine.Queue.prototype.isRunning = function () {
return this.running;
};
jasmine.Queue.prototype._next = function () { jasmine.Queue.prototype._next = function () {
this.index++;
if (this.index < this.blocks.length) {
this.blocks[this.index].execute();
}
};
/**
* @private
*/
jasmine.Queue.prototype.setNextOnLastInQueue = function (block) {
var self = this; var self = this;
block._next = function () { self.index++;
self.onComplete(); if (self.index < self.blocks.length) {
}; self.blocks[self.index].execute(function () {self._next();});
if (self.blocks.length > 0) { } else {
var previousBlock = self.blocks[self.blocks.length - 1]; self.finish();
previousBlock._next = function() {
block.execute();
};
} }
}; };
jasmine.Queue.prototype.isComplete = function () { jasmine.Queue.prototype.finish = function () {
return this.index >= (this.blocks.length - 1); if (this.onComplete) {
this.onComplete();
}
this.running = false;
}; };
jasmine.Queue.prototype.getResults = function () { jasmine.Queue.prototype.getResults = function () {

View File

@ -90,16 +90,15 @@ jasmine.Spec.prototype.finishCallback = function() {
this.env.reporter.reportSpecResults(this); this.env.reporter.reportSpecResults(this);
}; };
jasmine.Spec.prototype.finish = function() { jasmine.Spec.prototype.finish = function(onComplete) {
for (var i = 0; i < this.afterCallbacks.length; i++) { for (var i = 0; i < this.afterCallbacks.length; i++) {
this.afterCallbacks[i](); this.afterCallbacks[i]();
} }
this.safeExecuteAfters(); this.safeExecuteAfters();
this.removeAllSpies(); this.removeAllSpies();
this.finishCallback(); this.finishCallback();
this.finished = true; if (onComplete) {
if (this.suite.next) { onComplete();
this.suite.next();
} }
}; };
@ -108,7 +107,7 @@ jasmine.Spec.prototype.after = function(doAfter) {
}; };
jasmine.Spec.prototype.execute = function() { jasmine.Spec.prototype.execute = function(onComplete) {
var spec = this; var spec = this;
if (!spec.env.specFilter(spec)) { if (!spec.env.specFilter(spec)) {
spec.results.skipped = true; spec.results.skipped = true;
@ -122,7 +121,7 @@ jasmine.Spec.prototype.execute = function() {
spec.safeExecuteBefores(); spec.safeExecuteBefores();
spec.queue.start(); spec.queue.start(function () { spec.finish(onComplete); });
spec.env.currentlyRunningTests = false; spec.env.currentlyRunningTests = false;
}; };

View File

@ -27,11 +27,11 @@ jasmine.Suite.prototype.getFullName = function() {
return fullName; return fullName;
}; };
jasmine.Suite.prototype.finish = function() { jasmine.Suite.prototype.finish = function(onComplete) {
this.env.reporter.reportSuiteResults(this); this.env.reporter.reportSuiteResults(this);
this.finished = true; this.finished = true;
if (this.parentSuite) { if (typeof(onComplete) == 'function') {
this.parentSuite.next(); onComplete();
} }
}; };
@ -53,18 +53,8 @@ jasmine.Suite.prototype.add = function(block) {
this.queue.add(block); this.queue.add(block);
}; };
jasmine.Suite.prototype.execute = function() { jasmine.Suite.prototype.execute = function(onComplete) {
this.queue.start(); var self = this;
this.queue.start(function () { self.finish(onComplete); });
}; };
jasmine.Suite.prototype._next = function () {
this.next();
};
jasmine.Suite.prototype.next = function() {
if (this.queue.isComplete()) {
this.finish();
} else {
this.queue._next();
}
};

View File

@ -5,10 +5,9 @@ jasmine.WaitsBlock = function(env, timeout, spec) {
jasmine.util.inherit(jasmine.WaitsBlock, jasmine.Block); jasmine.util.inherit(jasmine.WaitsBlock, jasmine.Block);
jasmine.WaitsBlock.prototype.execute = function () { jasmine.WaitsBlock.prototype.execute = function (onComplete) {
var self = this; this.env.reporter.log('>> Jasmine waiting for ' + this.timeout + ' ms...');
self.env.reporter.log('>> Jasmine waiting for ' + this.timeout + ' ms...'); this.env.setTimeout(function () {
self.env.setTimeout(function () { onComplete();
self._next(); }, this.timeout);
}, self.timeout);
}; };

View File

@ -10,7 +10,7 @@ jasmine.util.inherit(jasmine.WaitsForBlock, jasmine.Block);
jasmine.WaitsForBlock.TIMEOUT_INCREMENT = 100; jasmine.WaitsForBlock.TIMEOUT_INCREMENT = 100;
jasmine.WaitsForBlock.prototype.execute = function () { jasmine.WaitsForBlock.prototype.execute = function (onComplete) {
var self = this; var self = this;
self.env.reporter.log('>> Jasmine waiting for ' + (self.message || 'something to happen')); self.env.reporter.log('>> Jasmine waiting for ' + (self.message || 'something to happen'));
var latchFunctionResult; var latchFunctionResult;
@ -18,12 +18,12 @@ jasmine.WaitsForBlock.prototype.execute = function () {
latchFunctionResult = self.latchFunction.apply(self.spec); latchFunctionResult = self.latchFunction.apply(self.spec);
} catch (e) { } catch (e) {
self.fail(e); self.fail(e);
self._next(); onComplete();
return; return;
} }
if (latchFunctionResult) { if (latchFunctionResult) {
self._next(); onComplete();
} else if (self.totalTimeSpentWaitingForLatch >= self.timeout) { } else if (self.totalTimeSpentWaitingForLatch >= self.timeout) {
var message = 'timed out after ' + self.timeout + ' msec waiting for ' + (self.message || 'something to happen'); var message = 'timed out after ' + self.timeout + ' msec waiting for ' + (self.message || 'something to happen');
self.fail({ self.fail({
@ -33,6 +33,6 @@ jasmine.WaitsForBlock.prototype.execute = function () {
self.spec._next(); self.spec._next();
} else { } else {
self.totalTimeSpentWaitingForLatch += jasmine.WaitsForBlock.TIMEOUT_INCREMENT; self.totalTimeSpentWaitingForLatch += jasmine.WaitsForBlock.TIMEOUT_INCREMENT;
self.env.setTimeout(function () { self.execute(); }, jasmine.WaitsForBlock.TIMEOUT_INCREMENT); self.env.setTimeout(function () { self.execute(onComplete); }, jasmine.WaitsForBlock.TIMEOUT_INCREMENT);
} }
}; };