tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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();