|
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 |
|
15 assertEqArray([...[undefined]], [undefined]); |
|
16 |
|
17 // other iterable objects |
|
18 assertEqArray([...new Int32Array([1, 2, 3])], [1, 2, 3]); |
|
19 assertEqArray([..."abc"], ["a", "b", "c"]); |
|
20 assertEqArray([...[1, 2, 3][std_iterator]()], [1, 2, 3]); |
|
21 assertEqArray([...Set([1, 2, 3])], [1, 2, 3]); |
|
22 assertEqArray([...Map([["a", "A"], ["b", "B"], ["c", "C"]])].map(([k, v]) => k + v), ["aA", "bB", "cC"]); |
|
23 let itr = {}; |
|
24 itr[std_iterator] = function () { |
|
25 return { |
|
26 i: 1, |
|
27 next: function() { |
|
28 if (this.i < 4) |
|
29 return { value: this.i++, done: false }; |
|
30 else |
|
31 return { value: undefined, done: true }; |
|
32 } |
|
33 }; |
|
34 } |
|
35 assertEqArray([...itr], [1, 2, 3]); |
|
36 function* gen() { |
|
37 for (let i = 1; i < 4; i ++) |
|
38 yield i; |
|
39 } |
|
40 assertEqArray([...gen()], [1, 2, 3]); |
|
41 |
|
42 let a, b = [1, 2, 3]; |
|
43 assertEqArray([...a=b], [1, 2, 3]); |
|
44 |
|
45 // According to the draft spec, null and undefined are to be treated as empty |
|
46 // arrays. However, they are not iterable. If the spec is not changed to be in |
|
47 // terms of iterables, these tests should be fixed. |
|
48 //assertEqArray([1, ...null, 2], [1, 2]); |
|
49 //assertEqArray([1, ...undefined, 2], [1, 2]); |
|
50 assertThrowsInstanceOf(() => [...null], TypeError); |
|
51 assertThrowsInstanceOf(() => [...undefined], TypeError); |
|
52 |