diff options
| -rw-r--r-- | src/scenario/Scenario.js | 9 | ||||
| -rw-r--r-- | src/scenario/dsl.js | 5 | ||||
| -rw-r--r-- | test/scenario/dslSpec.js | 14 |
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(); |
