Index: test/mjsunit/harmony/collections.js |
diff --git a/test/mjsunit/harmony/collections.js b/test/mjsunit/harmony/collections.js |
index b33d08063d711491c1177600df5ac4f691c33ba5..59dbda31e47ba934c29af441712c3e2160196969 100644 |
--- a/test/mjsunit/harmony/collections.js |
+++ b/test/mjsunit/harmony/collections.js |
@@ -507,3 +507,147 @@ for (var i = 9; i >= 0; i--) { |
assertEquals('minus', m.get(0)); |
assertEquals('minus', m.get(-0)); |
})(); |
+ |
+ |
+(function TestSetForEach() { |
+ var set = new Set(); |
+ set.add('a'); |
+ set.add('b'); |
+ set.add('c'); |
+ |
+ var buffer = ''; |
+ var receiver = {}; |
+ set.forEach(function(v, k, s) { |
+ assertSame(v, k); |
+ assertSame(set, s); |
+ assertSame(this, receiver); |
+ buffer += v; |
+ if (v === 'a') { |
+ set.delete('b'); |
+ set.add('d'); |
+ set.add('e'); |
+ set.add('f'); |
+ } else if (v === 'c') { |
+ set.add('b'); |
+ set.delete('e'); |
+ } |
+ }, receiver); |
+ |
+ assertEquals('acdfb', buffer); |
+})(); |
+ |
+ |
+(function TestSetForEachClear() { |
+ var set = new Set(); |
+ set.add('a'); |
+ set.add('b'); |
+ set.add('c'); |
+ |
+ var buffer = ''; |
+ var receiver = {}; |
+ set.forEach(function(v, k, s) { |
+ assertSame(v, k); |
+ assertSame(set, s); |
+ assertSame(this, receiver); |
+ buffer += v; |
+ if (v === 'a') { |
+ set.clear(); |
+ set.add('d'); |
+ set.add('e'); |
+ } |
+ }, receiver); |
+ |
+ assertEquals('ade', buffer); |
+})(); |
+ |
+ |
+(function TestSetForEachNested() { |
+ var set = new Set(); |
+ set.add('a'); |
+ set.add('b'); |
+ set.add('c'); |
+ |
+ var buffer = ''; |
+ var receiver = {}; |
+ set.forEach(function(v) { |
+ buffer += v; |
+ set.forEach(function(v) { |
+ buffer += v; |
+ if (v === 'a') { |
+ set.delete('b'); |
+ } |
+ }); |
+ }); |
+ |
+ assertEquals('aaccac', buffer); |
+})(); |
+ |
+ |
+(function TestMapForEach() { |
+ var map = new Map(); |
+ map.set(0, 'a'); |
+ map.set(1, 'b'); |
+ map.set(2, 'c'); |
+ |
+ var buffer = []; |
+ var receiver = {}; |
+ map.forEach(function(v, k, m) { |
+ assertEquals(map, m); |
+ assertEquals(this, receiver); |
+ buffer.push(k, v); |
+ if (k === 0) { |
+ map.delete(1); |
+ map.set(3, 'd'); |
+ map.set(4, 'e'); |
+ map.set(5, 'f'); |
+ } else if (k === 2) { |
+ map.set(1, 'B'); |
+ map.delete(4); |
+ } |
+ }, receiver); |
+ |
+ assertArrayEquals([0, 'a', 2, 'c', 3, 'd', 5, 'f', 1, 'B'], buffer); |
+})(); |
+ |
+ |
+(function TestMapForEachClear() { |
+ var map = new Map(); |
+ map.set(0, 'a'); |
+ map.set(1, 'b'); |
+ map.set(2, 'c'); |
+ |
+ var buffer = []; |
+ var receiver = {}; |
+ map.forEach(function(v, k) { |
+ buffer.push(k, v); |
+ if (k === 0) { |
+ map.clear(); |
+ map.set(3, 'd'); |
+ map.set(4, 'e'); |
+ } |
+ }, receiver); |
+ |
+ assertArrayEquals([0, 'a', 3, 'd', 4, 'e'], buffer); |
+})(); |
+ |
+ |
+(function TestMapForEachNested() { |
+ var map = new Map(); |
+ map.set(0, 'a'); |
+ map.set(1, 'b'); |
+ map.set(2, 'c'); |
+ |
+ var buffer = []; |
+ var receiver = {}; |
+ map.forEach(function(v, k) { |
+ buffer.push(k, v); |
+ map.forEach(function(v, k) { |
+ buffer.push(k, v); |
+ if (k === 0) { |
+ map.delete(1); |
+ } |
+ }); |
+ }); |
+ |
+ assertArrayEquals([0, 'a', 0, 'a', 2, 'c', 2, 'c', 0, 'a', 2, 'c'], buffer); |
+})(); |