tor-browser

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

replace-global-lambda.js (1592B)


      1 "use strict";
      2 
      3 function testNoCaptureGroups() {
      4  var s = "a..bb.cba.";
      5  for (var i = 0; i < 20; i++) {
      6    var log = "";
      7    var res = s.replace(/a|b/g, function(...args) {
      8      assertEq(this, undefined);
      9      assertEq(args.length, 3);
     10      assertEq(args[2], s);
     11      log += "(" + args[0] + args[1] + ")";
     12      return "X";
     13    });
     14    assertEq(res, "X..XX.cXX.");
     15    assertEq(log, "(a0)(b3)(b4)(b7)(a8)");
     16  }
     17 }
     18 testNoCaptureGroups();
     19 
     20 function testCaptureGroups() {
     21  var s = "a..bb.cba.";
     22  for (var i = 0; i < 20; i++) {
     23    var log = "";
     24    var res = s.replace(/(a)|(b)/g, function(...args) {
     25      assertEq(this, undefined);
     26      assertEq(args.length, 5);
     27      assertEq(args[4], s);
     28      log += "(" + args[0] + args[1] + args[2] + args[3] + ")";
     29      return "X";
     30    });
     31    assertEq(res, "X..XX.cXX.");
     32    assertEq(log, "(aaundefined0)(bundefinedb3)(bundefinedb4)(bundefinedb7)(aaundefined8)");
     33  }
     34 }
     35 testCaptureGroups();
     36 
     37 // Calling RegExp#compile in the callback has no effect, because |replace| will
     38 // create a new RegExp object from the original source/flags if this happens.
     39 function testCaptureGroupsChanging() {
     40  var s = "a..bb.cba.";
     41  for (var i = 0; i < 20; i++) {
     42    var log = "";
     43    var re = /a|b/g;
     44    var res = s.replace(re, function(...args) {
     45      assertEq(this, undefined);
     46      assertEq(args.length, 3);
     47      assertEq(args[2], s);
     48      log += "(" + args[0] + args[1] + ")";
     49      re.compile("(a)|(b)", "g");
     50      return "X";
     51    });
     52    assertEq(res, "X..XX.cXX.");
     53    assertEq(log, "(a0)(b3)(b4)(b7)(a8)");
     54  }
     55 }
     56 testCaptureGroupsChanging();