spread-array.js (1699B)
1 load(libdir + "asserts.js"); 2 load(libdir + "iteration.js"); 3 load(libdir + "eqArrayHelper.js"); 4 5 assertEqArray([...[1, 2, 3]], [1, 2, 3]); 6 assertEqArray([1, ...[2, 3, 4], 5], [1, 2, 3, 4, 5]); 7 assertEqArray([1, ...[], 2], [1, 2]); 8 assertEqArray([1, ...[2, 3], 4, ...[5, 6]], [1, 2, 3, 4, 5, 6]); 9 assertEqArray([1, ...[], 2], [1, 2]); 10 assertEqArray([1,, ...[2]], [1,, 2]); 11 assertEqArray([1,, ...[2],, 3,, 4,], [1,, 2,, 3,, 4,]); 12 assertEqArray([...[1, 2, 3],,,,], [1, 2, 3,,,,]); 13 assertEqArray([,,...[1, 2, 3],,,,], [,,1,2,3,,,,]); 14 assertEqArray([...[1, 2, 3],,,,...[]], [1,2,3,,,,]); 15 16 assertEqArray([...[undefined]], [undefined]); 17 18 // other iterable objects 19 assertEqArray([...new Int32Array([1, 2, 3])], [1, 2, 3]); 20 assertEqArray([..."abc"], ["a", "b", "c"]); 21 assertEqArray([...[1, 2, 3][Symbol.iterator]()], [1, 2, 3]); 22 assertEqArray([...new Set([1, 2, 3])], [1, 2, 3]); 23 assertEqArray([...new Map([["a", "A"], ["b", "B"], ["c", "C"]])].map(([k, v]) => k + v), ["aA", "bB", "cC"]); 24 let itr = {}; 25 itr[Symbol.iterator] = function () { 26 return { 27 i: 1, 28 next: function() { 29 if (this.i < 4) 30 return { value: this.i++, done: false }; 31 else 32 return { value: undefined, done: true }; 33 } 34 }; 35 } 36 assertEqArray([...itr], [1, 2, 3]); 37 function* gen() { 38 for (let i = 1; i < 4; i ++) 39 yield i; 40 } 41 assertEqArray([...gen()], [1, 2, 3]); 42 43 let a, b = [1, 2, 3]; 44 assertEqArray([...a=b], [1, 2, 3]); 45 46 // 12.2.4.1.2 Runtime Semantics: ArrayAccumulation 47 // If Type(spreadObj) is not Object, then throw a TypeError exception. 48 assertThrowsInstanceOf(() => [...null], TypeError); 49 assertThrowsInstanceOf(() => [...undefined], TypeError);