aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgor Minar2011-01-23 15:55:11 -0800
committerIgor Minar2011-01-24 14:03:42 -0800
commit5340d1e0b1c29103e187a1cdc33bbee48d98a74d (patch)
tree81371510596d7ac7aa4300f16fa58c92527f298a
parent8d91ec4173a652da9fe984d12a50d6b1b4ef935f (diff)
downloadangular.js-5340d1e0b1c29103e187a1cdc33bbee48d98a74d.tar.bz2
fix for infinite loop in retrieveScope with jQuery + specs
- retrieveScope run into infinite loop if called on DOM tree that doesn't contain scope reference (happens only with jQuery) - added missing specs for retrieveScope function
-rw-r--r--src/Compiler.js2
-rw-r--r--test/CompilerSpec.js19
2 files changed, 20 insertions, 1 deletions
diff --git a/src/Compiler.js b/src/Compiler.js
index 3f5ba9e1..58a7a47b 100644
--- a/src/Compiler.js
+++ b/src/Compiler.js
@@ -75,7 +75,7 @@ Template.prototype = {
function retrieveScope(element) {
var scope;
element = jqLite(element);
- while (element && !(scope = element.data($$scope))) {
+ while (element && element.length && !(scope = element.data($$scope))) {
element = element.parent();
}
return scope;
diff --git a/test/CompilerSpec.js b/test/CompilerSpec.js
index d8c7c1b8..76d3d1ca 100644
--- a/test/CompilerSpec.js
+++ b/test/CompilerSpec.js
@@ -167,4 +167,23 @@ describe('compiler', function(){
expect(sortedHtml(scope.$element)).toEqual('<div>A<hr></hr>B<hr></hr>C<p></p>D</div>');
});
+
+ describe('retrieveScope', function() {
+ it('should retrieve scope attached to the current element', function() {
+ scope = compile('<i>foo</i>');
+ expect(retrieveScope(scope.$element)).toBe(scope);
+ });
+
+ it('should walk up the dom to find scope', function() {
+ scope = compile('<ul><li><p><b>deep deep</b><p></li></ul>');
+ var deepChild = scope.$element[0].getElementsByTagName('b')[0];
+ expect(retrieveScope(deepChild)).toBe(scope);
+ });
+
+ it('should return undefined when no scope was found', function() {
+ var html = jqLite('<ul><li><p><b>deep deep</b><p></li></ul>'),
+ deepChild = html[0].getElementsByTagName('b')[0];
+ expect(retrieveScope(deepChild)).toBeNull();
+ });
+ });
});