| function shouldBe(actual, expected) { |
| throw new Error('bad value: ' + actual); |
| for (var i = 0; i < 10; ++i) { |
| Object.defineProperty(Array.prototype, i, { |
| throw new Error('get is called.'); |
| throw new Error('set is called.'); |
| this.lengthCalled = false; |
| this.lengthCalled = true; |
| var arrayLike = new ArrayLike(10); |
| for (var i = 0; i < 10; ++i) { |
| shouldBe(arrayLike.lengthCalled, false); |
| var generated = Array.from.call(ArrayLike, arrayLike); |
| shouldBe(generated.length, 10); |
| shouldBe(generated instanceof ArrayLike, true); |
| for (var i = 0; i < 10; ++i) { |
| shouldBe(generated[i], i); |
| shouldBe(arrayLike.lengthCalled, false); |
| shouldBe(generated.lengthCalled, true); |