aboutsummaryrefslogtreecommitdiffstats
path: root/src/scenario/DSL.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/scenario/DSL.js')
-rw-r--r--src/scenario/DSL.js90
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);
+ });
};