[Libreoffice-commits] core.git: Branch 'libreoffice-5-2' - sw/CppunitTest_sw_globalfilter.mk sw/qa sw/source

Michael Stahl mstahl at redhat.com
Wed Jun 8 18:42:24 UTC 2016


 sw/CppunitTest_sw_globalfilter.mk          |   36 ------------------
 sw/qa/extras/globalfilter/globalfilter.cxx |   56 +++++++++++++++++++++++++++++
 sw/source/filter/basflt/shellio.cxx        |    3 -
 sw/source/filter/ww8/wrtww8.cxx            |   10 +++++
 4 files changed, 67 insertions(+), 38 deletions(-)

New commits:
commit cf60f871a91f2ea373f4e10ab3992ecd98b0535d
Author: Michael Stahl <mstahl at redhat.com>
Date:   Wed Jun 8 12:31:06 2016 +0200

    tdf#97103 sw: fix restoring of SetRedlineMode on DOCX/RTF export
    
    In order to prevent ~SwIndexReg asserts, this was changed to restore
    the redline mode not in MSWordExportBase::ExportDocument() but in
    SwWriter::Write().  Unfortunately only the DOC export actually uses
    SwWriter::Write(), so fix the original problem differently by moving the
    cursors onto a EndNode.
    
    The m_pCurPam will be deleted anyway, and the m_pOrigPam usually also
    will be, and in the case it isn't deleted i hope it's not important :)
    
    (regression from 0b037361b890a83a735186b98d5a3cef124027f4)
    
    Change-Id: Ib3d0cc32862256fdc4363b6035c190cbbcfe5df3
    (cherry picked from commit a59c4e26abbdd0720d24d3ddc0d6a05a67a31aaf)
    Reviewed-on: https://gerrit.libreoffice.org/26064
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>

