| Index: test/cctest/test-regexp.cc
|
| diff --git a/test/cctest/test-regexp.cc b/test/cctest/test-regexp.cc
|
| index 2f321c11257891c2d19ac009068d672260373e21..06e364f0c02064b17a0a3fdfeadec13f475492ee 100644
|
| --- a/test/cctest/test-regexp.cc
|
| +++ b/test/cctest/test-regexp.cc
|
| @@ -89,7 +89,7 @@ static bool CheckParse(const char* input) {
|
| }
|
|
|
|
|
| -static SmartArrayPointer<const char> Parse(const char* input) {
|
| +static void CheckParseEq(const char* input, const char* expected) {
|
| V8::Initialize(NULL);
|
| v8::HandleScope scope(CcTest::isolate());
|
| Zone zone(CcTest::i_isolate());
|
| @@ -99,8 +99,9 @@ static SmartArrayPointer<const char> Parse(const char* input) {
|
| &reader, false, &result, &zone));
|
| CHECK(result.tree != NULL);
|
| CHECK(result.error.is_null());
|
| - SmartArrayPointer<const char> output = result.tree->ToString(&zone);
|
| - return output;
|
| + OStringStream os;
|
| + result.tree->Print(os, &zone);
|
| + CHECK_EQ(expected, os.c_str());
|
| }
|
|
|
|
|
| @@ -141,7 +142,6 @@ static MinMaxPair CheckMinMaxMatch(const char* input) {
|
|
|
|
|
| #define CHECK_PARSE_ERROR(input) CHECK(!CheckParse(input))
|
| -#define CHECK_PARSE_EQ(input, expected) CHECK_EQ(expected, Parse(input).get())
|
| #define CHECK_SIMPLE(input, simple) CHECK_EQ(simple, CheckSimple(input));
|
| #define CHECK_MIN_MAX(input, min, max) \
|
| { MinMaxPair min_max = CheckMinMaxMatch(input); \
|
| @@ -154,126 +154,129 @@ TEST(Parser) {
|
|
|
| CHECK_PARSE_ERROR("?");
|
|
|
| - CHECK_PARSE_EQ("abc", "'abc'");
|
| - CHECK_PARSE_EQ("", "%");
|
| - CHECK_PARSE_EQ("abc|def", "(| 'abc' 'def')");
|
| - CHECK_PARSE_EQ("abc|def|ghi", "(| 'abc' 'def' 'ghi')");
|
| - CHECK_PARSE_EQ("^xxx$", "(: @^i 'xxx' @$i)");
|
| - CHECK_PARSE_EQ("ab\\b\\d\\bcd", "(: 'ab' @b [0-9] @b 'cd')");
|
| - CHECK_PARSE_EQ("\\w|\\d", "(| [0-9 A-Z _ a-z] [0-9])");
|
| - CHECK_PARSE_EQ("a*", "(# 0 - g 'a')");
|
| - CHECK_PARSE_EQ("a*?", "(# 0 - n 'a')");
|
| - CHECK_PARSE_EQ("abc+", "(: 'ab' (# 1 - g 'c'))");
|
| - CHECK_PARSE_EQ("abc+?", "(: 'ab' (# 1 - n 'c'))");
|
| - CHECK_PARSE_EQ("xyz?", "(: 'xy' (# 0 1 g 'z'))");
|
| - CHECK_PARSE_EQ("xyz??", "(: 'xy' (# 0 1 n 'z'))");
|
| - CHECK_PARSE_EQ("xyz{0,1}", "(: 'xy' (# 0 1 g 'z'))");
|
| - CHECK_PARSE_EQ("xyz{0,1}?", "(: 'xy' (# 0 1 n 'z'))");
|
| - CHECK_PARSE_EQ("xyz{93}", "(: 'xy' (# 93 93 g 'z'))");
|
| - CHECK_PARSE_EQ("xyz{93}?", "(: 'xy' (# 93 93 n 'z'))");
|
| - CHECK_PARSE_EQ("xyz{1,32}", "(: 'xy' (# 1 32 g 'z'))");
|
| - CHECK_PARSE_EQ("xyz{1,32}?", "(: 'xy' (# 1 32 n 'z'))");
|
| - CHECK_PARSE_EQ("xyz{1,}", "(: 'xy' (# 1 - g 'z'))");
|
| - CHECK_PARSE_EQ("xyz{1,}?", "(: 'xy' (# 1 - n 'z'))");
|
| - CHECK_PARSE_EQ("a\\fb\\nc\\rd\\te\\vf", "'a\\x0cb\\x0ac\\x0dd\\x09e\\x0bf'");
|
| - CHECK_PARSE_EQ("a\\nb\\bc", "(: 'a\\x0ab' @b 'c')");
|
| - CHECK_PARSE_EQ("(?:foo)", "'foo'");
|
| - CHECK_PARSE_EQ("(?: foo )", "' foo '");
|
| - CHECK_PARSE_EQ("(foo|bar|baz)", "(^ (| 'foo' 'bar' 'baz'))");
|
| - CHECK_PARSE_EQ("foo|(bar|baz)|quux", "(| 'foo' (^ (| 'bar' 'baz')) 'quux')");
|
| - CHECK_PARSE_EQ("foo(?=bar)baz", "(: 'foo' (-> + 'bar') 'baz')");
|
| - CHECK_PARSE_EQ("foo(?!bar)baz", "(: 'foo' (-> - 'bar') 'baz')");
|
| - CHECK_PARSE_EQ("()", "(^ %)");
|
| - CHECK_PARSE_EQ("(?=)", "(-> + %)");
|
| - CHECK_PARSE_EQ("[]", "^[\\x00-\\uffff]"); // Doesn't compile on windows
|
| - CHECK_PARSE_EQ("[^]", "[\\x00-\\uffff]"); // \uffff isn't in codepage 1252
|
| - CHECK_PARSE_EQ("[x]", "[x]");
|
| - CHECK_PARSE_EQ("[xyz]", "[x y z]");
|
| - CHECK_PARSE_EQ("[a-zA-Z0-9]", "[a-z A-Z 0-9]");
|
| - CHECK_PARSE_EQ("[-123]", "[- 1 2 3]");
|
| - CHECK_PARSE_EQ("[^123]", "^[1 2 3]");
|
| - CHECK_PARSE_EQ("]", "']'");
|
| - CHECK_PARSE_EQ("}", "'}'");
|
| - CHECK_PARSE_EQ("[a-b-c]", "[a-b - c]");
|
| - CHECK_PARSE_EQ("[\\d]", "[0-9]");
|
| - CHECK_PARSE_EQ("[x\\dz]", "[x 0-9 z]");
|
| - CHECK_PARSE_EQ("[\\d-z]", "[0-9 - z]");
|
| - CHECK_PARSE_EQ("[\\d-\\d]", "[0-9 - 0-9]");
|
| - CHECK_PARSE_EQ("[z-\\d]", "[z - 0-9]");
|
| + CheckParseEq("abc", "'abc'");
|
| + CheckParseEq("", "%");
|
| + CheckParseEq("abc|def", "(| 'abc' 'def')");
|
| + CheckParseEq("abc|def|ghi", "(| 'abc' 'def' 'ghi')");
|
| + CheckParseEq("^xxx$", "(: @^i 'xxx' @$i)");
|
| + CheckParseEq("ab\\b\\d\\bcd", "(: 'ab' @b [0-9] @b 'cd')");
|
| + CheckParseEq("\\w|\\d", "(| [0-9 A-Z _ a-z] [0-9])");
|
| + CheckParseEq("a*", "(# 0 - g 'a')");
|
| + CheckParseEq("a*?", "(# 0 - n 'a')");
|
| + CheckParseEq("abc+", "(: 'ab' (# 1 - g 'c'))");
|
| + CheckParseEq("abc+?", "(: 'ab' (# 1 - n 'c'))");
|
| + CheckParseEq("xyz?", "(: 'xy' (# 0 1 g 'z'))");
|
| + CheckParseEq("xyz??", "(: 'xy' (# 0 1 n 'z'))");
|
| + CheckParseEq("xyz{0,1}", "(: 'xy' (# 0 1 g 'z'))");
|
| + CheckParseEq("xyz{0,1}?", "(: 'xy' (# 0 1 n 'z'))");
|
| + CheckParseEq("xyz{93}", "(: 'xy' (# 93 93 g 'z'))");
|
| + CheckParseEq("xyz{93}?", "(: 'xy' (# 93 93 n 'z'))");
|
| + CheckParseEq("xyz{1,32}", "(: 'xy' (# 1 32 g 'z'))");
|
| + CheckParseEq("xyz{1,32}?", "(: 'xy' (# 1 32 n 'z'))");
|
| + CheckParseEq("xyz{1,}", "(: 'xy' (# 1 - g 'z'))");
|
| + CheckParseEq("xyz{1,}?", "(: 'xy' (# 1 - n 'z'))");
|
| + CheckParseEq("a\\fb\\nc\\rd\\te\\vf", "'a\\x0cb\\x0ac\\x0dd\\x09e\\x0bf'");
|
| + CheckParseEq("a\\nb\\bc", "(: 'a\\x0ab' @b 'c')");
|
| + CheckParseEq("(?:foo)", "'foo'");
|
| + CheckParseEq("(?: foo )", "' foo '");
|
| + CheckParseEq("(foo|bar|baz)", "(^ (| 'foo' 'bar' 'baz'))");
|
| + CheckParseEq("foo|(bar|baz)|quux", "(| 'foo' (^ (| 'bar' 'baz')) 'quux')");
|
| + CheckParseEq("foo(?=bar)baz", "(: 'foo' (-> + 'bar') 'baz')");
|
| + CheckParseEq("foo(?!bar)baz", "(: 'foo' (-> - 'bar') 'baz')");
|
| + CheckParseEq("()", "(^ %)");
|
| + CheckParseEq("(?=)", "(-> + %)");
|
| + CheckParseEq("[]", "^[\\x00-\\uffff]"); // Doesn't compile on windows
|
| + CheckParseEq("[^]", "[\\x00-\\uffff]"); // \uffff isn't in codepage 1252
|
| + CheckParseEq("[x]", "[x]");
|
| + CheckParseEq("[xyz]", "[x y z]");
|
| + CheckParseEq("[a-zA-Z0-9]", "[a-z A-Z 0-9]");
|
| + CheckParseEq("[-123]", "[- 1 2 3]");
|
| + CheckParseEq("[^123]", "^[1 2 3]");
|
| + CheckParseEq("]", "']'");
|
| + CheckParseEq("}", "'}'");
|
| + CheckParseEq("[a-b-c]", "[a-b - c]");
|
| + CheckParseEq("[\\d]", "[0-9]");
|
| + CheckParseEq("[x\\dz]", "[x 0-9 z]");
|
| + CheckParseEq("[\\d-z]", "[0-9 - z]");
|
| + CheckParseEq("[\\d-\\d]", "[0-9 - 0-9]");
|
| + CheckParseEq("[z-\\d]", "[z - 0-9]");
|
| // Control character outside character class.
|
| - CHECK_PARSE_EQ("\\cj\\cJ\\ci\\cI\\ck\\cK",
|
| - "'\\x0a\\x0a\\x09\\x09\\x0b\\x0b'");
|
| - CHECK_PARSE_EQ("\\c!", "'\\c!'");
|
| - CHECK_PARSE_EQ("\\c_", "'\\c_'");
|
| - CHECK_PARSE_EQ("\\c~", "'\\c~'");
|
| - CHECK_PARSE_EQ("\\c1", "'\\c1'");
|
| + CheckParseEq("\\cj\\cJ\\ci\\cI\\ck\\cK", "'\\x0a\\x0a\\x09\\x09\\x0b\\x0b'");
|
| + CheckParseEq("\\c!", "'\\c!'");
|
| + CheckParseEq("\\c_", "'\\c_'");
|
| + CheckParseEq("\\c~", "'\\c~'");
|
| + CheckParseEq("\\c1", "'\\c1'");
|
| // Control character inside character class.
|
| - CHECK_PARSE_EQ("[\\c!]", "[\\ c !]");
|
| - CHECK_PARSE_EQ("[\\c_]", "[\\x1f]");
|
| - CHECK_PARSE_EQ("[\\c~]", "[\\ c ~]");
|
| - CHECK_PARSE_EQ("[\\ca]", "[\\x01]");
|
| - CHECK_PARSE_EQ("[\\cz]", "[\\x1a]");
|
| - CHECK_PARSE_EQ("[\\cA]", "[\\x01]");
|
| - CHECK_PARSE_EQ("[\\cZ]", "[\\x1a]");
|
| - CHECK_PARSE_EQ("[\\c1]", "[\\x11]");
|
| -
|
| - CHECK_PARSE_EQ("[a\\]c]", "[a ] c]");
|
| - CHECK_PARSE_EQ("\\[\\]\\{\\}\\(\\)\\%\\^\\#\\ ", "'[]{}()%^# '");
|
| - CHECK_PARSE_EQ("[\\[\\]\\{\\}\\(\\)\\%\\^\\#\\ ]", "[[ ] { } ( ) % ^ # ]");
|
| - CHECK_PARSE_EQ("\\0", "'\\x00'");
|
| - CHECK_PARSE_EQ("\\8", "'8'");
|
| - CHECK_PARSE_EQ("\\9", "'9'");
|
| - CHECK_PARSE_EQ("\\11", "'\\x09'");
|
| - CHECK_PARSE_EQ("\\11a", "'\\x09a'");
|
| - CHECK_PARSE_EQ("\\011", "'\\x09'");
|
| - CHECK_PARSE_EQ("\\00011", "'\\x0011'");
|
| - CHECK_PARSE_EQ("\\118", "'\\x098'");
|
| - CHECK_PARSE_EQ("\\111", "'I'");
|
| - CHECK_PARSE_EQ("\\1111", "'I1'");
|
| - CHECK_PARSE_EQ("(x)(x)(x)\\1", "(: (^ 'x') (^ 'x') (^ 'x') (<- 1))");
|
| - CHECK_PARSE_EQ("(x)(x)(x)\\2", "(: (^ 'x') (^ 'x') (^ 'x') (<- 2))");
|
| - CHECK_PARSE_EQ("(x)(x)(x)\\3", "(: (^ 'x') (^ 'x') (^ 'x') (<- 3))");
|
| - CHECK_PARSE_EQ("(x)(x)(x)\\4", "(: (^ 'x') (^ 'x') (^ 'x') '\\x04')");
|
| - CHECK_PARSE_EQ("(x)(x)(x)\\1*", "(: (^ 'x') (^ 'x') (^ 'x')"
|
| - " (# 0 - g (<- 1)))");
|
| - CHECK_PARSE_EQ("(x)(x)(x)\\2*", "(: (^ 'x') (^ 'x') (^ 'x')"
|
| - " (# 0 - g (<- 2)))");
|
| - CHECK_PARSE_EQ("(x)(x)(x)\\3*", "(: (^ 'x') (^ 'x') (^ 'x')"
|
| - " (# 0 - g (<- 3)))");
|
| - CHECK_PARSE_EQ("(x)(x)(x)\\4*", "(: (^ 'x') (^ 'x') (^ 'x')"
|
| - " (# 0 - g '\\x04'))");
|
| - CHECK_PARSE_EQ("(x)(x)(x)(x)(x)(x)(x)(x)(x)(x)\\10",
|
| - "(: (^ 'x') (^ 'x') (^ 'x') (^ 'x') (^ 'x') (^ 'x')"
|
| - " (^ 'x') (^ 'x') (^ 'x') (^ 'x') (<- 10))");
|
| - CHECK_PARSE_EQ("(x)(x)(x)(x)(x)(x)(x)(x)(x)(x)\\11",
|
| - "(: (^ 'x') (^ 'x') (^ 'x') (^ 'x') (^ 'x') (^ 'x')"
|
| - " (^ 'x') (^ 'x') (^ 'x') (^ 'x') '\\x09')");
|
| - CHECK_PARSE_EQ("(a)\\1", "(: (^ 'a') (<- 1))");
|
| - CHECK_PARSE_EQ("(a\\1)", "(^ 'a')");
|
| - CHECK_PARSE_EQ("(\\1a)", "(^ 'a')");
|
| - CHECK_PARSE_EQ("(?=a)?a", "'a'");
|
| - CHECK_PARSE_EQ("(?=a){0,10}a", "'a'");
|
| - CHECK_PARSE_EQ("(?=a){1,10}a", "(: (-> + 'a') 'a')");
|
| - CHECK_PARSE_EQ("(?=a){9,10}a", "(: (-> + 'a') 'a')");
|
| - CHECK_PARSE_EQ("(?!a)?a", "'a'");
|
| - CHECK_PARSE_EQ("\\1(a)", "(^ 'a')");
|
| - CHECK_PARSE_EQ("(?!(a))\\1", "(: (-> - (^ 'a')) (<- 1))");
|
| - CHECK_PARSE_EQ("(?!\\1(a\\1)\\1)\\1", "(: (-> - (: (^ 'a') (<- 1))) (<- 1))");
|
| - CHECK_PARSE_EQ("[\\0]", "[\\x00]");
|
| - CHECK_PARSE_EQ("[\\11]", "[\\x09]");
|
| - CHECK_PARSE_EQ("[\\11a]", "[\\x09 a]");
|
| - CHECK_PARSE_EQ("[\\011]", "[\\x09]");
|
| - CHECK_PARSE_EQ("[\\00011]", "[\\x00 1 1]");
|
| - CHECK_PARSE_EQ("[\\118]", "[\\x09 8]");
|
| - CHECK_PARSE_EQ("[\\111]", "[I]");
|
| - CHECK_PARSE_EQ("[\\1111]", "[I 1]");
|
| - CHECK_PARSE_EQ("\\x34", "'\x34'");
|
| - CHECK_PARSE_EQ("\\x60", "'\x60'");
|
| - CHECK_PARSE_EQ("\\x3z", "'x3z'");
|
| - CHECK_PARSE_EQ("\\c", "'\\c'");
|
| - CHECK_PARSE_EQ("\\u0034", "'\x34'");
|
| - CHECK_PARSE_EQ("\\u003z", "'u003z'");
|
| - CHECK_PARSE_EQ("foo[z]*", "(: 'foo' (# 0 - g [z]))");
|
| + CheckParseEq("[\\c!]", "[\\ c !]");
|
| + CheckParseEq("[\\c_]", "[\\x1f]");
|
| + CheckParseEq("[\\c~]", "[\\ c ~]");
|
| + CheckParseEq("[\\ca]", "[\\x01]");
|
| + CheckParseEq("[\\cz]", "[\\x1a]");
|
| + CheckParseEq("[\\cA]", "[\\x01]");
|
| + CheckParseEq("[\\cZ]", "[\\x1a]");
|
| + CheckParseEq("[\\c1]", "[\\x11]");
|
| +
|
| + CheckParseEq("[a\\]c]", "[a ] c]");
|
| + CheckParseEq("\\[\\]\\{\\}\\(\\)\\%\\^\\#\\ ", "'[]{}()%^# '");
|
| + CheckParseEq("[\\[\\]\\{\\}\\(\\)\\%\\^\\#\\ ]", "[[ ] { } ( ) % ^ # ]");
|
| + CheckParseEq("\\0", "'\\x00'");
|
| + CheckParseEq("\\8", "'8'");
|
| + CheckParseEq("\\9", "'9'");
|
| + CheckParseEq("\\11", "'\\x09'");
|
| + CheckParseEq("\\11a", "'\\x09a'");
|
| + CheckParseEq("\\011", "'\\x09'");
|
| + CheckParseEq("\\00011", "'\\x0011'");
|
| + CheckParseEq("\\118", "'\\x098'");
|
| + CheckParseEq("\\111", "'I'");
|
| + CheckParseEq("\\1111", "'I1'");
|
| + CheckParseEq("(x)(x)(x)\\1", "(: (^ 'x') (^ 'x') (^ 'x') (<- 1))");
|
| + CheckParseEq("(x)(x)(x)\\2", "(: (^ 'x') (^ 'x') (^ 'x') (<- 2))");
|
| + CheckParseEq("(x)(x)(x)\\3", "(: (^ 'x') (^ 'x') (^ 'x') (<- 3))");
|
| + CheckParseEq("(x)(x)(x)\\4", "(: (^ 'x') (^ 'x') (^ 'x') '\\x04')");
|
| + CheckParseEq("(x)(x)(x)\\1*",
|
| + "(: (^ 'x') (^ 'x') (^ 'x')"
|
| + " (# 0 - g (<- 1)))");
|
| + CheckParseEq("(x)(x)(x)\\2*",
|
| + "(: (^ 'x') (^ 'x') (^ 'x')"
|
| + " (# 0 - g (<- 2)))");
|
| + CheckParseEq("(x)(x)(x)\\3*",
|
| + "(: (^ 'x') (^ 'x') (^ 'x')"
|
| + " (# 0 - g (<- 3)))");
|
| + CheckParseEq("(x)(x)(x)\\4*",
|
| + "(: (^ 'x') (^ 'x') (^ 'x')"
|
| + " (# 0 - g '\\x04'))");
|
| + CheckParseEq("(x)(x)(x)(x)(x)(x)(x)(x)(x)(x)\\10",
|
| + "(: (^ 'x') (^ 'x') (^ 'x') (^ 'x') (^ 'x') (^ 'x')"
|
| + " (^ 'x') (^ 'x') (^ 'x') (^ 'x') (<- 10))");
|
| + CheckParseEq("(x)(x)(x)(x)(x)(x)(x)(x)(x)(x)\\11",
|
| + "(: (^ 'x') (^ 'x') (^ 'x') (^ 'x') (^ 'x') (^ 'x')"
|
| + " (^ 'x') (^ 'x') (^ 'x') (^ 'x') '\\x09')");
|
| + CheckParseEq("(a)\\1", "(: (^ 'a') (<- 1))");
|
| + CheckParseEq("(a\\1)", "(^ 'a')");
|
| + CheckParseEq("(\\1a)", "(^ 'a')");
|
| + CheckParseEq("(?=a)?a", "'a'");
|
| + CheckParseEq("(?=a){0,10}a", "'a'");
|
| + CheckParseEq("(?=a){1,10}a", "(: (-> + 'a') 'a')");
|
| + CheckParseEq("(?=a){9,10}a", "(: (-> + 'a') 'a')");
|
| + CheckParseEq("(?!a)?a", "'a'");
|
| + CheckParseEq("\\1(a)", "(^ 'a')");
|
| + CheckParseEq("(?!(a))\\1", "(: (-> - (^ 'a')) (<- 1))");
|
| + CheckParseEq("(?!\\1(a\\1)\\1)\\1", "(: (-> - (: (^ 'a') (<- 1))) (<- 1))");
|
| + CheckParseEq("[\\0]", "[\\x00]");
|
| + CheckParseEq("[\\11]", "[\\x09]");
|
| + CheckParseEq("[\\11a]", "[\\x09 a]");
|
| + CheckParseEq("[\\011]", "[\\x09]");
|
| + CheckParseEq("[\\00011]", "[\\x00 1 1]");
|
| + CheckParseEq("[\\118]", "[\\x09 8]");
|
| + CheckParseEq("[\\111]", "[I]");
|
| + CheckParseEq("[\\1111]", "[I 1]");
|
| + CheckParseEq("\\x34", "'\x34'");
|
| + CheckParseEq("\\x60", "'\x60'");
|
| + CheckParseEq("\\x3z", "'x3z'");
|
| + CheckParseEq("\\c", "'\\c'");
|
| + CheckParseEq("\\u0034", "'\x34'");
|
| + CheckParseEq("\\u003z", "'u003z'");
|
| + CheckParseEq("foo[z]*", "(: 'foo' (# 0 - g [z]))");
|
|
|
| CHECK_SIMPLE("", false);
|
| CHECK_SIMPLE("a", true);
|
| @@ -321,22 +324,22 @@ TEST(Parser) {
|
| CHECK_SIMPLE("(?!a)?a\\1", false);
|
| CHECK_SIMPLE("(?:(?=a))a\\1", false);
|
|
|
| - CHECK_PARSE_EQ("a{}", "'a{}'");
|
| - CHECK_PARSE_EQ("a{,}", "'a{,}'");
|
| - CHECK_PARSE_EQ("a{", "'a{'");
|
| - CHECK_PARSE_EQ("a{z}", "'a{z}'");
|
| - CHECK_PARSE_EQ("a{1z}", "'a{1z}'");
|
| - CHECK_PARSE_EQ("a{12z}", "'a{12z}'");
|
| - CHECK_PARSE_EQ("a{12,", "'a{12,'");
|
| - CHECK_PARSE_EQ("a{12,3b", "'a{12,3b'");
|
| - CHECK_PARSE_EQ("{}", "'{}'");
|
| - CHECK_PARSE_EQ("{,}", "'{,}'");
|
| - CHECK_PARSE_EQ("{", "'{'");
|
| - CHECK_PARSE_EQ("{z}", "'{z}'");
|
| - CHECK_PARSE_EQ("{1z}", "'{1z}'");
|
| - CHECK_PARSE_EQ("{12z}", "'{12z}'");
|
| - CHECK_PARSE_EQ("{12,", "'{12,'");
|
| - CHECK_PARSE_EQ("{12,3b", "'{12,3b'");
|
| + CheckParseEq("a{}", "'a{}'");
|
| + CheckParseEq("a{,}", "'a{,}'");
|
| + CheckParseEq("a{", "'a{'");
|
| + CheckParseEq("a{z}", "'a{z}'");
|
| + CheckParseEq("a{1z}", "'a{1z}'");
|
| + CheckParseEq("a{12z}", "'a{12z}'");
|
| + CheckParseEq("a{12,", "'a{12,'");
|
| + CheckParseEq("a{12,3b", "'a{12,3b'");
|
| + CheckParseEq("{}", "'{}'");
|
| + CheckParseEq("{,}", "'{,}'");
|
| + CheckParseEq("{", "'{'");
|
| + CheckParseEq("{z}", "'{z}'");
|
| + CheckParseEq("{1z}", "'{1z}'");
|
| + CheckParseEq("{12z}", "'{12z}'");
|
| + CheckParseEq("{12,", "'{12,'");
|
| + CheckParseEq("{12,3b", "'{12,3b'");
|
|
|
| CHECK_MIN_MAX("a", 1, 1);
|
| CHECK_MIN_MAX("abc", 3, 3);
|
| @@ -390,10 +393,10 @@ TEST(Parser) {
|
|
|
|
|
| TEST(ParserRegression) {
|
| - CHECK_PARSE_EQ("[A-Z$-][x]", "(! [A-Z $ -] [x])");
|
| - CHECK_PARSE_EQ("a{3,4*}", "(: 'a{3,' (# 0 - g '4') '}')");
|
| - CHECK_PARSE_EQ("{", "'{'");
|
| - CHECK_PARSE_EQ("a|", "(| 'a' %)");
|
| + CheckParseEq("[A-Z$-][x]", "(! [A-Z $ -] [x])");
|
| + CheckParseEq("a{3,4*}", "(: 'a{3,' (# 0 - g '4') '}')");
|
| + CheckParseEq("{", "'{'");
|
| + CheckParseEq("a|", "(| 'a' %)");
|
| }
|
|
|
| static void ExpectError(const char* input,
|
| @@ -433,13 +436,11 @@ TEST(Errors) {
|
| // Check that we don't allow more than kMaxCapture captures
|
| const int kMaxCaptures = 1 << 16; // Must match RegExpParser::kMaxCaptures.
|
| const char* kTooManyCaptures = "Too many captures";
|
| - HeapStringAllocator allocator;
|
| - StringStream accumulator(&allocator);
|
| + OStringStream os;
|
| for (int i = 0; i <= kMaxCaptures; i++) {
|
| - accumulator.Add("()");
|
| + os << "()";
|
| }
|
| - SmartArrayPointer<const char> many_captures(accumulator.ToCString());
|
| - ExpectError(many_captures.get(), kTooManyCaptures);
|
| + ExpectError(os.c_str(), kTooManyCaptures);
|
| }
|
|
|
|
|
| @@ -667,11 +668,11 @@ TEST(ParsePossessiveRepetition) {
|
| // Enable possessive quantifier syntax.
|
| FLAG_regexp_possessive_quantifier = true;
|
|
|
| - CHECK_PARSE_EQ("a*+", "(# 0 - p 'a')");
|
| - CHECK_PARSE_EQ("a++", "(# 1 - p 'a')");
|
| - CHECK_PARSE_EQ("a?+", "(# 0 1 p 'a')");
|
| - CHECK_PARSE_EQ("a{10,20}+", "(# 10 20 p 'a')");
|
| - CHECK_PARSE_EQ("za{10,20}+b", "(: 'z' (# 10 20 p 'a') 'b')");
|
| + CheckParseEq("a*+", "(# 0 - p 'a')");
|
| + CheckParseEq("a++", "(# 1 - p 'a')");
|
| + CheckParseEq("a?+", "(# 0 1 p 'a')");
|
| + CheckParseEq("a{10,20}+", "(# 10 20 p 'a')");
|
| + CheckParseEq("za{10,20}+b", "(: 'z' (# 10 20 p 'a') 'b')");
|
|
|
| // Disable possessive quantifier syntax.
|
| FLAG_regexp_possessive_quantifier = false;
|
|
|