diff options
| author | Zufu Liu <unknown> | 2023-12-02 08:20:55 +1100 | 
|---|---|---|
| committer | Zufu Liu <unknown> | 2023-12-02 08:20:55 +1100 | 
| commit | e6538bb38cd509111f0f595f46e7d1ff71bcc017 (patch) | |
| tree | cdf847b194f9431c64d2b527c7b216e7486aceb2 /test | |
| parent | c8ca5050cf8c908e49d28eda5642542f7ac1155b (diff) | |
| download | scintilla-mirror-e6538bb38cd509111f0f595f46e7d1ff71bcc017.tar.gz | |
Bug [#2157]. Fix regular expression search for word begin \< and word end \>.
Diffstat (limited to 'test')
| -rw-r--r-- | test/unit/testDocument.cxx | 130 | 
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") {  | 