diff --git a/sw/CppunitTest_sw_globalfilter.mk b/sw/CppunitTest_sw_globalfilter.mk
index 6650266..8c48b49 100644
--- a/sw/CppunitTest_sw_globalfilter.mk
+++ b/sw/CppunitTest_sw_globalfilter.mk
@@ -50,41 +50,7 @@ $(eval $(call gb_CppunitTest_use_api,sw_globalfilter,\
 $(eval $(call gb_CppunitTest_use_ure,sw_globalfilter))
 $(eval $(call gb_CppunitTest_use_vcl,sw_globalfilter))
 
-$(eval $(call gb_CppunitTest_use_components,sw_globalfilter,\
-	basic/util/sb \
-	comphelper/util/comphelp \
-	configmgr/source/configmgr \
-	dbaccess/util/dba \
-	drawinglayer/drawinglayer \
-	embeddedobj/util/embobj \
-	filter/source/config/cache/filterconfig1 \
-	filter/source/storagefilterdetect/storagefd \
-	filter/source/textfilterdetect/textfd \
-	forms/util/frm \
-	framework/util/fwk \
-	i18npool/util/i18npool \
-	linguistic/source/lng \
-	oox/util/oox \
-	package/source/xstor/xstor \
-	package/util/package2 \
-	sax/source/expatwrap/expwrap \
-	sfx2/util/sfx \
-	svl/source/fsstor/fsstorage \
-	svtools/util/svt \
-	sw/util/msword \
-	sw/util/sw \
-	sw/util/swd \
-	toolkit/util/tk \
-	ucb/source/core/ucb1 \
-	ucb/source/ucp/file/ucpfile1 \
-	unotools/util/utl \
-	unoxml/source/rdf/unordf \
-	unoxml/source/service/unoxml \
-	uui/util/uui \
-	$(if $(filter DESKTOP,$(BUILD_TYPE)),xmlhelp/util/ucpchelp1) \
-	writerfilter/util/writerfilter \
-	xmloff/util/xo \
-))
+$(eval $(call gb_CppunitTest_use_rdb,sw_globalfilter,services))
 
 $(eval $(call gb_CppunitTest_use_custom_headers,sw_globalfilter,\
 	officecfg/registry \
diff --git a/sw/qa/extras/globalfilter/globalfilter.cxx b/sw/qa/extras/globalfilter/globalfilter.cxx
index b32f3b8..4a70774 100644
--- a/sw/qa/extras/globalfilter/globalfilter.cxx
+++ b/sw/qa/extras/globalfilter/globalfilter.cxx
@@ -15,6 +15,8 @@
 #include <comphelper/processfactory.hxx>
 #include <unotxdoc.hxx>
 #include <docsh.hxx>
+#include <IDocumentRedlineAccess.hxx>
+#include <IDocumentContentOperations.hxx>
 #include <doc.hxx>
 #include <ndgrf.hxx>
 #include <drawdoc.hxx>
@@ -37,6 +39,7 @@ public:
 #if !defined(_WIN32)
     void testSkipImages();
 #endif
+    void testRedlineMode();
 
     CPPUNIT_TEST_SUITE(Test);
     CPPUNIT_TEST(testSwappedOutImageExport);
@@ -50,6 +53,7 @@ public:
 #if !defined(_WIN32)
     CPPUNIT_TEST(testSkipImages);
 #endif
+    CPPUNIT_TEST(testRedlineMode);
     CPPUNIT_TEST_SUITE_END();
 };
 
@@ -817,6 +821,58 @@ void Test::testSkipImages()
 }
 #endif
 
+void Test::testRedlineMode()
+{
+    const char* aFilterNames[] = {
+        "writer8",
+        "Rich Text Format",
+        "MS Word 97",
+        "Office Open XML Text",
+    };
+
+    mxComponent = loadFromDesktop("private:factory/swriter", "com.sun.star.text.TextDocument");
+    SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument *>(mxComponent.get());
+    CPPUNIT_ASSERT(pTextDoc);
+    SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc();
+
+    SwPaM pam(SwPosition(SwNodeIndex(pDoc->GetNodes().GetEndOfContent(), -1)));
+    pDoc->getIDocumentContentOperations().InsertString(pam, "foo bar baz");
+
+    IDocumentRedlineAccess & rIDRA(pDoc->getIDocumentRedlineAccess());
+    // enable change tracking
+    rIDRA.SetRedlineMode(rIDRA.GetRedlineMode()
+        | nsRedlineMode_t::REDLINE_ON | nsRedlineMode_t::REDLINE_SHOW_DELETE);
+
+    // need a delete redline to trigger mode switching
+    pam.Move(fnMoveForward, fnGoDoc);
+    pam.SetMark();
+    pam.Move(fnMoveBackward, fnGoDoc);
+    pDoc->getIDocumentContentOperations().DeleteAndJoin(pam);
+
+    // hide delete redlines
+    RedlineMode_t const nRedlineMode =
+        rIDRA.GetRedlineMode() & ~nsRedlineMode_t::REDLINE_SHOW_DELETE;
+    rIDRA.SetRedlineMode(nRedlineMode);
+
+    for (size_t nFilter = 0; nFilter < SAL_N_ELEMENTS(aFilterNames); ++nFilter)
+    {
+        // export the document
+        uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY);
+
+        utl::MediaDescriptor aMediaDescriptor;
+        aMediaDescriptor["FilterName"] <<= OUString::createFromAscii(aFilterNames[nFilter]);
+        utl::TempFile aTempFile;
+        aTempFile.EnableKillingFile();
+        xStorable->storeToURL(aTempFile.GetURL(),
+                aMediaDescriptor.getAsConstPropertyValueList());
+
+        // tdf#97103 check that redline mode is properly restored
+        CPPUNIT_ASSERT_EQUAL_MESSAGE(
+            OString(OString("redline mode not restored in ") + aFilterNames[nFilter]).getStr(),
+            nRedlineMode, rIDRA.GetRedlineMode());
+    }
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(Test);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/filter/basflt/shellio.cxx b/sw/source/filter/basflt/shellio.cxx
index d0a5429..0961d77 100644
--- a/sw/source/filter/basflt/shellio.cxx
+++ b/sw/source/filter/basflt/shellio.cxx
@@ -858,7 +858,6 @@ sal_uLong SwWriter::Write( WriterRef& rxWriter, const OUString* pRealFileName )
 
     const bool bOrigPurgeOle = pOutDoc->getIDocumentSettingAccess().get(DocumentSettingId::PURGE_OLE);
     pOutDoc->getIDocumentSettingAccess().set(DocumentSettingId::PURGE_OLE, false);
-    const RedlineMode_t nOrigRedlineMode = pOutDoc->getIDocumentRedlineAccess().GetRedlineMode();
 
     sal_uLong nError = 0;
     if( pMedium )
@@ -888,12 +887,10 @@ sal_uLong SwWriter::Write( WriterRef& rxWriter, const OUString* pRealFileName )
             else
                 delete pPam;
         }
-        pOutDoc->getIDocumentRedlineAccess().SetRedlineMode(nOrigRedlineMode);
     }
     else
     {
         delete pPam;            // delete the created Pam
-        pOutDoc->getIDocumentRedlineAccess().SetRedlineMode(nOrigRedlineMode);
         // Everything was written successfully? Tell the document!
         if ( !IsError( nError ) && !pDoc )
         {
diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx
index 278cec8..262ee5c 100644
--- a/sw/source/filter/ww8/wrtww8.cxx
+++ b/sw/source/filter/ww8/wrtww8.cxx
@@ -3134,6 +3134,16 @@ void MSWordExportBase::ExportDocument( bool bWriteAll )
         m_pDoc->getIDocumentDrawModelAccess().GetDrawModel()->GetPage( 0 )->RecalcObjOrdNums();
 
     ExportDocument_Impl();
+
+    // park m_pCurPam in a "safe place" now that document is fully exported
+    // before toggling redline mode to avoid ~SwIndexReg assert e.g. export
+    // ooo103014-1.odt to .doc
+    // park m_pOrigPam as well, as needed for exporting abi9915-1.odt to doc
+    m_pOrigPam->DeleteMark();
+    *m_pOrigPam->GetPoint() = SwPosition(m_pDoc->GetNodes().GetEndOfContent());
+    *m_pCurPam = *m_pOrigPam;
+
+    m_pDoc->getIDocumentRedlineAccess().SetRedlineMode(m_nOrigRedlineMode);
 }
 
 bool SwWW8Writer::InitStd97CodecUpdateMedium( ::msfilter::MSCodec_Std97& rCodec )


More information about the Libreoffice-commits mailing list