fun-apply-null-undefined.js (2403B)
1 function testBasic() { 2 var thisVal = {}; 3 var arr = [1, 2, 3]; 4 var f = function() { 5 assertEq(this, thisVal); 6 assertEq(arguments.length, 0); 7 return 456; 8 }; 9 var boundMathAbs = Math.abs.bind(); 10 var boundArrayJoin = Array.prototype.join.bind(arr); 11 var boundArrayJoinArg = Array.prototype.join.bind(arr, "-"); 12 for (var i = 0; i < 100; i++) { 13 // Scripted callee. 14 assertEq(f.apply(thisVal), 456); 15 assertEq(f.apply(thisVal), 456); 16 assertEq(f.apply(thisVal, null), 456); 17 assertEq(f.apply(thisVal, undefined), 456); 18 19 // Native callee. 20 assertEq(Math.abs.apply(), NaN); 21 assertEq(Math.abs.apply(null), NaN); 22 assertEq(Math.abs.apply(null, null), NaN); 23 assertEq(Array.prototype.join.apply(arr), "1,2,3"); 24 assertEq(Array.prototype.join.apply(arr, null), "1,2,3"); 25 assertEq(Array.prototype.join.apply(arr, undefined), "1,2,3"); 26 27 // Bound native callee. 28 assertEq(boundMathAbs.apply(), NaN); 29 assertEq(boundMathAbs.apply(null), NaN); 30 assertEq(boundMathAbs.apply(null, null), NaN); 31 assertEq(boundMathAbs.apply(null, undefined), NaN); 32 assertEq(boundArrayJoin.apply(), "1,2,3"); 33 assertEq(boundArrayJoin.apply(null), "1,2,3"); 34 assertEq(boundArrayJoin.apply(null, null), "1,2,3"); 35 assertEq(boundArrayJoin.apply(null, undefined), "1,2,3"); 36 assertEq(boundArrayJoinArg.apply(), "1-2-3"); 37 assertEq(boundArrayJoinArg.apply(null), "1-2-3"); 38 assertEq(boundArrayJoinArg.apply(null, null), "1-2-3"); 39 assertEq(boundArrayJoinArg.apply(null, undefined), "1-2-3"); 40 } 41 } 42 testBasic(); 43 44 function testUndefinedGuard() { 45 var f = function() { return arguments.length; } 46 var arr = [-5, 5]; 47 var strings = ["a", "b"]; 48 var boundMathAbs = Math.abs.bind(); 49 var boundArrayJoin = Array.prototype.join.bind(strings); 50 for (var i = 0; i < 100; i++) { 51 var args = i < 50 ? undefined : arr; 52 assertEq(f.apply(null, args), i < 50 ? 0 : 2); 53 assertEq(Math.abs.apply(null, args), i < 50 ? NaN : 5); 54 assertEq(Array.prototype.join.apply(strings, args), i < 50 ? "a,b" : "a-5b"); 55 assertEq(boundMathAbs.apply(null, args), i < 50 ? NaN : 5); 56 assertEq(boundArrayJoin.apply(null, args), i < 50 ? "a,b" : "a-5b"); 57 } 58 } 59 testUndefinedGuard();