| Index: test/mjsunit/es6/spread-call.js
|
| diff --git a/test/mjsunit/es6/spread-call.js b/test/mjsunit/es6/spread-call.js
|
| index 05e17741d6862886be52ea2abe502bb798716fe8..b806c7814194840d023ef9b84ce1c9e0cfdeddcc 100644
|
| --- a/test/mjsunit/es6/spread-call.js
|
| +++ b/test/mjsunit/es6/spread-call.js
|
| @@ -346,6 +346,58 @@
|
| assertEquals("ABXYC1C2DEBXYC1C2", log);
|
| })();
|
|
|
| +(function testArrayHasOtherPrototype() {
|
| + function countArgs() { return arguments.length; }
|
| + var a = [1, 2, 3];
|
| + var b = {};
|
| + Object.defineProperty(b, Symbol.iterator, {
|
| + value: function*() {
|
| + yield 4;
|
| + },
|
| + configurable: true
|
| + });
|
| +
|
| + Object.setPrototypeOf(a, b);
|
| +
|
| + assertEquals(1, countArgs(...a));
|
| +})();
|
| +
|
| +(function testArrayIteratorPrototypeGetter() {
|
| + function countArgs() { return arguments.length; }
|
| + var a = [1, 2, 3];
|
| + var ai = a[Symbol.iterator]();
|
| + var called = 0;
|
| +
|
| + var original_next = ai.__proto__["next"];
|
| +
|
| + Object.defineProperty(ai.__proto__, "next", {
|
| + get: function() {
|
| + called++;
|
| + return original_next;
|
| + }
|
| + });
|
| +
|
| + countArgs(...a);
|
| +
|
| + // should be called 4 times; 3 for the values, 1 for the final
|
| + // {value: undefined, done: true} pair
|
| + assertEquals(4, called);
|
| +})();
|
| +
|
| +(function testArrayIteratorPrototypeModified() {
|
| + function countArgs() { return arguments.length; }
|
| + var a = [1,2,3];
|
| + var ai = a[Symbol.iterator]();
|
| + Object.defineProperty(ai.__proto__, "next", {
|
| + value: function() {
|
| + return {value: undefined, done: true};
|
| + },
|
| + configurable: true
|
| + });
|
| +
|
| + assertEquals(0, countArgs(...a));
|
| +
|
| +})();
|
|
|
| (function testCustomArrayPrototypeIterator() {
|
| var origIterator =
|
| @@ -370,3 +422,29 @@
|
|
|
| Object.defineProperty(Array.prototype, Symbol.iterator, origIterator);
|
| })();
|
| +
|
| +(function testGetPropertyIteratorCalledExactlyOnce() {
|
| + function countArgs() { return arguments.length; }
|
| + var a = [1, 2, 3];
|
| + var called = 0;
|
| +
|
| + Object.defineProperty(Array.prototype, Symbol.iterator, {
|
| + value: function*() {
|
| + yield 1;
|
| + yield 2;
|
| + },
|
| + configurable: true
|
| + });
|
| +
|
| + var it = a[Symbol.iterator];
|
| + Object.defineProperty(a, Symbol.iterator, {
|
| + get: function() {
|
| + called++;
|
| + return it;
|
| + }
|
| + });
|
| +
|
| + countArgs(...a);
|
| +
|
| + assertEquals(1, called);
|
| +})();
|
|
|