tdf#140674 sw change tracking: fix :emoji: replacement

Regression from commit 2951c96bcb673a260a09e2c6eb92ca0f99bf0c18
(tdf#83419 sw change tracking: clean-up autocorrect).

Note: only :snowman: -> ☃ was added to the test autocorrect
file acor_en-GB.dat.

Change-Id: Ic3013e969ab937a5f9e5b6d1a6fac2f533b541f8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112166
Tested-by: Jenkins
Reviewed-by: László Németh <nemeth@numbertext.org>
(cherry picked from commit db999ddee7a890390f66d7e34906066c8bf178da)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112218
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx
index e205f94..d7e7519 100644
--- a/sw/qa/extras/uiwriter/uiwriter.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter.cxx
@@ -392,6 +392,7 @@ public:
    void testSpellOnlineParameter();
    void testRedlineAutoCorrect();
    void testRedlineAutoCorrect2();
    void testEmojiAutoCorrect();
#if HAVE_FEATURE_PDFIUM
    void testInsertPdf();
#endif
@@ -620,6 +621,7 @@ public:
    CPPUNIT_TEST(testSpellOnlineParameter);
    CPPUNIT_TEST(testRedlineAutoCorrect);
    CPPUNIT_TEST(testRedlineAutoCorrect2);
    CPPUNIT_TEST(testEmojiAutoCorrect);
#if HAVE_FEATURE_PDFIUM
    CPPUNIT_TEST(testInsertPdf);
#endif
@@ -7704,6 +7706,39 @@ void SwUiWriterTest::testRedlineAutoCorrect2()
    CPPUNIT_ASSERT_EQUAL(sReplaced, static_cast<SwTextNode*>(pDoc->GetNodes()[nIndex])->GetText());
}

void SwUiWriterTest::testEmojiAutoCorrect()
{
    SwDoc* pDoc = createDoc("redline-autocorrect2.fodt");
    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();

    // Emoji replacement (:snowman: -> ☃)

    // without change tracking
    CPPUNIT_ASSERT(!(pWrtShell->GetRedlineFlags() & RedlineFlags::On));
    SwAutoCorrect corr(*SvxAutoCorrCfg::Get().GetAutoCorrect());
    pWrtShell->Insert(":snowman");
    pWrtShell->AutoCorrect(corr, ':');
    sal_uLong nIndex = pWrtShell->GetCursor()->GetNode().GetIndex();
    OUString sReplaced = u"☃Lorem,";
    nIndex = pWrtShell->GetCursor()->GetNode().GetIndex();
    CPPUNIT_ASSERT_EQUAL(sReplaced, static_cast<SwTextNode*>(pDoc->GetNodes()[nIndex])->GetText());

    // with change tracking (showing redlines)
    RedlineFlags const nMode(pWrtShell->GetRedlineFlags() | RedlineFlags::On);
    CPPUNIT_ASSERT(nMode & (RedlineFlags::ShowDelete | RedlineFlags::ShowInsert));
    pWrtShell->SetRedlineFlags(nMode);
    CPPUNIT_ASSERT(nMode & RedlineFlags::On);
    CPPUNIT_ASSERT(nMode & RedlineFlags::ShowDelete);

    pWrtShell->Insert(":snowman");
    pWrtShell->AutoCorrect(corr, ':');
    sReplaced = u"☃☃Lorem,";
    nIndex = pWrtShell->GetCursor()->GetNode().GetIndex();

    // tdf#140674 This was ":snowman:" instead of autocorrect
    CPPUNIT_ASSERT_EQUAL(sReplaced, static_cast<SwTextNode*>(pDoc->GetNodes()[nIndex])->GetText());
}

void SwUiWriterTest::testTdf108423()
{
    SwDoc* pDoc = createDoc();
diff --git a/sw/source/core/doc/DocumentRedlineManager.cxx b/sw/source/core/doc/DocumentRedlineManager.cxx
index 25d26f6..14d6b76 100644
--- a/sw/source/core/doc/DocumentRedlineManager.cxx
+++ b/sw/source/core/doc/DocumentRedlineManager.cxx
@@ -2551,7 +2551,7 @@ SwRedlineTable::size_type DocumentRedlineManager::GetRedlinePos( const SwNode& r
    // #TODO - add 'SwExtraRedlineTable' also ?
}

bool DocumentRedlineManager::HasRedline( const SwPaM& rPam, RedlineType nType, bool bStartOrEndInRange ) const // xxx
bool DocumentRedlineManager::HasRedline( const SwPaM& rPam, RedlineType nType, bool bStartOrEndInRange ) const
{
    SwPosition currentStart(*rPam.Start());
    SwPosition currentEnd(*rPam.End());
@@ -2572,7 +2572,7 @@ bool DocumentRedlineManager::HasRedline( const SwPaM& rPam, RedlineType nType, b
        if ( currentStart < *pTmp->End() && *pTmp->Start() <= currentEnd &&
             // starting or ending within the range
             ( !bStartOrEndInRange ||
                 ( currentStart <= *pTmp->Start() || *pTmp->End() <= currentEnd ) ) )
                 ( currentStart < *pTmp->Start() || *pTmp->End() < currentEnd ) ) )
        {
            return true;
        }
diff --git a/test/user-template/user/autocorr/acor_en-GB.dat b/test/user-template/user/autocorr/acor_en-GB.dat
index b74f183..ae2f12d 100644
--- a/test/user-template/user/autocorr/acor_en-GB.dat
+++ b/test/user-template/user/autocorr/acor_en-GB.dat
Binary files differ