sw/qa/extras/unowriter/data/one-change.fodt |   19 ++++++++++++
 sw/qa/extras/unowriter/unowriter.cxx        |   41 ++++++++++++++++++++++++++++
 sw/source/core/unocore/unoredline.cxx       |    2 -
 3 files changed, 61 insertions(+), 1 deletion(-)

New commits:
commit 0dba73f899354915b12b5368e5f0c5bfffb39b94
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Mon Jun 16 13:42:32 2025 +0500
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Mon Jun 16 17:18:28 2025 +0200

    Make sure that "RedlineStart" and "RedlineEnd" point to correct points
    
    Looks like it could be the other way round, using GetPoint/GetMark.
    
    Change-Id: Iae95470a5877bdb8eaf05a65db18819dacd26ad4
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/186553
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git a/sw/qa/extras/unowriter/data/one-change.fodt 
b/sw/qa/extras/unowriter/data/one-change.fodt
new file mode 100644
index 000000000000..f1b0a822a6b8
--- /dev/null
+++ b/sw/qa/extras/unowriter/data/one-change.fodt
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document 
xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" 
xmlns:dc="http://purl.org/dc/elements/1.1/"; 
xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" 
office:version="1.4" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:body>
+  <office:text>
+   <text:tracked-changes text:track-changes="false">
+    <text:changed-region xml:id="ct2378399014640" text:id="ct2378399014640">
+     <text:deletion>
+      <office:change-info>
+       <dc:creator>Mike</dc:creator>
+       <dc:date>2025-06-16T14:08:27</dc:date>
+      </office:change-info>
+     </text:deletion>
+    </text:changed-region>
+   </text:tracked-changes>
+   <text:p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum 
consequat mi quis pretium semper. Proin luctus orci ac neque venenatis, quis 
commodo dolor posuere. Curabitur dignissim sapien quis cursus egestas. 
<text:change-start text:change-id="ct2378399014640"/>Donec<text:change-end 
text:change-id="ct2378399014640"/> blandit auctor arcu, nec pellentesque eros 
molestie eget. In consectetur aliquam hendrerit. Sed cursus mauris vitae ligula 
pellentesque, non pellentesque urna aliquet. Fusce placerat mauris enim, nec 
rutrum purus semper vel. Praesent tincidunt neque eu pellentesque pharetra. 
Fusce pellentesque est orci.</text:p>
+  </office:text>
+ </office:body>
+</office:document>
\ No newline at end of file
diff --git a/sw/qa/extras/unowriter/unowriter.cxx 
b/sw/qa/extras/unowriter/unowriter.cxx
index 32dd4ead2097..9869b02a4565 100644
--- a/sw/qa/extras/unowriter/unowriter.cxx
+++ b/sw/qa/extras/unowriter/unowriter.cxx
@@ -1597,6 +1597,47 @@ CPPUNIT_TEST_FIXTURE(SwUnoWriter, 
testMarkWithPreexistingNameInsertion)
     CPPUNIT_ASSERT(!rest.isEmpty()); // should be " Copy 1"
 }
 
+CPPUNIT_TEST_FIXTURE(SwUnoWriter, testRedlineStartEnd)
+{
+    // Given a document with a single tracked change, a removal of the word 
"Donec":
+    createSwDoc("one-change.fodt");
+
+    auto xRedlinesSupplier = 
mxComponent.queryThrow<document::XRedlinesSupplier>();
+    auto xRedlines = xRedlinesSupplier->getRedlines();
+    CPPUNIT_ASSERT(xRedlines);
+    auto xEnumeration = xRedlines->createEnumeration();
+    CPPUNIT_ASSERT(xEnumeration);
+    CPPUNIT_ASSERT(xEnumeration->hasMoreElements());
+    auto xRedline = xEnumeration->nextElement().query<beans::XPropertySet>();
+    CPPUNIT_ASSERT(xRedline);
+
+    // Check that "RedlineStart" and "RedlineEnd" point to start resp. end of 
the redline range:
+    {
+        auto xTextRange
+            = 
xRedline->getPropertyValue(u"RedlineStart"_ustr).queryThrow<text::XTextRange>();
+        auto xCursor = 
xTextRange->getText()->createTextCursorByRange(xTextRange);
+        CPPUNIT_ASSERT(xCursor);
+        xCursor->goLeft(10, /*bExpand*/ true);
+        // Without the fix, this failed with
+        // - Expected:  egestas.
+        // - Actual  : tas. Donec
+        CPPUNIT_ASSERT_EQUAL(u" egestas. "_ustr, xCursor->getString());
+    }
+    {
+        auto xTextRange
+            = 
xRedline->getPropertyValue(u"RedlineEnd"_ustr).queryThrow<text::XTextRange>();
+        auto xCursor = 
xTextRange->getText()->createTextCursorByRange(xTextRange);
+        CPPUNIT_ASSERT(xCursor);
+        xCursor->goRight(9, /*bExpand*/ true);
+        // Without the fix, this failed with
+        // - Expected:  blandit
+        // - Actual  : Donec bla
+        CPPUNIT_ASSERT_EQUAL(u" blandit "_ustr, xCursor->getString());
+    }
+
+    CPPUNIT_ASSERT(!xEnumeration->hasMoreElements());
+}
+
 } // end of anonymous namespace
 CPPUNIT_PLUGIN_IMPLEMENT();
 
diff --git a/sw/source/core/unocore/unoredline.cxx 
b/sw/source/core/unocore/unoredline.cxx
index 935b5c206773..5c3861fc52b7 100644
--- a/sw/source/core/unocore/unoredline.cxx
+++ b/sw/source/core/unocore/unoredline.cxx
@@ -443,7 +443,7 @@ uno::Any SwXRedline::getPropertyValue( const OUString& 
rPropertyName )
         rPropertyName == UNO_NAME_REDLINE_END)
     {
         uno::Reference<XInterface> xRet;
-        SwPosition* pPoint = bStart ? m_pRedline->GetPoint() : 
m_pRedline->GetMark();
+        SwPosition* pPoint = bStart ? m_pRedline->Start() : m_pRedline->End();
         switch (pPoint->GetNode().GetNodeType())
         {
             case SwNodeType::Section:

Reply via email to