tor-browser

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

replace.js (5966B)


      1 function toLatin1(s) {
      2    assertEq(isLatin1(s), true);
      3    return s;
      4 }
      5 function testDollarReplacement() {
      6    // Latin1 input, pat and replacement
      7    var s = toLatin1("Foobarbaz123");
      8    var pat = toLatin1("bar");
      9    assertEq(s.replace(pat, toLatin1("AA")), "FooAAbaz123");
     10    assertEq(s.replace(pat, toLatin1("A$$A")), "FooA$Abaz123");
     11    assertEq(s.replace(pat, toLatin1("A$`A")), "FooAFooAbaz123");
     12    assertEq(s.replace(pat, toLatin1("A$&A")), "FooAbarAbaz123");
     13    assertEq(s.replace(pat, toLatin1("A$'A")), "FooAbaz123Abaz123");
     14    assertEq(isLatin1(s.replace(pat, "A$'A")), true);
     15 
     16    // Latin1 input and pat, TwoByte replacement
     17    assertEq(s.replace(pat, "A\u1200"), "FooA\u1200baz123");
     18    assertEq(s.replace(pat, "A$$\u1200"), "FooA$\u1200baz123");
     19    assertEq(s.replace(pat, "A$`\u1200"), "FooAFoo\u1200baz123");
     20    assertEq(s.replace(pat, "A$&\u1200"), "FooAbar\u1200baz123");
     21    assertEq(s.replace(pat, "A$'\u1200"), "FooAbaz123\u1200baz123");
     22 
     23    // TwoByte input, Latin1 pat and replacement
     24    s = "Foobarbaz123\u1200";
     25    assertEq(s.replace(pat, toLatin1("A")), "FooAbaz123\u1200");
     26    assertEq(s.replace(pat, toLatin1("A$$")), "FooA$baz123\u1200");
     27    assertEq(s.replace(pat, toLatin1("A$`")), "FooAFoobaz123\u1200");
     28    assertEq(s.replace(pat, toLatin1("A$&")), "FooAbarbaz123\u1200");
     29    assertEq(s.replace(pat, toLatin1("A$'")), "FooAbaz123\u1200baz123\u1200");
     30 
     31    // TwoByte input and pat, Latin1 replacement
     32    s = "Foobar\u1200baz123";
     33    pat += "\u1200";
     34    assertEq(s.replace(pat, toLatin1("AB")), "FooABbaz123");
     35    assertEq(s.replace(pat, toLatin1("A$$B")), "FooA$Bbaz123");
     36    assertEq(s.replace(pat, toLatin1("A$`B")), "FooAFooBbaz123");
     37    assertEq(s.replace(pat, toLatin1("A$&B")), "FooAbar\u1200Bbaz123");
     38    assertEq(s.replace(pat, toLatin1("A$'B")), "FooAbaz123Bbaz123");
     39 
     40    // TwoByte input, pat and replacement
     41    assertEq(s.replace(pat, "A\u1300"), "FooA\u1300baz123");
     42    assertEq(s.replace(pat, "A$$\u1300"), "FooA$\u1300baz123");
     43    assertEq(s.replace(pat, "A$`\u1300"), "FooAFoo\u1300baz123");
     44    assertEq(s.replace(pat, "A$&\u1300"), "FooAbar\u1200\u1300baz123");
     45    assertEq(s.replace(pat, "A$'\u1300"), "FooAbaz123\u1300baz123");
     46 }
     47 testDollarReplacement();
     48 
     49 function testRegExp() {
     50    var s = toLatin1("Foobar123bar234");
     51    var res = s.replace(/bar\d\d/, "456");
     52    assertEq(res, "Foo4563bar234");
     53    assertEq(isLatin1(res), true);
     54 
     55    // Latin1 input and replacement
     56    var re1 = /bar\d\d/;
     57    res = s.replace(re1, toLatin1("789"));
     58    assertEq(res, "Foo7893bar234");
     59    assertEq(isLatin1(res), true);
     60 
     61    var re2 = /bar\d\d/g;
     62    res = s.replace(re2, toLatin1("789\u00ff"));
     63    assertEq(res, "Foo789\u00ff3789\u00ff4");
     64    assertEq(isLatin1(res), true);
     65 
     66    // Latin1 input, TwoByte replacement
     67    assertEq(s.replace(re1, "789\u1200"), "Foo789\u12003bar234");
     68    assertEq(s.replace(re2, "789\u1200"), "Foo789\u12003789\u12004");
     69 
     70    // TwoByte input, Latin1 replacement
     71    s += "\u1200";
     72    assertEq(s.replace(re1, toLatin1("7890")), "Foo78903bar234\u1200");
     73    assertEq(s.replace(re2, toLatin1("7890\u00ff")), "Foo7890\u00ff37890\u00ff4\u1200");
     74 
     75    // TwoByte input and replacement
     76    assertEq(s.replace(re1, "789\u1200"), "Foo789\u12003bar234\u1200");
     77    assertEq(s.replace(re2, "789\u1200"), "Foo789\u12003789\u12004\u1200");
     78 }
     79 testRegExp();
     80 
     81 function testRegExpDollar() {
     82    var s = toLatin1("Foobar123bar2345");
     83 
     84    // Latin1 input and replacement
     85    var re1 = /bar\d\d/;
     86    var re2 = /bar(\d\d)/g;
     87    assertEq(s.replace(re1, toLatin1("--$&--")), "Foo--bar12--3bar2345");
     88    assertEq(s.replace(re2, toLatin1("--$'\u00ff--")), "Foo--3bar2345\xFF--3--45\xFF--45");
     89    assertEq(s.replace(re2, toLatin1("--$`--")), "Foo--Foo--3--Foobar123--45");
     90    assertEq(isLatin1(s.replace(re2, toLatin1("--$`--"))), true);
     91 
     92    // Latin1 input, TwoByte replacement
     93    assertEq(s.replace(re1, "\u1200$$"), "Foo\u1200$3bar2345");
     94    assertEq(s.replace(re2, "\u1200$1"), "Foo\u1200123\u12002345");
     95    assertEq(s.replace(re2, "\u1200$'"), "Foo\u12003bar23453\u12004545");
     96 
     97    // TwoByte input, Latin1 replacement
     98    s += "\u1200";
     99    assertEq(s.replace(re1, toLatin1("**$&**")), "Foo**bar12**3bar2345\u1200");
    100    assertEq(s.replace(re2, toLatin1("**$1**")), "Foo**12**3**23**45\u1200");
    101    assertEq(s.replace(re2, toLatin1("**$`**")), "Foo**Foo**3**Foobar123**45\u1200");
    102    assertEq(s.replace(re2, toLatin1("**$'$$**")), "Foo**3bar2345\u1200$**3**45\u1200$**45\u1200");
    103 
    104    // TwoByte input and replacement
    105    assertEq(s.replace(re1, "**$&**\ueeee"), "Foo**bar12**\ueeee3bar2345\u1200");
    106    assertEq(s.replace(re2, "**$1**\ueeee"), "Foo**12**\ueeee3**23**\ueeee45\u1200");
    107    assertEq(s.replace(re2, "\ueeee**$`**"), "Foo\ueeee**Foo**3\ueeee**Foobar123**45\u1200");
    108    assertEq(s.replace(re2, "\ueeee**$'$$**"), "Foo\ueeee**3bar2345\u1200$**3\ueeee**45\u1200$**45\u1200");
    109 }
    110 testRegExpDollar();
    111 
    112 function testFlattenPattern() {
    113    var s = "abcdef[g]abc";
    114 
    115    // Latin1 pattern
    116    var res = s.replace(toLatin1("def[g]"), "--$&--", "gi");
    117    assertEq(res, "abc--def[g]--abc");
    118    assertEq(isLatin1(res), true);
    119 
    120    // TwoByte pattern
    121    s = "abcdef[g]\u1200abc";
    122    assertEq(s.replace("def[g]\u1200", "++$&++", "gi"), "abc++def[g]\u1200++abc");
    123 }
    124 testFlattenPattern();
    125 
    126 function testReplaceEmpty() {
    127    // Latin1
    128    var s = toLatin1("--abcdefghijkl--abcdefghijkl--abcdefghijkl--abcdefghijkl");
    129    var res = s.replace(/abcd[eE]/g, "");
    130    assertEq(res, "--fghijkl--fghijkl--fghijkl--fghijkl");
    131    assertEq(isLatin1(res), true);
    132 
    133    s = "--abcdEf--";
    134    res = s.replace(/abcd[eE]/g, "");
    135    assertEq(res, "--f--");
    136    assertEq(isLatin1(res), true);
    137 
    138    // TwoByte
    139    s = "--abcdefghijkl--abcdefghijkl--abcdefghijkl--abcdefghijkl\u1200";
    140    assertEq(s.replace(/abcd[eE]/g, ""), "--fghijkl--fghijkl--fghijkl--fghijkl\u1200");
    141 
    142    s = "--abcdEf--\u1200";
    143    assertEq(s.replace(/abcd[eE]/g, ""), "--f--\u1200");
    144 }
    145 testReplaceEmpty();