diff options
Diffstat (limited to 'src/scenario/DSL.js')
| -rw-r--r-- | src/scenario/DSL.js | 90 |
1 files changed, 62 insertions, 28 deletions
diff --git a/src/scenario/DSL.js b/src/scenario/DSL.js index b713cfd6..d57a61df 100644 --- a/src/scenario/DSL.js +++ b/src/scenario/DSL.js @@ -1,13 +1,14 @@ angular.scenario.dsl.browser = { navigateTo: function(url){ - $scenario.addStep('Navigate to: ' + url, function(done){ + return $scenario.addFuture('Navigate to: ' + url, function(done){ var self = this; this.testFrame.load(function(){ self.testFrame.unbind(); self.testWindow = self.testFrame[0].contentWindow; - self.testDocument = jQuery(self.testWindow.document); + self.testDocument = self.jQuery(self.testWindow.document); self.$browser = self.testWindow.angular.service.$browser(); - self.notifyWhenNoOutstandingRequests = bind(self.$browser, self.$browser.notifyWhenNoOutstandingRequests); + self.notifyWhenNoOutstandingRequests = + bind(self.$browser, self.$browser.notifyWhenNoOutstandingRequests); self.notifyWhenNoOutstandingRequests(done); }); if (this.testFrame.attr('src') == url) { @@ -20,19 +21,18 @@ angular.scenario.dsl.browser = { }; angular.scenario.dsl.input = function(selector) { + var namePrefix = "input '" + selector + "'"; return { - enter: function(value){ - $scenario.addStep("Set input text of '" + selector + "' to '" + - value + "'", function(done){ - var input = this.testDocument.find('input[name=' + selector + ']'); - input.val(value); - this.testWindow.angular.element(input[0]).trigger('change'); - done(); + enter: function(value) { + return $scenario.addFuture(namePrefix + " enter '" + value + "'", function(done) { + var input = this.testDocument.find('input[name=' + selector + ']'); + input.val(value); + this.testWindow.angular.element(input[0]).trigger('change'); + done(); }); }, - select: function(value){ - $scenario.addStep("Select radio '" + selector + "' to '" + - value + "'", function(done){ + select: function(value) { + return $scenario.addFuture(namePrefix + " select '" + value + "'", function(done) { var input = this.testDocument. find(':radio[name$=@' + selector + '][value=' + value + ']'); jqLiteWrap(input[0]).trigger('click'); @@ -41,22 +41,56 @@ angular.scenario.dsl.input = function(selector) { }); } }; -}; +}, -angular.scenario.dsl.expect = { - repeater: function(selector) { - return { - count: { - toEqual: function(number) { - $scenario.addStep("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); - } - done(); +angular.scenario.dsl.repeater = function(selector) { + var namePrefix = "repeater '" + selector + "'"; + return { + count: function() { + return $scenario.addFuture(namePrefix + ' count', function(done) { + done(this.testDocument.find(selector).size()); + }); + }, + collect: function() { + return $scenario.addFuture(namePrefix + ' collect', function(done) { + var self = this; + var doCollect = bind(this, function() { + var repeaterArray = []; + this.testDocument.find(selector).each(function(index) { + var element = angular.extend(self.jQuery(this), + {bindings: [], + boundTo: function(name) { return this.bindings[name]; }} + ); + element.find('*').each(function(index) { + var bindName = self.jQuery(this).attr('ng:bind'); + if (bindName) { + element.bindings[bindName] = self.jQuery(this).text(); + } + }); + repeaterArray[index] = element; }); - } + return repeaterArray; + }); + done(doCollect()); + }); + } + }; +}; + +angular.scenario.dsl.element = function(selector) { + var nameSuffix = "element '" + selector + "'"; + return $scenario.addFuture('Find ' + nameSuffix, function(done) { + var self = this; + var element = angular.extend(this.testDocument.find(selector), { + bindings: [], + boundTo: function(name) { return this.bindings[name]; } + }); + element.find('*').each(function(index) { + var bindName = self.jQuery(this).attr('ng:bind'); + if (bindName) { + element.bindings[bindName] = self.jQuery(this).text(); } - }; - } + }); + done(element); + }); }; |
