diff options
author | Miklos Vajna <vmiklos@collabora.com> | 2021-02-08 21:03:04 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2021-02-09 09:02:18 +0100 |
commit | 3b928391b3398c1113e675ea6a542d05d9611e0a (patch) | |
tree | 37e885c0d6a9e2117ced0999630a224c28a7989c /writerfilter | |
parent | 066799b4a162aa0a4bc6aa28339f1f943a13971e (diff) |
tdf#134592 DOCX import: preserve formatting of CREATEDATE fields
The create date of a document doesn't really change, so we can only
loose if the cached result of the field is not preserved.
Change-Id: I0105d9c5bb9a06cacc1f5fed2a10b6626fa80fd7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110596
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Diffstat (limited to 'writerfilter')
-rw-r--r-- | writerfilter/CppunitTest_writerfilter_dmapper.mk | 1 | ||||
-rw-r--r-- | writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx | 23 | ||||
-rw-r--r-- | writerfilter/qa/cppunittests/dmapper/data/create-date-preserve.docx | bin | 0 -> 13310 bytes | |||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 7 |
4 files changed, 31 insertions, 0 deletions
diff --git a/writerfilter/CppunitTest_writerfilter_dmapper.mk b/writerfilter/CppunitTest_writerfilter_dmapper.mk index 7fe8b9035d3d..48b4ee87e087 100644 --- a/writerfilter/CppunitTest_writerfilter_dmapper.mk +++ b/writerfilter/CppunitTest_writerfilter_dmapper.mk @@ -33,6 +33,7 @@ $(eval $(call gb_CppunitTest_use_libraries,writerfilter_dmapper, \ sal \ test \ unotest \ + vcl \ )) $(eval $(call gb_CppunitTest_use_sdk_api,writerfilter_dmapper)) diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx index 6cd688975bd1..ef4c8ed40fb0 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapper_Impl.cxx @@ -19,6 +19,8 @@ #include <com/sun/star/text/XTextTablesSupplier.hpp> #include <com/sun/star/text/XTextTable.hpp> +#include <vcl/scheduler.hxx> + using namespace ::com::sun::star; namespace @@ -189,6 +191,27 @@ CPPUNIT_TEST_FIXTURE(Test, testFieldIfInsideIf) // i.e. some of the inner fields escaped outside the outer field. CPPUNIT_ASSERT_EQUAL(OUString("25"), xCell->getString()); } + +CPPUNIT_TEST_FIXTURE(Test, testCreateDatePreserve) +{ + OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "create-date-preserve.docx"; + getComponent() = loadFromDesktop(aURL); + // Trigger idle layout. + Scheduler::ProcessEventsToIdle(); + uno::Reference<text::XTextDocument> xTextDocument(getComponent(), uno::UNO_QUERY); + uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xTextDocument->getText(), + uno::UNO_QUERY); + uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration(); + uno::Reference<container::XEnumerationAccess> xPortionEnumAccess(xParaEnum->nextElement(), + uno::UNO_QUERY); + uno::Reference<container::XEnumeration> xPortionEnum = xPortionEnumAccess->createEnumeration(); + uno::Reference<text::XTextRange> xPortion(xPortionEnum->nextElement(), uno::UNO_QUERY); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 7/7/2020 10:11:00 AM + // - Actual : 07/07/2020 + // i.e. the formatting of the create date field was lost. + CPPUNIT_ASSERT_EQUAL(OUString("7/7/2020 10:11:00 AM"), xPortion->getString()); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/qa/cppunittests/dmapper/data/create-date-preserve.docx b/writerfilter/qa/cppunittests/dmapper/data/create-date-preserve.docx Binary files differnew file mode 100644 index 000000000000..4a587ce0d2ef --- /dev/null +++ b/writerfilter/qa/cppunittests/dmapper/data/create-date-preserve.docx diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 05e82a975173..c3cbbcb2a2b9 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -6258,6 +6258,13 @@ void DomainMapper_Impl::SetFieldResult(OUString const& rResult) xFieldProperties->setPropertyValue( getPropertyName(bHasContent && sValue.isEmpty()? PROP_CONTENT : PROP_CURRENT_PRESENTATION), uno::makeAny( rResult )); + + if (xServiceInfo->supportsService( + "com.sun.star.text.TextField.DocInfo.CreateDateTime")) + { + // Creation time is const, don't try to update it. + xFieldProperties->setPropertyValue("IsFixed", uno::makeAny(true)); + } } } catch( const beans::UnknownPropertyException& ) |