testIsCallable.js (2808B)
1 // |jit-test| --ion-warmup-threshold=50 2 3 var IsCallable = getSelfHostedValue("IsCallable"); 4 5 function testSinglePrimitive() { 6 var f1 = function() { assertEq(IsCallable(undefined), false); }; 7 do { f1(); } while (!inIon()); 8 9 var f2 = function() { assertEq(IsCallable(null), false); }; 10 do { f2(); } while (!inIon()); 11 12 var f3 = function() { assertEq(IsCallable(true), false); }; 13 do { f3(); } while (!inIon()); 14 15 var f4 = function() { assertEq(IsCallable(1), false); }; 16 do { f4(); } while (!inIon()); 17 18 var f5 = function() { assertEq(IsCallable(1.2), false); }; 19 do { f5(); } while (!inIon()); 20 21 var f6 = function() { assertEq(IsCallable("foo"), false); }; 22 do { f6(); } while (!inIon()); 23 24 var f7 = function() { assertEq(IsCallable(Symbol.iterator), false); }; 25 do { f7(); } while (!inIon()); 26 } 27 testSinglePrimitive(); 28 29 function testMixedPrimitive() { 30 var list = [ 31 undefined, 32 null, 33 true, 34 1, 35 1.2, 36 "foo", 37 Symbol.iterator, 38 ]; 39 40 var f1 = function() { 41 for (let x of list) { 42 assertEq(IsCallable(x), false); 43 } 44 }; 45 do { f1(); } while (!inIon()); 46 } 47 testMixedPrimitive(); 48 49 function testSingleObject() { 50 var obj = []; 51 var arr = []; 52 53 var f1 = function() { assertEq(IsCallable(obj), false); }; 54 do { f1(); } while (!inIon()); 55 56 var f2 = function() { assertEq(IsCallable(arr), false); }; 57 do { f2(); } while (!inIon()); 58 } 59 testSingleObject(); 60 61 function testMixedPrimitiveAndObject() { 62 var list = [ 63 undefined, 64 null, 65 true, 66 1, 67 1.2, 68 "foo", 69 Symbol.iterator, 70 71 {}, 72 [], 73 ]; 74 75 var f1 = function() { 76 for (let x of list) { 77 assertEq(IsCallable(x), false); 78 } 79 }; 80 do { f1(); } while (!inIon()); 81 } 82 testMixedPrimitiveAndObject(); 83 84 function testFunction() { 85 var f1 = function() { assertEq(IsCallable(Function), true); }; 86 do { f1(); } while (!inIon()); 87 88 var f2 = function() { assertEq(IsCallable(parseInt), true); }; 89 do { f2(); } while (!inIon()); 90 } 91 testFunction(); 92 93 function testProxy() { 94 var p1 = new Proxy({}, {}); 95 var f1 = function() { assertEq(IsCallable(p1), false); }; 96 do { f1(); } while (!inIon()); 97 98 var p2 = new Proxy(function() {}, {}); 99 var f2 = function() { assertEq(IsCallable(p2), true); }; 100 do { f2(); } while (!inIon()); 101 } 102 testProxy(); 103 104 function testMixed() { 105 var p1 = new Proxy({}, {}); 106 var p2 = new Proxy(function() {}, {}); 107 108 var list = [ 109 [undefined, false], 110 [null, false], 111 [true, false], 112 [1, false], 113 [1.2, false], 114 ["foo", false], 115 [Symbol.iterator, false], 116 117 [{}, false], 118 [[], false], 119 120 [Function, true], 121 [parseInt, true], 122 123 [p1, false], 124 [p2, true], 125 ]; 126 127 var f1 = function() { 128 for (let [x, expected] of list) { 129 assertEq(IsCallable(x), expected); 130 } 131 }; 132 do { f1(); } while (!inIon()); 133 } 134 testMixed();