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); |
+})(); |