tor-browser

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

bound-construct-scripted.js (2189B)


      1 function testNewTargetGuard() {
      2  var weirdNewTarget = function() {};
      3  var fun = function() { return new.target; };
      4  var boundFun = fun.bind(null);
      5  for (var i = 0; i < 60; i++) {
      6    var newTarget = i < 40 ? boundFun : weirdNewTarget;
      7    var res = Reflect.construct(boundFun, [], newTarget);
      8    assertEq(res, i < 40 ? fun : weirdNewTarget);
      9  }
     10 }
     11 testNewTargetGuard();
     12 
     13 function testPrototypeGuard() {
     14  var fun = function() {};
     15  var boundFun = fun.bind(null);
     16  var customPrototype1 = {};
     17  var customPrototype2 = {};
     18  fun.prototype = customPrototype1;
     19 
     20  for (var i = 0; i < 60; i++) {
     21    if (i === 40) {
     22      fun.prototype = customPrototype2;
     23    }
     24    var res = new boundFun();
     25    assertEq(Object.getPrototypeOf(res), i < 40 ? customPrototype1 : customPrototype2);
     26  }
     27 }
     28 testPrototypeGuard();
     29 
     30 function testNonObjectPrototypeGuard() {
     31  var fun = function() {};
     32  var boundFun = fun.bind(null);
     33  fun.prototype = null;
     34  var customPrototype = {};
     35 
     36  for (var i = 0; i < 60; i++) {
     37    if (i === 40) {
     38      fun.prototype = customPrototype;
     39    }
     40    var res = new boundFun();
     41    assertEq(Object.getPrototypeOf(res), i < 40 ? Object.prototype : customPrototype);
     42  }
     43 }
     44 testNonObjectPrototypeGuard();
     45 
     46 function testObjectReturnValue() {
     47  var fun = function() { return Math; };
     48  var boundFun = fun.bind(null);
     49  for (var i = 0; i < 60; i++) {
     50    var res = new boundFun();
     51    assertEq(res, Math);
     52  }
     53 }
     54 testObjectReturnValue();
     55 
     56 function testManyArgs() {
     57  var fun = function(a, b, c, d, e, f, g, h, i, j) {
     58    this.values = [a, b, c, d, e, f, g, h, i, j].join(",");
     59  };
     60  var boundFun1 = fun.bind(null, 1, 2);
     61  var boundFun2 = fun.bind(null, 1, 2, 3, 4, 5, 6);
     62  for (var i = 0; i < 60; i++) {
     63    assertEq(new boundFun1().values, "1,2,,,,,,,,");
     64    assertEq(new boundFun1(10, 11, 12, 13, 14).values, "1,2,10,11,12,13,14,,,");
     65    assertEq(new boundFun1(10, 11, 12, 13, 14, 15, 16, 17).values, "1,2,10,11,12,13,14,15,16,17");
     66 
     67    assertEq(new boundFun2().values, "1,2,3,4,5,6,,,,");
     68    assertEq(new boundFun2(10, 11).values, "1,2,3,4,5,6,10,11,,");
     69    assertEq(new boundFun2(10, 11, 12, 13, 14, 15, 16, 17).values, "1,2,3,4,5,6,10,11,12,13");
     70  }
     71 }
     72 testManyArgs();