aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/unit/testDocument.cxx
diff options
context:
space:
mode:
authorZufu Liu <unknown>2023-12-02 08:20:55 +1100
committerZufu Liu <unknown>2023-12-02 08:20:55 +1100
commite6538bb38cd509111f0f595f46e7d1ff71bcc017 (patch)
treecdf847b194f9431c64d2b527c7b216e7486aceb2 /test/unit/testDocument.cxx
parentc8ca5050cf8c908e49d28eda5642542f7ac1155b (diff)
downloadscintilla-mirror-e6538bb38cd509111f0f595f46e7d1ff71bcc017.tar.gz
Bug [#2157]. Fix regular expression search for word begin \< and word end \>.
Diffstat (limited to 'test/unit/testDocument.cxx')
-rw-r--r--test/unit/testDocument.cxx130
1 files changed, 130 insertions, 0 deletions
diff --git a/test/unit/testDocument.cxx b/test/unit/testDocument.cxx
index 85ed3b813..025de3012 100644
--- a/test/unit/testDocument.cxx
+++ b/test/unit/testDocument.cxx
@@ -512,6 +512,136 @@ TEST_CASE("Document") {
REQUIRE(substituted == "\tb\xCE\x93y\n");
#endif
}
+
+ SECTION("RegexAssertion") {
+ DocPlus doc("ab cd ef\r\ngh ij kl", CpUtf8);
+ const Sci::Position docLength = doc.document.Length();
+ constexpr std::string_view findingBOL = "^";
+ Sci::Position lengthFinding = findingBOL.length();
+ Sci::Position location = doc.document.FindText(0, docLength, findingBOL.data(), FindOption::RegExp | FindOption::Posix, &lengthFinding);
+ REQUIRE(location == 0);
+ REQUIRE(lengthFinding == 0);
+ lengthFinding = findingBOL.length();
+ location = doc.document.FindText(1, docLength, findingBOL.data(), FindOption::RegExp | FindOption::Posix, &lengthFinding);
+ REQUIRE(location == 10);
+ REQUIRE(lengthFinding == 0);
+ lengthFinding = findingBOL.length();
+ location = doc.document.FindText(docLength, 0, findingBOL.data(), FindOption::RegExp | FindOption::Posix, &lengthFinding);
+ REQUIRE(location == 10);
+ REQUIRE(lengthFinding == 0);
+ lengthFinding = findingBOL.length();
+ location = doc.document.FindText(docLength - 1, 0, findingBOL.data(), FindOption::RegExp | FindOption::Posix, &lengthFinding);
+ REQUIRE(location == 10);
+ REQUIRE(lengthFinding == 0);
+
+ #ifndef NO_CXX11_REGEX
+ lengthFinding = findingBOL.length();
+ location = doc.document.FindText(0, docLength, findingBOL.data(), FindOption::RegExp | FindOption::Cxx11RegEx, &lengthFinding);
+ REQUIRE(location == 0);
+ REQUIRE(lengthFinding == 0);
+ lengthFinding = findingBOL.length();
+ location = doc.document.FindText(1, docLength, findingBOL.data(), FindOption::RegExp | FindOption::Cxx11RegEx, &lengthFinding);
+ REQUIRE(location == 10);
+ REQUIRE(lengthFinding == 0);
+ #endif
+
+ constexpr std::string_view findingEOL = "$";
+ lengthFinding = findingEOL.length();
+ location = doc.document.FindText(0, docLength, findingEOL.data(), FindOption::RegExp | FindOption::Posix, &lengthFinding);
+ REQUIRE(location == 8);
+ REQUIRE(lengthFinding == 0);
+ lengthFinding = findingEOL.length();
+ location = doc.document.FindText(1, docLength, findingEOL.data(), FindOption::RegExp | FindOption::Posix, &lengthFinding);
+ REQUIRE(location == 8);
+ REQUIRE(lengthFinding == 0);
+ lengthFinding = findingEOL.length();
+ location = doc.document.FindText(docLength, 0, findingEOL.data(), FindOption::RegExp | FindOption::Posix, &lengthFinding);
+ REQUIRE(location == 18);
+ REQUIRE(lengthFinding == 0);
+ lengthFinding = findingEOL.length();
+ location = doc.document.FindText(docLength - 1, 0, findingEOL.data(), FindOption::RegExp | FindOption::Posix, &lengthFinding);
+ REQUIRE(location == 8);
+ REQUIRE(lengthFinding == 0);
+
+ #ifndef NO_CXX11_REGEX
+ lengthFinding = findingEOL.length();
+ location = doc.document.FindText(0, docLength, findingEOL.data(), FindOption::RegExp | FindOption::Cxx11RegEx, &lengthFinding);
+ REQUIRE(location == 8);
+ REQUIRE(lengthFinding == 0);
+ lengthFinding = findingEOL.length();
+ location = doc.document.FindText(1, docLength, findingEOL.data(), FindOption::RegExp | FindOption::Cxx11RegEx, &lengthFinding);
+ REQUIRE(location == 8);
+ REQUIRE(lengthFinding == 0);
+ #endif
+
+ constexpr std::string_view findingBOW = "\\<";
+ lengthFinding = findingBOW.length();
+ location = doc.document.FindText(0, docLength, findingBOW.data(), FindOption::RegExp | FindOption::Posix, &lengthFinding);
+ REQUIRE(location == 0);
+ REQUIRE(lengthFinding == 0);
+ lengthFinding = findingBOW.length();
+ location = doc.document.FindText(1, docLength, findingBOW.data(), FindOption::RegExp | FindOption::Posix, &lengthFinding);
+ REQUIRE(location == 3);
+ REQUIRE(lengthFinding == 0);
+ lengthFinding = findingBOW.length();
+ location = doc.document.FindText(docLength, 0, findingBOW.data(), FindOption::RegExp | FindOption::Posix, &lengthFinding);
+ REQUIRE(location == 16);
+ REQUIRE(lengthFinding == 0);
+ lengthFinding = findingBOW.length();
+ location = doc.document.FindText(docLength - 1, 0, findingBOW.data(), FindOption::RegExp | FindOption::Posix, &lengthFinding);
+ REQUIRE(location == 16);
+ REQUIRE(lengthFinding == 0);
+
+ constexpr std::string_view findingEOW = "\\>";
+ lengthFinding = findingEOW.length();
+ location = doc.document.FindText(0, docLength, findingEOW.data(), FindOption::RegExp | FindOption::Posix, &lengthFinding);
+ REQUIRE(location == 2);
+ REQUIRE(lengthFinding == 0);
+ lengthFinding = findingEOW.length();
+ location = doc.document.FindText(1, docLength, findingEOW.data(), FindOption::RegExp | FindOption::Posix, &lengthFinding);
+ REQUIRE(location == 2);
+ REQUIRE(lengthFinding == 0);
+ lengthFinding = findingEOW.length();
+ location = doc.document.FindText(docLength, 0, findingEOW.data(), FindOption::RegExp | FindOption::Posix, &lengthFinding);
+ REQUIRE(location == 18);
+ REQUIRE(lengthFinding == 0);
+ lengthFinding = findingEOW.length();
+ location = doc.document.FindText(docLength - 1, 0, findingEOW.data(), FindOption::RegExp | FindOption::Posix, &lengthFinding);
+ REQUIRE(location == 15);
+ REQUIRE(lengthFinding == 0);
+
+ constexpr std::string_view findingEOWEOL = "\\>$";
+ lengthFinding = findingEOWEOL.length();
+ location = doc.document.FindText(0, docLength, findingEOWEOL.data(), FindOption::RegExp | FindOption::Posix, &lengthFinding);
+ REQUIRE(location == 8);
+ REQUIRE(lengthFinding == 0);
+ lengthFinding = findingEOWEOL.length();
+ location = doc.document.FindText(10, docLength, findingEOWEOL.data(), FindOption::RegExp | FindOption::Posix, &lengthFinding);
+ REQUIRE(location == 18);
+ REQUIRE(lengthFinding == 0);
+
+#ifndef NO_CXX11_REGEX
+ constexpr std::string_view findingWB = "\\b";
+ lengthFinding = findingWB.length();
+ location = doc.document.FindText(0, docLength, findingWB.data(), FindOption::RegExp | FindOption::Cxx11RegEx, &lengthFinding);
+ REQUIRE(location == 0);
+ REQUIRE(lengthFinding == 0);
+ lengthFinding = findingWB.length();
+ location = doc.document.FindText(1, docLength, findingWB.data(), FindOption::RegExp | FindOption::Cxx11RegEx, &lengthFinding);
+ REQUIRE(location == 1);
+ REQUIRE(lengthFinding == 0);
+
+ constexpr std::string_view findingNWB = "\\B";
+ lengthFinding = findingNWB.length();
+ location = doc.document.FindText(0, docLength, findingNWB.data(), FindOption::RegExp | FindOption::Cxx11RegEx, &lengthFinding);
+ REQUIRE(location == 1);
+ REQUIRE(lengthFinding == 0);
+ lengthFinding = findingNWB.length();
+ location = doc.document.FindText(1, docLength, findingNWB.data(), FindOption::RegExp | FindOption::Cxx11RegEx, &lengthFinding);
+ REQUIRE(location == 4);
+ REQUIRE(lengthFinding == 0);
+ #endif
+ }
}
TEST_CASE("Words") {