summaryrefslogtreecommitdiff
path: root/i18npool/qa/cppunit
diff options
context:
space:
mode:
authorLászló Németh <nemeth@numbertext.org>2024-06-26 17:53:21 +0200
committerLászló Németh <nemeth@numbertext.org>2024-06-27 10:22:11 +0200
commit3a02490e1a04c32e18ce5bad5f3c3cb70501a7a4 (patch)
tree539452e058eef3337c1f5917f6f88eb518b64440 /i18npool/qa/cppunit
parent8bc8f073e81d125a8e8f1adce966ddb2c7d6bacb (diff)
tdf#138258 i18npool: allow ASCII double quote to match typographic quote
Similar to the straight (typewriter or ASCII) apostrophe, straight double quotation mark (") matches its typographic variants now, like other word processors do. Note: regex search doesn't use this matching, similar to the apostrophe search. Follow-up to commit d40f2d02df26e216f367b5da3f9546b73f250469 "tdf#117643 Writer: fix apostrophe search regression". Change-Id: If6a3ee00750828583cd0cfc4aa7f7b656ea9bd1e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169605 Reviewed-by: László Németh <nemeth@numbertext.org> Tested-by: Jenkins
Diffstat (limited to 'i18npool/qa/cppunit')
-rw-r--r--i18npool/qa/cppunit/test_textsearch.cxx88
1 files changed, 88 insertions, 0 deletions
diff --git a/i18npool/qa/cppunit/test_textsearch.cxx b/i18npool/qa/cppunit/test_textsearch.cxx
index 269380a90910..38cc099b7c95 100644
--- a/i18npool/qa/cppunit/test_textsearch.cxx
+++ b/i18npool/qa/cppunit/test_textsearch.cxx
@@ -38,6 +38,7 @@ public:
void testSearches();
void testWildcardSearch();
void testApostropheSearch();
+ void testQuotationMarkSearch();
void testTdf138410();
CPPUNIT_TEST_SUITE(TestTextSearch);
@@ -45,6 +46,7 @@ public:
CPPUNIT_TEST(testSearches);
CPPUNIT_TEST(testWildcardSearch);
CPPUNIT_TEST(testApostropheSearch);
+ CPPUNIT_TEST(testQuotationMarkSearch);
CPPUNIT_TEST(testTdf138410);
CPPUNIT_TEST_SUITE_END();
private:
@@ -404,6 +406,92 @@ void TestTextSearch::testApostropheSearch()
CPPUNIT_ASSERT( aRes.subRegExpressions > 0 );
}
+void TestTextSearch::testQuotationMarkSearch()
+{
+ // A) find typographic quotation marks also by using ASCII ones
+ OUString str( u"“x”, „y‟, ‘z’, ‚a‛"_ustr );
+ sal_Int32 startPos = 0, endPos = str.getLength();
+
+ // set options
+ util::SearchOptions aOptions;
+ aOptions.algorithmType = util::SearchAlgorithms_ABSOLUTE;
+ aOptions.searchFlag = util::SearchFlags::ALL_IGNORE_CASE;
+ aOptions.searchString = "\"x\"";
+ aOptions.transliterateFlags = static_cast<int>(TransliterationFlags::IGNORE_CASE
+ | TransliterationFlags::IGNORE_WIDTH);
+ m_xSearch->setOptions( aOptions );
+
+ util::SearchResult aRes;
+
+ // search forward
+ aRes = m_xSearch->searchForward( str, startPos, endPos );
+ // This was 0.
+ CPPUNIT_ASSERT( aRes.subRegExpressions > 0 );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(0), aRes.startOffset[0] );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(3), aRes.endOffset[0] );
+
+ // search backwards
+ aRes = m_xSearch->searchBackward( str, endPos, startPos );
+ // This was 0.
+ CPPUNIT_ASSERT( aRes.subRegExpressions > 0 );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(3), aRes.startOffset[0] );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(0), aRes.endOffset[0] );
+
+ // B)
+ aOptions.searchString = "\"y\"";
+ m_xSearch->setOptions( aOptions );
+
+ // search forward
+ aRes = m_xSearch->searchForward( str, startPos, endPos );
+ // This was 0.
+ CPPUNIT_ASSERT( aRes.subRegExpressions > 0 );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(5), aRes.startOffset[0] );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(8), aRes.endOffset[0] );
+
+ // search backwards
+ aRes = m_xSearch->searchBackward( str, endPos, startPos );
+ // This was 0.
+ CPPUNIT_ASSERT( aRes.subRegExpressions > 0 );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(8), aRes.startOffset[0] );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(5), aRes.endOffset[0] );
+
+ // C)
+ aOptions.searchString = "'z'";
+ m_xSearch->setOptions( aOptions );
+
+ // search forward
+ aRes = m_xSearch->searchForward( str, startPos, endPos );
+ // This was 0.
+ CPPUNIT_ASSERT( aRes.subRegExpressions > 0 );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(10), aRes.startOffset[0] );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(13), aRes.endOffset[0] );
+
+ // search backwards
+ aRes = m_xSearch->searchBackward( str, endPos, startPos );
+ // This was 0.
+ CPPUNIT_ASSERT( aRes.subRegExpressions > 0 );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(13), aRes.startOffset[0] );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(10), aRes.endOffset[0] );
+
+ // D)
+ aOptions.searchString = "'a'";
+ m_xSearch->setOptions( aOptions );
+
+ // search forward
+ aRes = m_xSearch->searchForward( str, startPos, endPos );
+ // This was 0.
+ CPPUNIT_ASSERT( aRes.subRegExpressions > 0 );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(15), aRes.startOffset[0] );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(18), aRes.endOffset[0] );
+
+ // search backwards
+ aRes = m_xSearch->searchBackward( str, endPos, startPos );
+ // This was 0.
+ CPPUNIT_ASSERT( aRes.subRegExpressions > 0 );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(18), aRes.startOffset[0] );
+ CPPUNIT_ASSERT_EQUAL( static_cast<sal_Int32>(15), aRes.endOffset[0] );
+}
+
void TestTextSearch::testTdf138410()
{
OUString str(u"\u0643\u064f\u062a\u064f\u0628 \u0643\u062a\u0628"_ustr);