aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/scenario/Scenario.js9
-rw-r--r--src/scenario/dsl.js5
-rw-r--r--test/scenario/dslSpec.js14
3 files changed, 24 insertions, 4 deletions
diff --git a/src/scenario/Scenario.js b/src/scenario/Scenario.js
index 149a0f09..420345f6 100644
--- a/src/scenario/Scenario.js
+++ b/src/scenario/Scenario.js
@@ -298,9 +298,14 @@ function browserTrigger(element, type) {
var parentTrigger = fn.trigger;
fn.trigger = function(type) {
if (/(click|change|keydown)/.test(type)) {
- return this.each(function(index, node) {
- browserTrigger(node, type);
+ var processDefaults = [];
+ this.each(function(index, node) {
+ processDefaults.push(browserTrigger(node, type));
});
+
+ // this is not compatible with jQuery - we return an array of returned values,
+ // so that scenario runner know whether JS code has preventDefault() of the event or not...
+ return processDefaults;
}
return parentTrigger.apply(this, arguments);
};
diff --git a/src/scenario/dsl.js b/src/scenario/dsl.js
index 2190f7f7..946f56d3 100644
--- a/src/scenario/dsl.js
+++ b/src/scenario/dsl.js
@@ -323,8 +323,9 @@ angular.scenario.dsl('element', function() {
return this.addFutureAction("element '" + this.label + "' click", function($window, $document, done) {
var elements = $document.elements();
var href = elements.attr('href');
- elements.trigger('click');
- if (href && elements[0].nodeName.toUpperCase() === 'A') {
+ var eventProcessDefault = elements.trigger('click')[0];
+
+ if (href && elements[0].nodeName.toUpperCase() === 'A' && eventProcessDefault) {
this.application.navigateTo(href, function() {
done();
}, done);
diff --git a/test/scenario/dslSpec.js b/test/scenario/dslSpec.js
index 5485fe52..8e22e469 100644
--- a/test/scenario/dslSpec.js
+++ b/test/scenario/dslSpec.js
@@ -250,6 +250,20 @@ describe("angular.scenario.dsl", function() {
expect($window.location).toMatch(/#foo$/);
});
+ it('should not navigate if click event was cancelled', function() {
+ var initLocation = $window.location,
+ elm = jqLite('<a href="#foo"></a>');
+
+ doc.append(elm);
+ elm.bind('click', function(event) {
+ event.preventDefault();
+ });
+
+ $root.dsl.element('a').click();
+ expect($window.location).toBe(initLocation);
+ dealoc(elm);
+ });
+
it('should count matching elements', function() {
doc.append('<span></span><span></span>');
$root.dsl.element('span').count();