rest-parameter.js (1379B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 // Simple functional test for destructuring rest parameters. 6 7 function arrayRest(...[a, b]) { 8 return a + b; 9 } 10 assertEq(arrayRest(3, 7), 10); 11 12 13 function arrayRestWithDefault(...[a, b = 1]) { 14 return a + b; 15 } 16 assertEq(arrayRestWithDefault(3, 7), 10); 17 assertEq(arrayRestWithDefault(4), 5); 18 assertEq(arrayRestWithDefault(4, undefined), 5); 19 20 21 function objectRest(...{length: len}) { 22 return len; 23 } 24 assertEq(objectRest(), 0); 25 assertEq(objectRest(10), 1); 26 assertEq(objectRest(10, 20), 2); 27 28 29 function objectRestWithDefault(...{0: a, 1: b = 1}) { 30 return a + b; 31 } 32 assertEq(objectRestWithDefault(3, 7), 10); 33 assertEq(objectRestWithDefault(4), 5); 34 assertEq(objectRestWithDefault(4, undefined), 5); 35 36 37 function arrayRestWithNestedRest(...[...r]) { 38 return r.length; 39 } 40 assertEq(arrayRestWithNestedRest(), 0); 41 assertEq(arrayRestWithNestedRest(10), 1); 42 assertEq(arrayRestWithNestedRest(10, 20), 2); 43 44 45 function arrayRestTDZ(...[a = a]) { } 46 assertThrowsInstanceOf(() => arrayRestTDZ(), ReferenceError); 47 48 49 function objectRestTDZ(...{a = a}) { } 50 assertThrowsInstanceOf(() => objectRestTDZ(), ReferenceError); 51 52 53 if (typeof reportCompare === "function") 54 reportCompare(0, 0);