aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/scenario/DSL.js20
-rw-r--r--test/scenario/DSLSpec.js35
2 files changed, 50 insertions, 5 deletions
diff --git a/src/scenario/DSL.js b/src/scenario/DSL.js
index 26157059..13576824 100644
--- a/src/scenario/DSL.js
+++ b/src/scenario/DSL.js
@@ -50,6 +50,26 @@ angular.scenario.dsl.repeater = function(selector) {
return $scenario.addFuture(namePrefix + ' count', function(done) {
done(this.testDocument.find(selector).size());
});
+ },
+ collect: function() {
+ return $scenario.addFuture(namePrefix + ' collect', function(done) {
+ var doCollect = bind(this, function() {
+ var repeaterArray = [];
+ this.testDocument.find(selector).each(function(index) {
+ var element = angular.extend(_jQuery(this),
+ {bindings: [],
+ boundTo: function(name) { return this.bindings[name]; }}
+ );
+ element.find('*').each(function(index) {
+ var bindName = _jQuery(this).attr('ng:bind');
+ element.bindings[bindName] = _jQuery(this).text();
+ });
+ repeaterArray[index] = element;
+ });
+ return repeaterArray;
+ });
+ done(doCollect());
+ });
}
};
};
diff --git a/test/scenario/DSLSpec.js b/test/scenario/DSLSpec.js
index 47bedb80..64961e50 100644
--- a/test/scenario/DSLSpec.js
+++ b/test/scenario/DSLSpec.js
@@ -42,16 +42,41 @@ describe("DSL", function() {
var repeater = angular.scenario.dsl.repeater;
- it('should fetch the count of repeated elements', function() {
+ it('should count', function() {
var future = repeater('.repeater-row').count();
expect(future.name).toEqual("repeater '.repeater-row' count");
- executeFuture(future, "<div class='repeater-row'>a</div>" +
- "<div class='repeater-row'>b</div>",
- function(value) {
- future.fulfill(value);
+ executeFuture(future,
+ "<div class='repeater-row'>a</div>" +
+ "<div class='repeater-row'>b</div>",
+ function(value) {
+ future.fulfill(value);
});
expect(future.fulfilled).toBeTruthy();
expect(future.value).toEqual(2);
});
+
+ it('should collect', function() {
+ var future = repeater('.epic').collect();
+ expect(future.name).toEqual("repeater '.epic' collect");
+ executeFuture(future,
+ "<table>" +
+ "<tr class='epic'>" +
+ "<td ng:bind='hero'>John Marston</td>" +
+ "<td ng:bind='game'>Red Dead Redemption</td>" +
+ "</tr>" +
+ "<tr class='epic'>" +
+ "<td ng:bind='hero'>Nathan Drake</td>" +
+ "<td ng:bind='game'>Uncharted 2</td>" +
+ "</tr>" +
+ "</table>",
+ function(value) {
+ future.fulfill(value);
+ });
+ expect(future.fulfilled).toBeTruthy();
+ expect(future.value[0].boundTo('hero')).toEqual('John Marston');
+ expect(future.value[0].boundTo('game')).toEqual('Red Dead Redemption');
+ expect(future.value[1].boundTo('hero')).toEqual('Nathan Drake');
+ expect(future.value[1].boundTo('game')).toEqual('Uncharted 2');
+ });
});
});