rest-parameter-arguments.js (3165B)
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 // Ensure the |arguments| object works as expected when a destructuring rest 6 // parameter is present. 7 8 // |arguments.length| with destructuring rest array. 9 function argsLengthEmptyRestArray(...[]) { 10 return arguments.length; 11 } 12 assertEq(argsLengthEmptyRestArray(), 0); 13 assertEq(argsLengthEmptyRestArray(10), 1); 14 assertEq(argsLengthEmptyRestArray(10, 20), 2); 15 16 function argsLengthRestArray(...[a]) { 17 return arguments.length; 18 } 19 assertEq(argsLengthRestArray(), 0); 20 assertEq(argsLengthRestArray(10), 1); 21 assertEq(argsLengthRestArray(10, 20), 2); 22 23 function argsLengthRestArrayWithDefault(...[a = 0]) { 24 return arguments.length; 25 } 26 assertEq(argsLengthRestArrayWithDefault(), 0); 27 assertEq(argsLengthRestArrayWithDefault(10), 1); 28 assertEq(argsLengthRestArrayWithDefault(10, 20), 2); 29 30 31 // |arguments.length| with destructuring rest object. 32 function argsLengthEmptyRestObject(...{}) { 33 return arguments.length; 34 } 35 assertEq(argsLengthEmptyRestObject(), 0); 36 assertEq(argsLengthEmptyRestObject(10), 1); 37 assertEq(argsLengthEmptyRestObject(10, 20), 2); 38 39 function argsLengthRestObject(...{a}) { 40 return arguments.length; 41 } 42 assertEq(argsLengthRestObject(), 0); 43 assertEq(argsLengthRestObject(10), 1); 44 assertEq(argsLengthRestObject(10, 20), 2); 45 46 function argsLengthRestObjectWithDefault(...{a = 0}) { 47 return arguments.length; 48 } 49 assertEq(argsLengthRestObjectWithDefault(), 0); 50 assertEq(argsLengthRestObjectWithDefault(10), 1); 51 assertEq(argsLengthRestObjectWithDefault(10, 20), 2); 52 53 54 // |arguments| access with destructuring rest array. 55 function argsAccessEmptyRestArray(...[]) { 56 return arguments[0]; 57 } 58 assertEq(argsAccessEmptyRestArray(), undefined); 59 assertEq(argsAccessEmptyRestArray(10), 10); 60 assertEq(argsAccessEmptyRestArray(10, 20), 10); 61 62 function argsAccessRestArray(...[a]) { 63 return arguments[0]; 64 } 65 assertEq(argsAccessRestArray(), undefined); 66 assertEq(argsAccessRestArray(10), 10); 67 assertEq(argsAccessRestArray(10, 20), 10); 68 69 function argsAccessRestArrayWithDefault(...[a = 0]) { 70 return arguments[0]; 71 } 72 assertEq(argsAccessRestArrayWithDefault(), undefined); 73 assertEq(argsAccessRestArrayWithDefault(10), 10); 74 assertEq(argsAccessRestArrayWithDefault(10, 20), 10); 75 76 77 // |arguments| access with destructuring rest object. 78 function argsAccessEmptyRestObject(...{}) { 79 return arguments[0]; 80 } 81 assertEq(argsAccessEmptyRestObject(), undefined); 82 assertEq(argsAccessEmptyRestObject(10), 10); 83 assertEq(argsAccessEmptyRestObject(10, 20), 10); 84 85 function argsAccessRestObject(...{a}) { 86 return arguments[0]; 87 } 88 assertEq(argsAccessRestObject(), undefined); 89 assertEq(argsAccessRestObject(10), 10); 90 assertEq(argsAccessRestObject(10, 20), 10); 91 92 function argsAccessRestObjectWithDefault(...{a = 0}) { 93 return arguments[0]; 94 } 95 assertEq(argsAccessRestObjectWithDefault(), undefined); 96 assertEq(argsAccessRestObjectWithDefault(10), 10); 97 assertEq(argsAccessRestObjectWithDefault(10, 20), 10); 98 99 100 if (typeof reportCompare === "function") 101 reportCompare(0, 0);