Fixed bug: waitsFor() hangs forever if latch function never returns true.

This commit is contained in:
Christian Williams 2010-08-25 17:16:19 -07:00
parent 254ebb8a03
commit 55149310c3
4 changed files with 11 additions and 4 deletions

View File

@ -339,7 +339,7 @@ describe("jasmine spec running", function () {
fakeTimer.tick(400);
expect(runsBlockExecuted).toEqual(false);
expect(timeoutSpec.results().getItems()[0].message).toEqual('timeout: timed out after 500 msec waiting for something to happen');
// todo: expect(subsequentSpecRan).toEqual(true); [xw 20100819]
expect(subsequentSpecRan).toEqual(true);
});
});

View File

@ -81,7 +81,7 @@ describe('WaitsForBlock', function () {
expect(spec.fail).toHaveBeenCalled();
var failMessage = spec.fail.mostRecentCall.args[0].message;
expect(failMessage).toMatch(message);
expect(onComplete).not.toHaveBeenCalled(); // todo: this is an issue... [xw 20100819]
expect(onComplete).toHaveBeenCalled();
});
});
});

View File

@ -4,6 +4,7 @@ jasmine.Queue = function(env) {
this.running = false;
this.index = 0;
this.offset = 0;
this.abort = false;
};
jasmine.Queue.prototype.addBefore = function(block) {
@ -38,7 +39,7 @@ jasmine.Queue.prototype.next_ = function() {
while (goAgain) {
goAgain = false;
if (self.index < self.blocks.length) {
if (self.index < self.blocks.length && !this.abort) {
var calledSynchronously = true;
var completedSynchronously = false;
@ -48,6 +49,10 @@ jasmine.Queue.prototype.next_ = function() {
return;
}
if (self.blocks[self.index].abort) {
self.abort = true;
}
self.offset = 0;
self.index++;

View File

@ -39,7 +39,9 @@ jasmine.WaitsForBlock.prototype.execute = function(onComplete) {
name: 'timeout',
message: message
});
// todo: need to prevent additional blocks in this spec from running... [xw 20100819]
this.abort = true;
onComplete();
} else {
this.totalTimeSpentWaitingForLatch += jasmine.WaitsForBlock.TIMEOUT_INCREMENT;
var self = this;