js/src/jit-test/tests/basic/bug593663-regexp.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/js/src/jit-test/tests/basic/bug593663-regexp.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,109 @@
     1.4 +/* 
     1.5 + * Ensure that flat matches with metachars in them don't have their metachars
     1.6 + * interpreted as special.
     1.7 + */
     1.8 +
     1.9 +function isPatternSyntaxError(pattern) {
    1.10 +    try {
    1.11 +        new RegExp(pattern);
    1.12 +        return false;
    1.13 +    } catch (e if e instanceof SyntaxError) {
    1.14 +        return true;
    1.15 +    }
    1.16 +}
    1.17 +
    1.18 +// Bug example.
    1.19 +assertEq("1+2".replace("1+2", "$&+3", "g"), "1+2+3");
    1.20 +assertEq("1112".replace("1+2", "", "g"), "1112");
    1.21 +
    1.22 +// ^
    1.23 +assertEq("leading text^my hat".replace("^my hat", "", "g"), "leading text");
    1.24 +assertEq("my hat".replace("^my hat", "", "g"), "my hat");
    1.25 +
    1.26 +// $
    1.27 +assertEq("leading text$my money".replace("leading text$", "", "g"), "my money");
    1.28 +assertEq("leading text".replace("leading text$", "", "g"), "leading text");
    1.29 +
    1.30 +// \
    1.31 +var BSL = '\\';
    1.32 +assertEq(("dir C:" + BSL + "Windoze").replace("C:" + BSL, "", "g"),
    1.33 +         "dir Windoze");
    1.34 +assertEq(isPatternSyntaxError("C:" + BSL), true);
    1.35 +
    1.36 +// .
    1.37 +assertEq("This is a sentence. It has words.".replace(".", "!", "g"),
    1.38 +         "This is a sentence! It has words!");
    1.39 +assertEq("This is an unterminated sentence".replace(".", "", "g"),
    1.40 +         "This is an unterminated sentence");
    1.41 +
    1.42 +// *
    1.43 +assertEq("Video killed the radio *".replace(" *", "", "g"), "Video killed the radio");
    1.44 +assertEq("aaa".replace("a*", "", "g"), "aaa");
    1.45 +
    1.46 +// +
    1.47 +assertEq("On the + side".replace(" +", "", "g"), "On the side");
    1.48 +assertEq("1111111111111".replace("1+", "", "g"), "1111111111111");
    1.49 +
    1.50 +// \+
    1.51 +assertEq(("Inverse cone head: " + BSL + "++/").replace(BSL + "+", "", "g"),
    1.52 +         "Inverse cone head: +/");
    1.53 +assertEq((BSL + BSL + BSL).replace(BSL + "+", "", "g"),
    1.54 +         BSL + BSL + BSL);
    1.55 +
    1.56 +// \\+
    1.57 +assertEq((BSL + BSL + "+").replace(BSL + BSL + "+", "", "g"), "");
    1.58 +assertEq((BSL + BSL + BSL).replace(BSL + BSL + "+", "", "g"), (BSL + BSL + BSL));
    1.59 +
    1.60 +// \\\
    1.61 +assertEq((BSL + BSL + BSL + BSL).replace(BSL + BSL + BSL, "", "g"), BSL);
    1.62 +assertEq(isPatternSyntaxError(BSL + BSL + BSL), true);
    1.63 +
    1.64 +// \\\\
    1.65 +assertEq((BSL + BSL + BSL + BSL).replace(BSL + BSL + BSL + BSL, "", "i"), "");
    1.66 +assertEq((BSL + BSL).replace(BSL + BSL + BSL + BSL, "", "g"), BSL + BSL);
    1.67 +
    1.68 +
    1.69 +// ?
    1.70 +assertEq("Pressing question?".replace("?", ".", "g"), "Pressing question.");
    1.71 +assertEq("a".replace("a?", "", "g"), "a");
    1.72 +
    1.73 +// (
    1.74 +assertEq("(a".replace("(", "", "g"), "a");
    1.75 +
    1.76 +// )
    1.77 +assertEq("a)".replace(")", "", "g"), "a");
    1.78 +
    1.79 +// ( and )
    1.80 +assertEq("(foo)".replace("(foo)", "", "g"), "");
    1.81 +assertEq("a".replace("(a)", "", "g"), "a");
    1.82 +
    1.83 +// [
    1.84 +assertEq("[a".replace("[", "", "g"), "a");
    1.85 +
    1.86 +// ]
    1.87 +assertEq("a]".replace("]", "", "g"), "a");
    1.88 +
    1.89 +// [ and ]
    1.90 +assertEq("a".replace("[a-z]", "", "g"), "a");
    1.91 +assertEq("You would write your regexp as [a-z]".replace("[a-z]", "", "g"),
    1.92 +         "You would write your regexp as ");
    1.93 +
    1.94 +// {
    1.95 +assertEq("Numbers may be specified in the interval {1,100}".replace("{1,", "", "g"),
    1.96 +         "Numbers may be specified in the interval 100}");
    1.97 +
    1.98 +// }
    1.99 +assertEq("Numbers may be specified in the interval {1,100}".replace(",100}", "", "g"),
   1.100 +         "Numbers may be specified in the interval {1");
   1.101 +
   1.102 +// { and }
   1.103 +assertEq("Numbers may be specified in the interval {1,100}".replace(" {1,100}", "", "g"),
   1.104 +         "Numbers may be specified in the interval");
   1.105 +assertEq("aaa".replace("a{1,10}", "", "g"), "aaa");
   1.106 +
   1.107 +// |
   1.108 +assertEq("Mr. Gorbachev|Tear down this wall!".replace("|Tear down this wall!", "", "g"),
   1.109 +         "Mr. Gorbachev");
   1.110 +assertEq("foobar".replace("foo|bar", "", "g"), "foobar");
   1.111 +
   1.112 +print("PASS");

mercurial