aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorElliott Sprehn2010-11-08 23:26:36 -0800
committerMisko Hevery2010-11-09 13:39:12 -0800
commit257e97a65f7dd794faa5d8c0d72bbd5a894cb471 (patch)
tree8fa51fbe70c657985e03fdb1762832c3ff913679 /src
parentc048f0d8e8385e96e9fff0b4ff733cecfa726d93 (diff)
downloadangular.js-257e97a65f7dd794faa5d8c0d72bbd5a894cb471.tar.bz2
Support substring matching of bindings with repeater(). Closes #123
Diffstat (limited to 'src')
-rw-r--r--src/scenario/Scenario.js28
-rw-r--r--src/scenario/SpecRunner.js1
-rw-r--r--src/scenario/dsl.js43
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());
});
};