| Index: test/mjsunit/array-iteration.js
|
| diff --git a/test/mjsunit/array-iteration.js b/test/mjsunit/array-iteration.js
|
| index d11f984bee43be0a7e54794c52d2e05421bd74bb..1acffbf8cd8476f66ab64f4b9382cd5333e3fd93 100644
|
| --- a/test/mjsunit/array-iteration.js
|
| +++ b/test/mjsunit/array-iteration.js
|
| @@ -68,6 +68,22 @@
|
| assertEquals(3, count);
|
| for (var i in a) assertEquals(2, a[i]);
|
|
|
| + // Create a new object in each function call when receiver is a
|
| + // primitive value. See ECMA-262, Annex C.
|
| + a = [];
|
| + [1, 2].filter(function() { a.push(this) }, "");
|
| + assertTrue(a[0] !== a[1]);
|
| +
|
| + // Do not create a new object otherwise.
|
| + a = [];
|
| + [1, 2].filter(function() { a.push(this) }, {});
|
| + assertFalse(a[0] !== a[1]);
|
| +
|
| + // In strict mode primitive values should not be coerced to an object.
|
| + a = [];
|
| + [1, 2].filter(function() { 'use strict'; a.push(this); }, "");
|
| + assertTrue(a[0] === "" && a[0] === a[1]);
|
| +
|
| })();
|
|
|
|
|
| @@ -109,6 +125,22 @@
|
| a.forEach(function(n) { count++; });
|
| assertEquals(1, count);
|
|
|
| + // Create a new object in each function call when receiver is a
|
| + // primitive value. See ECMA-262, Annex C.
|
| + a = [];
|
| + [1, 2].forEach(function() { a.push(this) }, "");
|
| + assertTrue(a[0] !== a[1]);
|
| +
|
| + // Do not create a new object otherwise.
|
| + a = [];
|
| + [1, 2].forEach(function() { a.push(this) }, {});
|
| + assertFalse(a[0] !== a[1]);
|
| +
|
| + // In strict mode primitive values should not be coerced to an object.
|
| + a = [];
|
| + [1, 2].forEach(function() { 'use strict'; a.push(this); }, "");
|
| + assertTrue(a[0] === "" && a[0] === a[1]);
|
| +
|
| })();
|
|
|
|
|
| @@ -149,6 +181,22 @@
|
| assertTrue(a.every(function(n) { count++; return n == 2; }));
|
| assertEquals(2, count);
|
|
|
| + // Create a new object in each function call when receiver is a
|
| + // primitive value. See ECMA-262, Annex C.
|
| + a = [];
|
| + [1, 2].every(function() { a.push(this); return true; }, "");
|
| + assertTrue(a[0] !== a[1]);
|
| +
|
| + // Do not create a new object otherwise.
|
| + a = [];
|
| + [1, 2].every(function() { a.push(this); return true; }, {});
|
| + assertFalse(a[0] !== a[1]);
|
| +
|
| + // In strict mode primitive values should not be coerced to an object.
|
| + a = [];
|
| + [1, 2].every(function() { 'use strict'; a.push(this); return true; }, "");
|
| + assertTrue(a[0] === "" && a[0] === a[1]);
|
| +
|
| })();
|
|
|
| //
|
| @@ -186,6 +234,22 @@
|
| a = a.map(function(n) { return 2*n; });
|
| for (var i in a) assertEquals(4, a[i]);
|
|
|
| + // Create a new object in each function call when receiver is a
|
| + // primitive value. See ECMA-262, Annex C.
|
| + a = [];
|
| + [1, 2].map(function() { a.push(this) }, "");
|
| + assertTrue(a[0] !== a[1]);
|
| +
|
| + // Do not create a new object otherwise.
|
| + a = [];
|
| + [1, 2].map(function() { a.push(this) }, {});
|
| + assertFalse(a[0] !== a[1]);
|
| +
|
| + // In strict mode primitive values should not be coerced to an object.
|
| + a = [];
|
| + [1, 2].map(function() { 'use strict'; a.push(this); }, "");
|
| + assertTrue(a[0] === "" && a[0] === a[1]);
|
| +
|
| })();
|
|
|
| //
|
| @@ -224,4 +288,20 @@
|
| assertTrue(a.some(function(n) { count++; return n == 2; }));
|
| assertEquals(2, count);
|
|
|
| + // Create a new object in each function call when receiver is a
|
| + // primitive value. See ECMA-262, Annex C.
|
| + a = [];
|
| + [1, 2].some(function() { a.push(this) }, "");
|
| + assertTrue(a[0] !== a[1]);
|
| +
|
| + // Do not create a new object otherwise.
|
| + a = [];
|
| + [1, 2].some(function() { a.push(this) }, {});
|
| + assertFalse(a[0] !== a[1]);
|
| +
|
| + // In strict mode primitive values should not be coerced to an object.
|
| + a = [];
|
| + [1, 2].some(function() { 'use strict'; a.push(this); }, "");
|
| + assertTrue(a[0] === "" && a[0] === a[1]);
|
| +
|
| })();
|
|
|