[Libreoffice-commits] core.git: sw/inc sw/qa sw/source

Miklos Vajna vmiklos at collabora.co.uk
Wed Sep 21 15:06:55 UTC 2016


 sw/inc/redline.hxx                 |   14 +-------------
 sw/qa/extras/uiwriter/uiwriter.cxx |   11 ++++++++++-
 sw/source/core/doc/docredln.cxx    |   18 ++++++++++++++++++
 3 files changed, 29 insertions(+), 14 deletions(-)

New commits:
commit f240f073d228e62afd3f60563c23626efad0df7f
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Wed Sep 21 12:12:51 2016 +0200

    Related: tdf#102308 sw: ignore seconds when combining redlines
    
    The purpose of storing seconds was to get a better timestamp, not to
    make combining impossible.
    
    Also fix two issues with the existing testcase:
    
    - read both timestamps, so test doesn't fail if the second is 0 in the
      first redline
    - don't fail if minute changes while waiting for a second
    
    Change-Id: Ib6c8ecdcf2f0da9191f0b48e6aaefc0b2449583e

diff --git a/sw/inc/redline.hxx b/sw/inc/redline.hxx
index f6a0eac..0cf123b 100644
--- a/sw/inc/redline.hxx
+++ b/sw/inc/redline.hxx
@@ -150,19 +150,7 @@ public:
 
     void SetAutoFormatFlag()
         { eType = (RedlineType_t)(eType | nsRedlineType_t::REDLINE_FORM_AUTOFMT); }
-    bool CanCombine( const SwRedlineData& rCmp ) const
-        {
-            return nAuthor == rCmp.nAuthor &&
-                    eType == rCmp.eType &&
-                    sComment == rCmp.sComment &&
-                    GetTimeStamp() == rCmp.GetTimeStamp() &&
-                    (( !pNext && !rCmp.pNext ) ||
-                        ( pNext && rCmp.pNext &&
-                        pNext->CanCombine( *rCmp.pNext ))) &&
-                    (( !pExtraData && !rCmp.pExtraData ) ||
-                        ( pExtraData && rCmp.pExtraData &&
-                            *pExtraData == *rCmp.pExtraData ));
-        }
+    bool CanCombine( const SwRedlineData& rCmp ) const;
 
     // ExtraData gets copied, the pointer is therefore not taken over by
     // the RedlineObject
diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx
index 4e5f9cc..54755d3 100644
--- a/sw/qa/extras/uiwriter/uiwriter.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter.cxx
@@ -3960,11 +3960,20 @@ void SwUiWriterTest::testRedlineTimestamp()
     pWrtShell->EndDoc();
     pWrtShell->Insert("zzz");
 
+    // Inserting additional characters at the start changed the table size to
+    // 3, i.e. the first and the second "aaa" wasn't combined.
+    pWrtShell->SttDoc();
+    pWrtShell->Insert("aaa");
+
     // Now assert that at least one of the the seconds are not 0.
     const SwRedlineTable& rTable = pDoc->getIDocumentRedlineAccess().GetRedlineTable();
+    if (rTable.size() >= 2 && rTable[0]->GetRedlineData().GetTimeStamp().GetMin() != rTable[1]->GetRedlineData().GetTimeStamp().GetMin())
+        // The relatively rare case when waiting for a second also changes the minute.
+        return;
+
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), rTable.size());
     sal_uInt16 nSec1 = rTable[0]->GetRedlineData().GetTimeStamp().GetSec();
-    sal_uInt16 nSec2 = rTable[0]->GetRedlineData().GetTimeStamp().GetSec();
+    sal_uInt16 nSec2 = rTable[1]->GetRedlineData().GetTimeStamp().GetSec();
     // This failed, seconds was always 0.
     CPPUNIT_ASSERT(nSec1 != 0 || nSec2 != 0);
 }
diff --git a/sw/source/core/doc/docredln.cxx b/sw/source/core/doc/docredln.cxx
index b15883f..a3d3bb1 100644
--- a/sw/source/core/doc/docredln.cxx
+++ b/sw/source/core/doc/docredln.cxx
@@ -871,6 +871,24 @@ SwRedlineData::~SwRedlineData()
     delete pNext;
 }
 
+bool SwRedlineData::CanCombine(const SwRedlineData& rCmp) const
+{
+    DateTime aTime = GetTimeStamp();
+    aTime.SetSec(0);
+    DateTime aCompareTime = rCmp.GetTimeStamp();
+    aCompareTime.SetSec(0);
+    return nAuthor == rCmp.nAuthor &&
+            eType == rCmp.eType &&
+            sComment == rCmp.sComment &&
+            aTime == aCompareTime &&
+            (( !pNext && !rCmp.pNext ) ||
+                ( pNext && rCmp.pNext &&
+                pNext->CanCombine( *rCmp.pNext ))) &&
+            (( !pExtraData && !rCmp.pExtraData ) ||
+                ( pExtraData && rCmp.pExtraData &&
+                    *pExtraData == *rCmp.pExtraData ));
+}
+
 /// ExtraData is copied. The Pointer's ownership is thus NOT transferred
 /// to the Redline Object!
 void SwRedlineData::SetExtraData( const SwRedlineExtraData* pData )


More information about the Libreoffice-commits mailing list