aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorIgor Minar2013-02-11 12:25:34 -0800
committerIgor Minar2013-02-11 12:46:13 -0800
commit8801d9c2865ae74db4f4ce755764a9f46c49c9f8 (patch)
tree4b74a5f70a04d44e923205e6336a079a0311bc85 /test
parenta8e114f3516b513be4eea2b0a9b5d1817c2d8a2a (diff)
downloadangular.js-8801d9c2865ae74db4f4ce755764a9f46c49c9f8.tar.bz2
fix(angular.forEach): correctly iterate over objects with length prop
Should handle JQLite, jQuery, NodeList and other objects like arrays but not other generic objects or instances of user defined types with length property. Closes #1840
Diffstat (limited to 'test')
-rw-r--r--test/AngularSpec.js73
1 files changed, 72 insertions, 1 deletions
diff --git a/test/AngularSpec.js b/test/AngularSpec.js
index 09bc902f..e29bb16b 100644
--- a/test/AngularSpec.js
+++ b/test/AngularSpec.js
@@ -257,7 +257,7 @@ describe('angular', function() {
function MyObj() {
this.bar = 'barVal';
this.baz = 'bazVal';
- };
+ }
MyObj.prototype.foo = 'fooVal';
var obj = new MyObj(),
@@ -267,6 +267,77 @@ describe('angular', function() {
expect(log).toEqual(['bar:barVal', 'baz:bazVal']);
});
+
+
+ it('should handle JQLite and jQuery objects like arrays', function() {
+ var jqObject = jqLite("<p><span>s1</span><span>s2</span></p>").find("span"),
+ log = [];
+
+ forEach(jqObject, function(value, key) { log.push(key + ':' + value.innerHTML)});
+ expect(log).toEqual(['0:s1', '1:s2']);
+ });
+
+
+ it('should handle NodeList objects like arrays', function() {
+ var nodeList = jqLite("<p><span>a</span><span>b</span><span>c</span></p>")[0].childNodes,
+ log = [];
+
+
+ forEach(nodeList, function(value, key) { log.push(key + ':' + value.innerHTML)});
+ expect(log).toEqual(['0:a', '1:b', '2:c']);
+ });
+
+
+ it('should handle HTMLCollection objects like arrays', function() {
+ document.body.innerHTML = "<p>" +
+ "<a name='x'>a</a>" +
+ "<a name='y'>b</a>" +
+ "<a name='x'>c</a>" +
+ "</p>";
+
+ var htmlCollection = document.getElementsByName('x'),
+ log = [];
+
+ forEach(htmlCollection, function(value, key) { log.push(key + ':' + value.innerHTML)});
+ expect(log).toEqual(['0:a', '1:c']);
+ });
+
+
+ it('should handle arguments objects like arrays', function() {
+ var args,
+ log = [];
+
+ (function(){ args = arguments}('a', 'b', 'c'));
+
+ forEach(args, function(value, key) { log.push(key + ':' + value)});
+ expect(log).toEqual(['0:a', '1:b', '2:c']);
+ });
+
+
+ it('should handle objects with length property as objects', function() {
+ var obj = {
+ 'foo' : 'bar',
+ 'length': 2
+ },
+ log = [];
+
+ forEach(obj, function(value, key) { log.push(key + ':' + value)});
+ expect(log).toEqual(['foo:bar', 'length:2']);
+ });
+
+
+ it('should handle objects of custom types with length property as objects', function() {
+ function CustomType() {
+ this.length = 2;
+ this.foo = 'bar'
+ }
+
+ var obj = new CustomType(),
+ log = [];
+
+ forEach(obj, function(value, key) { log.push(key + ':' + value)});
+ expect(log).toEqual(['length:2', 'foo:bar']);
+ });
});