Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit 675978f

Browse files
author
Shyam Seshadri
committed
Provide all jquery functions as futures
1 parent 275f036 commit 675978f

File tree

2 files changed

+42
-23
lines changed

2 files changed

+42
-23
lines changed

src/scenario/DSL.js

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -102,18 +102,30 @@ angular.scenario.dsl.repeater = function(selector) {
102102
};
103103

104104
angular.scenario.dsl.element = function(selector) {
105-
var nameSuffix = "element '" + selector + "'";
106-
return $scenario.addFuture('Find ' + nameSuffix, function(done) {
107-
var self = this, repeaterArray = [], ngBindPattern;
108-
var startIndex = selector.search(angular.scenario.dsl.NG_BIND_PATTERN);
109-
if (startIndex >= 0) {
110-
ngBindPattern = selector.substring(startIndex + 2, selector.length - 2);
111-
var element = this.testDocument.find('*').filter(function() {
112-
return self.jQuery(this).attr('ng:bind') == ngBindPattern;
113-
});
114-
done(element);
115-
} else {
116-
done(this.testDocument.find(selector));
117-
}
118-
});
105+
var namePrefix = "Element '" + selector + "'";
106+
var futureJquery = {};
107+
for (key in _jQuery.fn) {
108+
(function(){
109+
var jqFnName = key;
110+
var jqFn = _jQuery.fn[key];
111+
futureJquery[key] = function() {
112+
var jqArgs = arguments;
113+
return $scenario.addFuture(namePrefix + "." + jqFnName + "()",
114+
function(done) {
115+
var self = this, repeaterArray = [], ngBindPattern;
116+
var startIndex = selector.search(angular.scenario.dsl.NG_BIND_PATTERN);
117+
if (startIndex >= 0) {
118+
ngBindPattern = selector.substring(startIndex + 2, selector.length - 2);
119+
var element = this.testDocument.find('*').filter(function() {
120+
return self.jQuery(this).attr('ng:bind') == ngBindPattern;
121+
});
122+
done(jqFn.apply(element, jqArgs));
123+
} else {
124+
done(jqFn.apply(this.testDocument.find(selector), jqArgs));
125+
}
126+
});
127+
};
128+
})();
129+
}
130+
return futureJquery;
119131
};

test/scenario/DSLSpec.js

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -159,20 +159,27 @@ describe("DSL", function() {
159159
expect(future.fulfilled).toBeTruthy();
160160
}
161161
it('should find elements on the page and provide jquery api', function() {
162-
var future = element('.reports-detail');
163-
expect(future.name).toEqual("Find element '.reports-detail'");
162+
var future = element('.reports-detail').text();
163+
expect(future.name).toEqual("Element '.reports-detail'.text()");
164164
timeTravel(future);
165-
expect(future.value.text()).
165+
expect(future.value).
166166
toEqual('Description : Details...Date created: 01/01/01');
167-
expect(future.value.find('.desc').text()).
168-
toEqual('Description : Details...');
167+
// expect(future.value.find('.desc').text()).
168+
// toEqual('Description : Details...');
169169
});
170170
it('should find elements with angular syntax', function() {
171-
var future = element('{{report.description}}');
172-
expect(future.name).toEqual("Find element '{{report.description}}'");
171+
var future = element('{{report.description}}').text();
172+
expect(future.name).toEqual("Element '{{report.description}}'.text()");
173173
timeTravel(future);
174-
expect(future.value.text()).toEqual('Details...');
175-
expect(future.value.attr('ng:bind')).toEqual('report.description');
174+
expect(future.value).toEqual('Details...');
175+
// expect(future.value.attr('ng:bind')).toEqual('report.description');
176+
});
177+
it('should be able to click elements', function(){
178+
var future = element('.link-class').click();
179+
expect(future.name).toEqual("Element '.link-class'.click()");
180+
executeFuture(future, html, function(value) { future.fulfill(value); });
181+
expect(future.fulfilled).toBeTruthy();
182+
// TODO(rajat): look for some side effect from click happening?
176183
});
177184
});
178185
});

0 commit comments

Comments
 (0)