1425bb815Sopenharmony_ci// Copyright JS Foundation and other contributors, http://js.foundation 2425bb815Sopenharmony_ci// 3425bb815Sopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License"); 4425bb815Sopenharmony_ci// you may not use this file except in compliance with the License. 5425bb815Sopenharmony_ci// You may obtain a copy of the License at 6425bb815Sopenharmony_ci// 7425bb815Sopenharmony_ci// http://www.apache.org/licenses/LICENSE-2.0 8425bb815Sopenharmony_ci// 9425bb815Sopenharmony_ci// Unless required by applicable law or agreed to in writing, software 10425bb815Sopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS 11425bb815Sopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12425bb815Sopenharmony_ci// See the License for the specific language governing permissions and 13425bb815Sopenharmony_ci// limitations under the License. 14425bb815Sopenharmony_ci 15425bb815Sopenharmony_cifunction assertArrayEqual (actual, expected) { 16425bb815Sopenharmony_ci assert (actual.length === expected.length); 17425bb815Sopenharmony_ci 18425bb815Sopenharmony_ci for (var i = 0; i < actual.length; i++) { 19425bb815Sopenharmony_ci assert (actual[i] === expected[i]); 20425bb815Sopenharmony_ci } 21425bb815Sopenharmony_ci} 22425bb815Sopenharmony_ci 23425bb815Sopenharmony_cifunction checkSyntax (str) { 24425bb815Sopenharmony_ci try { 25425bb815Sopenharmony_ci eval (str); 26425bb815Sopenharmony_ci assert (false); 27425bb815Sopenharmony_ci } catch (e) { 28425bb815Sopenharmony_ci assert (e instanceof SyntaxError); 29425bb815Sopenharmony_ci } 30425bb815Sopenharmony_ci} 31425bb815Sopenharmony_ci 32425bb815Sopenharmony_cifunction mustThrow (str) { 33425bb815Sopenharmony_ci try { 34425bb815Sopenharmony_ci eval (str); 35425bb815Sopenharmony_ci assert (false); 36425bb815Sopenharmony_ci } catch (e) { 37425bb815Sopenharmony_ci assert (e instanceof TypeError); 38425bb815Sopenharmony_ci } 39425bb815Sopenharmony_ci} 40425bb815Sopenharmony_ci 41425bb815Sopenharmony_cicheckSyntax ("{...a}"); 42425bb815Sopenharmony_cicheckSyntax ("...a"); 43425bb815Sopenharmony_cicheckSyntax ("[...]"); 44425bb815Sopenharmony_cicheckSyntax ("[...(...)]"); 45425bb815Sopenharmony_cicheckSyntax ("[......]"); 46425bb815Sopenharmony_ci 47425bb815Sopenharmony_cimustThrow ("[...5]"); 48425bb815Sopenharmony_cimustThrow ("[...5, 'foo', 'bar']"); 49425bb815Sopenharmony_cimustThrow ("[...{}]"); 50425bb815Sopenharmony_cimustThrow ("[...{ get [Symbol.iterator] () { throw new TypeError } }]"); 51425bb815Sopenharmony_cimustThrow ("[...{ [Symbol.iterator] () {} }, 'foo']"); 52425bb815Sopenharmony_cimustThrow ("[...{ [Symbol.iterator] () { return {} } }]"); 53425bb815Sopenharmony_cimustThrow ("[...{ [Symbol.iterator] () { return { next: 5 } } }]"); 54425bb815Sopenharmony_cimustThrow ("[...{ [Symbol.iterator] () { return { next: 5 } } }], 'foo'"); 55425bb815Sopenharmony_cimustThrow ("[...{ [Symbol.iterator] () { return { get next() { throw new TypeError } } } }]"); 56425bb815Sopenharmony_cimustThrow ("[...{ [Symbol.iterator] () { return { next () { } } } }]"); 57425bb815Sopenharmony_cimustThrow ("[...{ [Symbol.iterator] () { return { next () { } } } }, 'foo']"); 58425bb815Sopenharmony_cimustThrow ("[...{ [Symbol.iterator] () { return { next () { return { get value () { throw new TypeError } } } } } } ]"); 59425bb815Sopenharmony_cimustThrow ("[...{ [Symbol.iterator] () { return { next () { return { get done () { throw new TypeError } } } } } } ]"); 60425bb815Sopenharmony_ci 61425bb815Sopenharmony_civar arr1 = [0, 1, 2]; 62425bb815Sopenharmony_civar arr2 = [3, 4, 5]; 63425bb815Sopenharmony_civar arr3 = [{}, {}, {}]; 64425bb815Sopenharmony_civar expected = [0, 1, 2, 3 ,4, 5]; 65425bb815Sopenharmony_ci 66425bb815Sopenharmony_ciassertArrayEqual ([...arr1, ...arr2], [0, 1, 2, 3 ,4, 5]); 67425bb815Sopenharmony_ciassertArrayEqual ([...arr2, ...arr1], [3 ,4, 5, 0, 1, 2]); 68425bb815Sopenharmony_ciassertArrayEqual ([...arr1, 9, 9, 9, ...arr2], [0, 1, 2, 9, 9, 9, 3 ,4, 5]); 69425bb815Sopenharmony_ciassertArrayEqual ([...arr1, ...[...arr2]], [0, 1, 2, 3 ,4, 5]); 70425bb815Sopenharmony_ciassertArrayEqual (["0" , "1", ...arr1, ...[...arr2]], ["0", "1", 0, 1, 2, 3 ,4, 5]); 71425bb815Sopenharmony_ciassertArrayEqual ([...arr3], arr3); 72425bb815Sopenharmony_ciassertArrayEqual ([..."foobar"], ["f", "o", "o", "b", "a" ,"r"]); 73425bb815Sopenharmony_ciassertArrayEqual ([...(new Set([1, "foo", arr3]))], [1, "foo", arr3]); 74425bb815Sopenharmony_ci 75425bb815Sopenharmony_civar holyArray = [,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,...arr1]; 76425bb815Sopenharmony_ciassert (holyArray.length === 83); 77425bb815Sopenharmony_ciassert (holyArray[82] === 2); 78425bb815Sopenharmony_ciassert (holyArray[81] === 1); 79425bb815Sopenharmony_ciassert (holyArray[80] === 0); 80