iter-set-length.js (1161B)
1 // Copyright (C) 2015 the V8 project authors. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 /*--- 4 esid: sec-array.from 5 description: Setting length of object (traversed via iterator) 6 info: | 7 [...] 8 6. If usingIterator is not undefined, then 9 [...] 10 g. Repeat 11 [...] 12 iv. If next is false, then 13 1. Let setStatus be Set(A, "length", k, true). 14 2. ReturnIfAbrupt(setStatus). 15 3. Return A. 16 features: [Symbol.iterator] 17 ---*/ 18 19 var items = {}; 20 var result, nextIterResult, lastIterResult; 21 items[Symbol.iterator] = function() { 22 return { 23 next: function() { 24 var result = nextIterResult; 25 nextIterResult = lastIterResult; 26 return result; 27 } 28 }; 29 }; 30 31 nextIterResult = lastIterResult = { 32 done: true 33 }; 34 result = Array.from(items); 35 36 assert.sameValue(result.length, 0, 'The value of result.length is expected to be 0'); 37 38 nextIterResult = { 39 done: false 40 }; 41 lastIterResult = { 42 done: true 43 }; 44 result = Array.from(items); 45 46 assert.sameValue(result.length, 1, 'The value of result.length is expected to be 1'); 47 48 reportCompare(0, 0);