| Index: third_party/re2/re2/testing/mimics_pcre_test.cc
|
| diff --git a/third_party/re2/re2/testing/mimics_pcre_test.cc b/third_party/re2/re2/testing/mimics_pcre_test.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f96509298556a68e24621493416568c95d38e8a2
|
| --- /dev/null
|
| +++ b/third_party/re2/re2/testing/mimics_pcre_test.cc
|
| @@ -0,0 +1,76 @@
|
| +// Copyright 2008 The RE2 Authors. All Rights Reserved.
|
| +// Use of this source code is governed by a BSD-style
|
| +// license that can be found in the LICENSE file.
|
| +
|
| +#include "util/test.h"
|
| +#include "re2/prog.h"
|
| +#include "re2/regexp.h"
|
| +
|
| +namespace re2 {
|
| +
|
| +struct PCRETest {
|
| + const char* regexp;
|
| + bool should_match;
|
| +};
|
| +
|
| +static PCRETest tests[] = {
|
| + // Most things should behave exactly.
|
| + { "abc", true },
|
| + { "(a|b)c", true },
|
| + { "(a*|b)c", true },
|
| + { "(a|b*)c", true },
|
| + { "a(b|c)d", true },
|
| + { "a(()|())c", true },
|
| + { "ab*c", true },
|
| + { "ab+c", true },
|
| + { "a(b*|c*)d", true },
|
| + { "\\W", true },
|
| + { "\\W{1,2}", true },
|
| + { "\\d", true },
|
| +
|
| + // Check that repeated empty strings do not.
|
| + { "(a*)*", false },
|
| + { "x(a*)*y", false },
|
| + { "(a*)+", false },
|
| + { "(a+)*", true },
|
| + { "(a+)+", true },
|
| + { "(a+)+", true },
|
| +
|
| + // \v is the only character class that shouldn't.
|
| + { "\\b", true },
|
| + { "\\v", false },
|
| + { "\\d", true },
|
| +
|
| + // The handling of ^ in multi-line mode is different, as is
|
| + // the handling of $ in single-line mode. (Both involve
|
| + // boundary cases if the string ends with \n.)
|
| + { "\\A", true },
|
| + { "\\z", true },
|
| + { "(?m)^", false },
|
| + { "(?m)$", true },
|
| + { "(?-m)^", true },
|
| + { "(?-m)$", false }, // In PCRE, == \Z
|
| + { "(?m)\\A", true },
|
| + { "(?m)\\z", true },
|
| + { "(?-m)\\A", true },
|
| + { "(?-m)\\z", true },
|
| +};
|
| +
|
| +TEST(MimicsPCRE, SimpleTests) {
|
| + for (int i = 0; i < arraysize(tests); i++) {
|
| + const PCRETest& t = tests[i];
|
| + for (int j = 0; j < 2; j++) {
|
| + Regexp::ParseFlags flags = Regexp::LikePerl;
|
| + if (j == 0)
|
| + flags = flags | Regexp::Latin1;
|
| + Regexp* re = Regexp::Parse(t.regexp, flags, NULL);
|
| + CHECK(re) << " " << t.regexp;
|
| + CHECK_EQ(t.should_match, re->MimicsPCRE())
|
| + << " " << t.regexp << " "
|
| + << (j==0 ? "latin1" : "utf");
|
| + re->Decref();
|
| + }
|
| + }
|
| +}
|
| +
|
| +} // namespace re2
|
|
|