aboutsummaryrefslogtreecommitdiffstats
path: root/test/ng/compileSpec.js
diff options
context:
space:
mode:
authorjankuca2013-09-25 15:35:50 -0700
committerJeff Cross2013-09-26 15:01:35 -0700
commit6a8edc1d43aca7c5a92f86309b1bb1d5f9968442 (patch)
tree111213bf971c191f72f17558bfdca7313d3ae06f /test/ng/compileSpec.js
parent6cadabf910d86d72888b00db84989ba6d756ec88 (diff)
downloadangular.js-6a8edc1d43aca7c5a92f86309b1bb1d5f9968442.tar.bz2
fix($compile): collect ranges on multiple directives on one element
The problem was in keeping the values of `attrNameStart` and `attrNameEnd` between directive loop iterations which lead to the compiler looking for multi-element ranges for any directives that happened to be in the directive list after one that was applied on a range. For instance, having a ng-repeat-start and ng-class on a single element with ng-repeat being resolved first made the compiler look for an ng-repeat-end for both ng-repeat and ng-class because the `attrNameEnd` was not reset to a falsy value before the second iteration. As the result, an exception saying the block end element could not be found and the second directive was not actually applied. Closes #4002
Diffstat (limited to 'test/ng/compileSpec.js')
-rwxr-xr-xtest/ng/compileSpec.js32
1 files changed, 32 insertions, 0 deletions
diff --git a/test/ng/compileSpec.js b/test/ng/compileSpec.js
index d2643878..2d6485d9 100755
--- a/test/ng/compileSpec.js
+++ b/test/ng/compileSpec.js
@@ -3382,6 +3382,38 @@ describe('$compile', function() {
});
+ it('should correctly collect ranges on multiple directives on a single element', function () {
+ module(function($compileProvider) {
+ $compileProvider.directive('emptyDirective', function() {
+ return function (scope, element) {
+ element.data('x', 'abc');
+ };
+ });
+ $compileProvider.directive('rangeDirective', function() {
+ return {
+ link: function (scope) {
+ scope.x = 'X';
+ scope.y = 'Y';
+ }
+ };
+ });
+ });
+
+ inject(function ($compile, $rootScope) {
+ element = $compile(
+ '<div>' +
+ '<div range-directive-start empty-directive>{{x}}</div>' +
+ '<div range-directive-end>{{y}}</div>' +
+ '</div>'
+ )($rootScope);
+
+ $rootScope.$digest();
+ expect(element.text()).toBe('XY');
+ expect(angular.element(element[0].firstChild).data('x')).toBe('abc');
+ });
+ });
+
+
it('should throw error if unterminated (containing termination as a child)', function () {
module(function($compileProvider) {
$compileProvider.directive('foo', function() {