diff options
| author | Andres Ornelas | 2010-06-30 09:51:54 -0700 |
|---|---|---|
| committer | Andres Ornelas | 2010-06-30 09:51:54 -0700 |
| commit | 9d8646b0d1bee2ca60bbb7b494b63ab83e243072 (patch) | |
| tree | fb78e3b93cce33aec11450235e9fd5f83e1a14ab /src | |
| parent | e664186f93838ca1fb1b2e4277f7c18264f81d92 (diff) | |
| download | angular.js-9d8646b0d1bee2ca60bbb7b494b63ab83e243072.tar.bz2 | |
all tests passing with new futures concept
Diffstat (limited to 'src')
| -rw-r--r-- | src/scenario/DSL.js | 8 | ||||
| -rw-r--r-- | src/scenario/Future.js | 45 | ||||
| -rw-r--r-- | src/scenario/Runner.js | 39 |
3 files changed, 50 insertions, 42 deletions
diff --git a/src/scenario/DSL.js b/src/scenario/DSL.js index 194a28d6..bcf2b6c5 100644 --- a/src/scenario/DSL.js +++ b/src/scenario/DSL.js @@ -1,6 +1,6 @@ angular.scenario.dsl.browser = { navigateTo: function(url){ - $scenario.addStep('Navigate to: ' + url, function(done){ + $scenario.addFuture('Navigate to: ' + url, function(done){ var self = this; this.testFrame.load(function(){ self.testFrame.unbind(); @@ -22,7 +22,7 @@ angular.scenario.dsl.browser = { angular.scenario.dsl.input = function(selector) { return { enter: function(value){ - $scenario.addStep("Set input text of '" + selector + "' to '" + + $scenario.addFuture("Set input text of '" + selector + "' to '" + value + "'", function(done){ var input = this.testDocument.find('input[name=' + selector + ']'); input.val(value); @@ -31,7 +31,7 @@ angular.scenario.dsl.input = function(selector) { }); }, select: function(value){ - $scenario.addStep("Select radio '" + selector + "' to '" + + $scenario.addFuture("Select radio '" + selector + "' to '" + value + "'", function(done){ var input = this.testDocument. find(':radio[name$=@' + selector + '][value=' + value + ']'); @@ -49,7 +49,7 @@ angular.scenario.dsl.expect = { return { count: { toEqual: function(number) { - $scenario.addStep("Expect that there are " + number + " items in Repeater with selector '" + selector + "'", function(done) { + $scenario.addFuture("Expect that there are " + number + " items in Repeater with selector '" + selector + "'", function(done) { var items = this.testDocument.find(selector); if (items.length != number) { this.result.fail("Expected " + number + " but was " + items.length); diff --git a/src/scenario/Future.js b/src/scenario/Future.js index 057b89db..c718bba2 100644 --- a/src/scenario/Future.js +++ b/src/scenario/Future.js @@ -1,8 +1,8 @@ function Future(name, behavior) { - this.value = undefined; this.name = name; this.behavior = behavior; this.fulfilled = false; + this.value = undefined; } Future.prototype = { @@ -11,25 +11,6 @@ Future.prototype = { this.value = value; } }; - -function future(name, behavior) { - return new Future(name, behavior); -}; - -function repeater(selector) { - var repeaterFuture = future('repeater ' + selector, function(done) { - done($(selector)); - }); - - repeaterFuture.count = function(){ - return future(repeaterFuture.name + ' count', function(done) { - done(repeaterFuture.value.size()); - }); - }; - - return repeaterFuture; -} - function Matcher(future, logger) { var self = this; this.logger = logger; @@ -52,6 +33,28 @@ Matcher.addMatcher = function(name, matcher){ Matcher.addMatcher('toEqual', function(a,b){ return a == b; }); -function expect(future) { +/* + +function future(name, behavior) { + return new Future(name, behavior); +}; + +function repeater(selector) { + var repeaterFuture = future('repeater ' + selector, function(done) { + done($(selector)); + }); + + repeaterFuture.count = function(){ + return future(repeaterFuture.name + ' count', function(done) { + done(repeaterFuture.value.size()); + }); + }; + + return repeaterFuture; +} + +function expectX(future) { return new Matcher(future, window.alert); } + + */
\ No newline at end of file diff --git a/src/scenario/Runner.js b/src/scenario/Runner.js index 13ba5af0..c77239cc 100644 --- a/src/scenario/Runner.js +++ b/src/scenario/Runner.js @@ -26,13 +26,13 @@ angular.scenario.Runner = function(scope, jQuery){ var specName = path.join(' ') + ': it ' + name; self.currentSpec = specs[specName] = { name: specName, - steps:[] + futures: [] }; try { beforeEach(); body(); } catch(err) { - self.addStep(err.message || 'ERROR', function(){ + self.addFuture(err.message || 'ERROR', function(){ throw err; }); } finally { @@ -107,14 +107,16 @@ angular.scenario.Runner.prototype = { callback(); }, - addStep: function(name, step) { - this.currentSpec.steps.push({name:name, fn:step}); + addFuture: function(name, behavior) { + var future = new Future(name, behavior); + this.currentSpec.futures.push(future); + return future; }, execute: function(name, callback) { var spec = this.specs[name], self = this, - stepsDone = [], + futuresFulfilled = [], result = { passed: false, failed: false, @@ -132,29 +134,32 @@ angular.scenario.Runner.prototype = { testWindow: this.testWindow }, angularService, {}); this.self = specThis; - var stepLogger = this.logger('spec', name); - spec.nextStepIndex = 0; + var futureLogger = this.logger('spec', name); + spec.nextFutureIndex = 0; function done() { result.finished = true; - stepLogger.close(); + futureLogger.close(); self.self = null; (callback||noop).call(specThis); } - function next(){ - var step = spec.steps[spec.nextStepIndex]; + function next(value){ + if (spec.nextFutureIndex > 0) { + spec.futures[spec.nextFutureIndex - 1].fulfill(value); + } + var future = spec.futures[spec.nextFutureIndex]; (result.log || {close:noop}).close(); result.log = null; - if (step) { - spec.nextStepIndex ++; - result.log = stepLogger('step', step.name); - stepsDone.push(step.name); + if (future) { + spec.nextFutureIndex ++; + result.log = futureLogger('future', future.name); + futuresFulfilled.push(future.name); try { - step.fn.call(specThis, next); + future.behavior.call(specThis, next); } catch (e) { console.error(e); result.fail(e); self.scope.$testrun.results.push( - {name: name, passed: false, error: e, steps: stepsDone}); + {name: name, passed: false, error: e, steps: futuresFulfilled}); done(); } } else { @@ -163,7 +168,7 @@ angular.scenario.Runner.prototype = { name: name, passed: !result.failed, error: result.error, - steps: stepsDone}); + steps: futuresFulfilled}); done(); } }; |
