aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authordanilsomsikov2013-01-11 18:21:13 +0100
committerIgor Minar2013-01-18 00:03:42 -0800
commit89303fd2dccb780bea594b16b8ec85d9f3bd8f92 (patch)
tree2ddf9d0f75562dc2a7fb119d222a75e3f4269950 /test
parent1f8be1ca66b312fdc396403f01ee8aae9371577a (diff)
downloadangular.js-89303fd2dccb780bea594b16b8ec85d9f3bd8f92.tar.bz2
fix(ngSwitch): don't leak when destroyed while not attached
The leak can occur when ngSwich is used inside ngRepeat or any other directive which is destroyed while its transcluded content (which includes ngSwitch) is not attached to the DOM. Refactor ngSwitch to use controller instead of storing data on compile node. This means that we don't need to clean up the jq data cache. Controller reference is released when the linking fn is released. Closes #1621
Diffstat (limited to 'test')
-rw-r--r--test/ng/directive/ngSwitchSpec.js15
1 files changed, 15 insertions, 0 deletions
diff --git a/test/ng/directive/ngSwitchSpec.js b/test/ng/directive/ngSwitchSpec.js
index 66ae5562..ee91f79d 100644
--- a/test/ng/directive/ngSwitchSpec.js
+++ b/test/ng/directive/ngSwitchSpec.js
@@ -90,4 +90,19 @@ describe('ngSwitch', function() {
expect(child2).toBeDefined();
expect(child2).not.toBe(child1);
}));
+
+
+ it('should not leak jq data when compiled but not attached to parent when parent is destroyed',
+ inject(function($rootScope, $compile) {
+ element = $compile(
+ '<div ng-repeat="i in []">' +
+ '<ng-switch on="url">' +
+ '<div ng-switch-when="a">{{name}}</div>' +
+ '</ng-switch>' +
+ '</div>')($rootScope);
+ $rootScope.$apply();
+
+ // element now contains only empty repeater. this element is dealocated by local afterEach.
+ // afterwards a global afterEach will check for leaks in jq data cache object
+ }));
});