diff options
| author | Elliott Sprehn | 2010-11-08 23:26:36 -0800 |
|---|---|---|
| committer | Misko Hevery | 2010-11-09 13:39:12 -0800 |
| commit | 257e97a65f7dd794faa5d8c0d72bbd5a894cb471 (patch) | |
| tree | 8fa51fbe70c657985e03fdb1762832c3ff913679 /src/scenario | |
| parent | c048f0d8e8385e96e9fff0b4ff733cecfa726d93 (diff) | |
| download | angular.js-257e97a65f7dd794faa5d8c0d72bbd5a894cb471.tar.bz2 | |
Support substring matching of bindings with repeater(). Closes #123
Diffstat (limited to 'src/scenario')
| -rw-r--r-- | src/scenario/Scenario.js | 28 | ||||
| -rw-r--r-- | src/scenario/SpecRunner.js | 1 | ||||
| -rw-r--r-- | src/scenario/dsl.js | 43 |
3 files changed, 36 insertions, 36 deletions
diff --git a/src/scenario/Scenario.js b/src/scenario/Scenario.js index fc7150bc..ae1a6760 100644 --- a/src/scenario/Scenario.js +++ b/src/scenario/Scenario.js @@ -294,3 +294,31 @@ function browserTrigger(element, type) { }; })(_jQuery.fn); +/** + * Finds all bindings with the substring match of name and returns an + * array of their values. + * + * @param {string} name The name to match + * @return {Array.<string>} String of binding values + */ +_jQuery.fn.bindings = function(name) { + function contains(text, value) { + return value instanceof RegExp ? + value.test(text) : + text && text.indexOf(value) >= 0; + } + var result = []; + this.find('.ng-binding').each(function() { + var element = new _jQuery(this); + if (!angular.isDefined(name) || + contains(element.attr('ng:bind'), name) || + contains(element.attr('ng:bind-template'), name)) { + if (element.is('input, textarea')) { + result.push(element.val()); + } else { + result.push(element.html()); + } + } + }); + return result; +}; diff --git a/src/scenario/SpecRunner.js b/src/scenario/SpecRunner.js index c6a56083..f3bbe2e6 100644 --- a/src/scenario/SpecRunner.js +++ b/src/scenario/SpecRunner.js @@ -111,6 +111,7 @@ angular.scenario.SpecRunner.prototype.addFutureAction = function(name, behavior, $document.elements = function(selector) { var args = Array.prototype.slice.call(arguments, 1); selector = (self.selector || '') + ' ' + (selector || ''); + selector = _jQuery.trim(selector) || '*'; angular.foreach(args, function(value, index) { selector = selector.replace('$' + (index + 1), value); }); diff --git a/src/scenario/dsl.js b/src/scenario/dsl.js index 3fb84596..2ba61a52 100644 --- a/src/scenario/dsl.js +++ b/src/scenario/dsl.js @@ -152,30 +152,16 @@ angular.scenario.dsl('using', function() { /** * Usage: - * binding(name) returns the value of a binding + * binding(name) returns the value of the first matching binding */ angular.scenario.dsl('binding', function() { - function contains(text, value) { - return value instanceof RegExp ? - value.test(text) : - text && text.indexOf(value) >= 0; - } return function(name) { return this.addFutureAction("select binding '" + name + "'", function($window, $document, done) { - var elements = $document.elements('.ng-binding'); - for ( var i = 0; i < elements.length; i++) { - var element = new elements.init(elements[i]); - if (contains(element.attr('ng:bind'), name) || - contains(element.attr('ng:bind-template'), name)) { - if (element.is('input, textarea')) { - done(null, element.val()); - } else { - done(null, element.html()); - } - return; - } + var values = $document.elements().bindings(name); + if (!values.length) { + return done("Binding selector '" + name + "' did not match."); } - done("Binding selector '" + name + "' did not match."); + done(null, values[0]); }); }; }); @@ -243,16 +229,7 @@ angular.scenario.dsl('repeater', function() { chain.column = function(binding) { return this.addFutureAction("repeater '" + this.label + "' column '" + binding + "'", function($window, $document, done) { - var values = []; - $document.elements().each(function() { - _jQuery(this).find(':visible').each(function() { - var element = _jQuery(this); - if (element.attr('ng:bind') === binding) { - values.push(element.text()); - } - }); - }); - done(null, values); + done(null, $document.elements().bindings(binding)); }); }; @@ -262,13 +239,7 @@ angular.scenario.dsl('repeater', function() { var matches = $document.elements().slice(index, index + 1); if (!matches.length) return done('row ' + index + ' out of bounds'); - _jQuery(matches[0]).find(':visible').each(function() { - var element = _jQuery(this); - if (angular.isDefined(element.attr('ng:bind'))) { - values.push(element.text()); - } - }); - done(null, values); + done(null, matches.bindings()); }); }; |
