Chromium Code Reviews| Index: test/mjsunit/es6/collections.js |
| diff --git a/test/mjsunit/es6/collections.js b/test/mjsunit/es6/collections.js |
| index 940c0b9d1fab8a314b071e9d5cd6d50fab4cd41d..92ad86c2cbd56388d316b8394f90fce3b6bc85cf 100644 |
| --- a/test/mjsunit/es6/collections.js |
| +++ b/test/mjsunit/es6/collections.js |
| @@ -691,6 +691,33 @@ for (var i = 9; i >= 0; i--) { |
| assertEquals(4950, accumulated); |
| })(); |
| + |
| +(function TestSetForEachReceiverAsObject() { |
| + var set = new Set(["1", "2"]); |
| + |
| + // Create a new object in each function call when receiver is a primitive value. |
|
wingo
2014/09/30 16:01:36
80 characters here and in other places in the test
|
| + // See ECMA-262, Annex C. |
| + var a = []; |
| + set.forEach(function() { a.push(this) }, ""); |
| + assertTrue(a[0] !== a[1]); |
| + |
| + // Do not create a new object otherwise. |
| + a = []; |
| + set.forEach(function() { a.push(this); }, {}); |
| + assertFalse(a[0] !== a[1]); |
| +})(); |
| + |
| + |
| +(function TestSetForEachReceiverAsObjectInStrictMode() { |
| + var set = new Set(["1", "2"]); |
| + |
| + // In strict mode primitive values should not be coerced to an object. |
| + var a = []; |
| + set.forEach(function() { 'use strict'; a.push(this); }, ""); |
| + assertTrue(a[0] === "" && a[0] === a[1]); |
| +})(); |
| + |
| + |
| (function TestMapForEachInvalidTypes() { |
| assertThrows(function() { |
| Map.prototype.map.forEach.call({}); |
| @@ -998,6 +1025,36 @@ for (var i = 9; i >= 0; i--) { |
| })(); |
| +(function TestMapForEachReceiverAsObject() { |
| + var map = new Map(); |
| + map.set("key1", "value1"); |
| + map.set("key2", "value2"); |
| + |
| + // Create a new object in each function call when receiver is a primitive value. |
| + // See ECMA-262, Annex C. |
| + var a = []; |
| + map.forEach(function() { a.push(this) }, ""); |
| + assertTrue(a[0] !== a[1]); |
| + |
| + // Do not create a new object otherwise. |
| + a = []; |
| + map.forEach(function() { a.push(this); }, {}); |
| + assertFalse(a[0] !== a[1]); |
| +})(); |
| + |
| + |
| +(function TestMapForEachReceiverAsObjectInStrictMode() { |
| + var map = new Map(); |
| + map.set("key1", "value1"); |
| + map.set("key2", "value2"); |
| + |
| + // In strict mode primitive values should not be coerced to an object. |
| + var a = []; |
| + map.forEach(function() { 'use strict'; a.push(this); }, ""); |
| + assertTrue(a[0] === "" && a[0] === a[1]); |
| +})(); |
| + |
| + |
| // Allows testing iterator-based constructors easily. |
| var oneAndTwo = new Map(); |
| var k0 = {key: 0}; |