[Libreoffice-commits] core.git: sw/CppunitTest_sw_rtfexport2.mk sw/CppunitTest_sw_rtfexport3.mk sw/Module_sw.mk sw/qa
Justin Luth
justin_luth at sil.org
Thu Jul 13 15:39:03 UTC 2017
sw/CppunitTest_sw_rtfexport2.mk | 60
sw/CppunitTest_sw_rtfexport3.mk | 58
sw/Module_sw.mk | 2
sw/qa/extras/rtfexport/data/classification-no.rtf | 1
sw/qa/extras/rtfexport/data/classification-yes.rtf | 11
sw/qa/extras/rtfexport/data/hello.rtf | 1
sw/qa/extras/rtfexport/data/tdf108949_footnoteCharFormat.odt |binary
sw/qa/extras/rtfexport/rtfexport2.cxx | 1844 +++++++++++
sw/qa/extras/rtfexport/rtfexport3.cxx | 40
sw/qa/extras/rtfimport/rtfimport.cxx | 1808 ----------
10 files changed, 2039 insertions(+), 1786 deletions(-)
New commits:
commit 898522c8563a3e59b8de295ceb766cb8e2024ed5
Author: Justin Luth <justin_luth at sil.org>
Date: Tue Jul 11 20:09:14 2017 -0400
move round-tripables from rtfimport to new rtfexport2
This serves two purposes. It helps to prevent regressions
and it allows focusing on features that still don't export properly.
Also created rtfexport3 since the other two are already very full.
Change-Id: I7d580f575c1debe344275869fefcbba6e29cbad6
Reviewed-on: https://gerrit.libreoffice.org/39842
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Justin Luth <justin_luth at sil.org>
diff --git a/sw/CppunitTest_sw_rtfexport2.mk b/sw/CppunitTest_sw_rtfexport2.mk
new file mode 100644
index 000000000000..3519afec5e7a
--- /dev/null
+++ b/sw/CppunitTest_sw_rtfexport2.mk
@@ -0,0 +1,60 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#*************************************************************************
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+#*************************************************************************
+
+$(eval $(call gb_CppunitTest_CppunitTest,sw_rtfexport2))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,sw_rtfexport2, \
+ sw/qa/extras/rtfexport/rtfexport2 \
+))
+
+$(eval $(call gb_CppunitTest_use_libraries,sw_rtfexport2, \
+ comphelper \
+ cppu \
+ cppuhelper \
+ i18nlangtag \
+ sal \
+ sfx \
+ sw \
+ test \
+ unotest \
+ utl \
+ vcl \
+ tl \
+))
+
+$(eval $(call gb_CppunitTest_use_externals,sw_rtfexport2,\
+ boost_headers \
+ libxml2 \
+))
+
+$(eval $(call gb_CppunitTest_set_include,sw_rtfexport2,\
+ -I$(SRCDIR)/sw/inc \
+ -I$(SRCDIR)/sw/source/core/inc \
+ -I$(SRCDIR)/sw/qa/extras/inc \
+ $$(INCLUDE) \
+))
+
+ifeq ($(OS),WNT)
+$(eval $(call gb_CppunitTest_add_cxxflags,sw_rtfexport2,\
+ -bigobj \
+))
+endif
+
+$(eval $(call gb_CppunitTest_use_sdk_api,sw_rtfexport2))
+
+$(eval $(call gb_CppunitTest_use_ure,sw_rtfexport2))
+$(eval $(call gb_CppunitTest_use_vcl,sw_rtfexport2))
+
+$(eval $(call gb_CppunitTest_use_rdb,sw_rtfexport2,services))
+
+$(eval $(call gb_CppunitTest_use_configuration,sw_rtfexport2))
+
+# vim: set noet sw=4 ts=4:
diff --git a/sw/CppunitTest_sw_rtfexport3.mk b/sw/CppunitTest_sw_rtfexport3.mk
new file mode 100644
index 000000000000..d0ebff13c4aa
--- /dev/null
+++ b/sw/CppunitTest_sw_rtfexport3.mk
@@ -0,0 +1,58 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#*************************************************************************
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+#*************************************************************************
+
+$(eval $(call gb_CppunitTest_CppunitTest,sw_rtfexport3))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,sw_rtfexport3, \
+ sw/qa/extras/rtfexport/rtfexport3 \
+))
+
+$(eval $(call gb_CppunitTest_use_libraries,sw_rtfexport3, \
+ comphelper \
+ cppu \
+ cppuhelper \
+ sal \
+ sfx \
+ sw \
+ test \
+ unotest \
+ utl \
+ tl \
+))
+
+$(eval $(call gb_CppunitTest_use_externals,sw_rtfexport3,\
+ boost_headers \
+ libxml2 \
+))
+
+$(eval $(call gb_CppunitTest_set_include,sw_rtfexport3,\
+ -I$(SRCDIR)/sw/inc \
+ -I$(SRCDIR)/sw/source/core/inc \
+ -I$(SRCDIR)/sw/qa/extras/inc \
+ $$(INCLUDE) \
+))
+
+ifeq ($(OS),WNT)
+$(eval $(call gb_CppunitTest_add_cxxflags,sw_rtfexport3,\
+ -bigobj \
+))
+endif
+
+$(eval $(call gb_CppunitTest_use_sdk_api,sw_rtfexport3))
+
+$(eval $(call gb_CppunitTest_use_ure,sw_rtfexport3))
+$(eval $(call gb_CppunitTest_use_vcl,sw_rtfexport3))
+
+$(eval $(call gb_CppunitTest_use_rdb,sw_rtfexport3,services))
+
+$(eval $(call gb_CppunitTest_use_configuration,sw_rtfexport3))
+
+# vim: set noet sw=4 ts=4:
diff --git a/sw/Module_sw.mk b/sw/Module_sw.mk
index 243566b9de9e..54a43681bed3 100644
--- a/sw/Module_sw.mk
+++ b/sw/Module_sw.mk
@@ -72,6 +72,8 @@ $(eval $(call gb_Module_add_slowcheck_targets,sw,\
CppunitTest_sw_ww8export2 \
CppunitTest_sw_ww8import \
CppunitTest_sw_rtfexport \
+ CppunitTest_sw_rtfexport2 \
+ CppunitTest_sw_rtfexport3 \
CppunitTest_sw_rtfimport \
CppunitTest_sw_odfexport \
CppunitTest_sw_odfimport \
diff --git a/sw/qa/extras/rtfimport/data/all_gaps_word.rtf b/sw/qa/extras/rtfexport/data/all_gaps_word.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/all_gaps_word.rtf
rename to sw/qa/extras/rtfexport/data/all_gaps_word.rtf
diff --git a/sw/qa/extras/rtfimport/data/bin-skipping.rtf b/sw/qa/extras/rtfexport/data/bin-skipping.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/bin-skipping.rtf
rename to sw/qa/extras/rtfexport/data/bin-skipping.rtf
diff --git a/sw/qa/extras/rtfimport/data/char-color.rtf b/sw/qa/extras/rtfexport/data/char-color.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/char-color.rtf
rename to sw/qa/extras/rtfexport/data/char-color.rtf
diff --git a/sw/qa/extras/rtfimport/data/classification-confidential.rtf b/sw/qa/extras/rtfexport/data/classification-confidential.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/classification-confidential.rtf
rename to sw/qa/extras/rtfexport/data/classification-confidential.rtf
diff --git a/sw/qa/extras/rtfexport/data/classification-no.rtf b/sw/qa/extras/rtfexport/data/classification-no.rtf
new file mode 100644
index 000000000000..7c773d1e2a1c
--- /dev/null
+++ b/sw/qa/extras/rtfexport/data/classification-no.rtf
@@ -0,0 +1 @@
+{\rtf1 \par classification-no\par}
diff --git a/sw/qa/extras/rtfexport/data/classification-yes.rtf b/sw/qa/extras/rtfexport/data/classification-yes.rtf
new file mode 100644
index 000000000000..a40c3d1dbb7b
--- /dev/null
+++ b/sw/qa/extras/rtfexport/data/classification-yes.rtf
@@ -0,0 +1,11 @@
+{\rtf1{\*\userprops
+{\propname urn:bails:IntellectualProperty:Authorization:StartValidity}\proptype30{\staticval 2016-03-08T10:55:18,531376147}{\propname urn:bails:IntellectualProperty:Authorization:StopValidity}\proptype30{\staticval None}{\propname urn:bails:IntellectualPr
+operty:BusinessAuthorization:Identifier}\proptype30{\staticval urn:example:tscp:1}{\propname urn:bails:IntellectualProperty:BusinessAuthorization:Locator}\proptype30{\staticval None}{\propname urn:bails:IntellectualProperty:BusinessAuthorization:Name}
+\proptype30{\staticval None}{\propname urn:bails:IntellectualProperty:BusinessAuthorizationCategory:Identifier}\proptype30{\staticval urn:example:tscp:1:internal-only}{\propname urn:bails:IntellectualProperty:BusinessAuthorizationCategory:Identifier:OID}
+\proptype30{\staticval None}{\propname urn:bails:IntellectualProperty:BusinessAuthorizationCategory:Locator}\proptype30{\staticval None}{\propname urn:bails:IntellectualProperty:BusinessAuthorizationCategory:Name}\proptype30{\staticval Internal Only}
+{\propname urn:bails:IntellectualProperty:Impact:Level:Availability}\proptype30{\staticval 3}{\propname urn:bails:IntellectualProperty:Impact:Level:Confidentiality}\proptype30{\staticval 3}{\propname urn:bails:IntellectualProperty:Impact:Level:Integrity}
+\proptype30{\staticval 3}{\propname urn:bails:IntellectualProperty:Impact:Scale}\proptype30{\staticval UK-Cabinet}{\propname urn:bails:IntellectualProperty:Marking:document-footer}\proptype30{\staticval This content is marked Internal Only. Do not distrib
+ute it outside of the business.}{\propname urn:bails:IntellectualProperty:Marking:document-header}\proptype30{\staticval Classification: Internal Only}{\propname urn:bails:IntellectualProperty:Marking:document-watermark}\proptype30{\staticval Internal Onl
+y}{\propname urn:bails:IntellectualProperty:MarkingPrecedence}\proptype30{\staticval None}{\propname urn:bails:IntellectualProperty:Policy:Identifier}\proptype30{\staticval None}{\propname urn:bails:IntellectualProperty:Policy:Name}\proptype30{\staticval
+TSCP Example Policy}{\propname urn:bails:IntellectualProperty:PolicyAuthority:Country}\proptype30{\staticval None}{\propname urn:bails:IntellectualProperty:PolicyAuthority:Identifier}\proptype30{\staticval None}{\propname urn:bails:IntellectualProperty:Po
+licyAuthority:Name}\proptype30{\staticval TSCP Example Policy Authority}}\par classification-yes\par}
diff --git a/sw/qa/extras/rtfimport/data/copypaste-footnote-paste.rtf b/sw/qa/extras/rtfexport/data/copypaste-footnote-paste.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/copypaste-footnote-paste.rtf
rename to sw/qa/extras/rtfexport/data/copypaste-footnote-paste.rtf
diff --git a/sw/qa/extras/rtfimport/data/copypaste-footnote.rtf b/sw/qa/extras/rtfexport/data/copypaste-footnote.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/copypaste-footnote.rtf
rename to sw/qa/extras/rtfexport/data/copypaste-footnote.rtf
diff --git a/sw/qa/extras/rtfimport/data/copypaste-pagestyle-paste.rtf b/sw/qa/extras/rtfexport/data/copypaste-pagestyle-paste.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/copypaste-pagestyle-paste.rtf
rename to sw/qa/extras/rtfexport/data/copypaste-pagestyle-paste.rtf
diff --git a/sw/qa/extras/rtfimport/data/copypaste-pagestyle.rtf b/sw/qa/extras/rtfexport/data/copypaste-pagestyle.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/copypaste-pagestyle.rtf
rename to sw/qa/extras/rtfexport/data/copypaste-pagestyle.rtf
diff --git a/sw/qa/extras/rtfimport/data/cp1000018.rtf b/sw/qa/extras/rtfexport/data/cp1000018.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/cp1000018.rtf
rename to sw/qa/extras/rtfexport/data/cp1000018.rtf
diff --git a/sw/qa/extras/rtfimport/data/cs-bold.rtf b/sw/qa/extras/rtfexport/data/cs-bold.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/cs-bold.rtf
rename to sw/qa/extras/rtfexport/data/cs-bold.rtf
diff --git a/sw/qa/extras/rtfimport/data/do-dhgt-old.rtf b/sw/qa/extras/rtfexport/data/do-dhgt-old.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/do-dhgt-old.rtf
rename to sw/qa/extras/rtfexport/data/do-dhgt-old.rtf
diff --git a/sw/qa/extras/rtfimport/data/do-dhgt.rtf b/sw/qa/extras/rtfexport/data/do-dhgt.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/do-dhgt.rtf
rename to sw/qa/extras/rtfexport/data/do-dhgt.rtf
diff --git a/sw/qa/extras/rtfimport/data/dplinehollow.rtf b/sw/qa/extras/rtfexport/data/dplinehollow.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/dplinehollow.rtf
rename to sw/qa/extras/rtfexport/data/dplinehollow.rtf
diff --git a/sw/qa/extras/rtfimport/data/dppolyline.rtf b/sw/qa/extras/rtfexport/data/dppolyline.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/dppolyline.rtf
rename to sw/qa/extras/rtfexport/data/dppolyline.rtf
diff --git a/sw/qa/extras/rtfimport/data/dprect-anchor.rtf b/sw/qa/extras/rtfexport/data/dprect-anchor.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/dprect-anchor.rtf
rename to sw/qa/extras/rtfexport/data/dprect-anchor.rtf
diff --git a/sw/qa/extras/rtfimport/data/dptxbx-relation.rtf b/sw/qa/extras/rtfexport/data/dptxbx-relation.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/dptxbx-relation.rtf
rename to sw/qa/extras/rtfexport/data/dptxbx-relation.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo36089.rtf b/sw/qa/extras/rtfexport/data/fdo36089.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo36089.rtf
rename to sw/qa/extras/rtfexport/data/fdo36089.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo37716.rtf b/sw/qa/extras/rtfexport/data/fdo37716.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo37716.rtf
rename to sw/qa/extras/rtfexport/data/fdo37716.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo38786.rtf b/sw/qa/extras/rtfexport/data/fdo38786.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo38786.rtf
rename to sw/qa/extras/rtfexport/data/fdo38786.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo39001.rtf b/sw/qa/extras/rtfexport/data/fdo39001.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo39001.rtf
rename to sw/qa/extras/rtfexport/data/fdo39001.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo39053.rtf b/sw/qa/extras/rtfexport/data/fdo39053.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo39053.rtf
rename to sw/qa/extras/rtfexport/data/fdo39053.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo42109.rtf b/sw/qa/extras/rtfexport/data/fdo42109.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo42109.rtf
rename to sw/qa/extras/rtfexport/data/fdo42109.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo42465.rtf b/sw/qa/extras/rtfexport/data/fdo42465.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo42465.rtf
rename to sw/qa/extras/rtfexport/data/fdo42465.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo43965.rtf b/sw/qa/extras/rtfexport/data/fdo43965.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo43965.rtf
rename to sw/qa/extras/rtfexport/data/fdo43965.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo44053.rtf b/sw/qa/extras/rtfexport/data/fdo44053.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo44053.rtf
rename to sw/qa/extras/rtfexport/data/fdo44053.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo44176.rtf b/sw/qa/extras/rtfexport/data/fdo44176.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo44176.rtf
rename to sw/qa/extras/rtfexport/data/fdo44176.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo44211.rtf b/sw/qa/extras/rtfexport/data/fdo44211.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo44211.rtf
rename to sw/qa/extras/rtfexport/data/fdo44211.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo44715.rtf b/sw/qa/extras/rtfexport/data/fdo44715.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo44715.rtf
rename to sw/qa/extras/rtfexport/data/fdo44715.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo45187.rtf b/sw/qa/extras/rtfexport/data/fdo45187.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo45187.rtf
rename to sw/qa/extras/rtfexport/data/fdo45187.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo45394.rtf b/sw/qa/extras/rtfexport/data/fdo45394.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo45394.rtf
rename to sw/qa/extras/rtfexport/data/fdo45394.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo45543.rtf b/sw/qa/extras/rtfexport/data/fdo45543.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo45543.rtf
rename to sw/qa/extras/rtfexport/data/fdo45543.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo45553.rtf b/sw/qa/extras/rtfexport/data/fdo45553.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo45553.rtf
rename to sw/qa/extras/rtfexport/data/fdo45553.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo45563.rtf b/sw/qa/extras/rtfexport/data/fdo45563.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo45563.rtf
rename to sw/qa/extras/rtfexport/data/fdo45563.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo46955.rtf b/sw/qa/extras/rtfexport/data/fdo46955.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo46955.rtf
rename to sw/qa/extras/rtfexport/data/fdo46955.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo46966.rtf b/sw/qa/extras/rtfexport/data/fdo46966.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo46966.rtf
rename to sw/qa/extras/rtfexport/data/fdo46966.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo47107.rtf b/sw/qa/extras/rtfexport/data/fdo47107.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo47107.rtf
rename to sw/qa/extras/rtfexport/data/fdo47107.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo47326.rtf b/sw/qa/extras/rtfexport/data/fdo47326.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo47326.rtf
rename to sw/qa/extras/rtfexport/data/fdo47326.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo47495.rtf b/sw/qa/extras/rtfexport/data/fdo47495.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo47495.rtf
rename to sw/qa/extras/rtfexport/data/fdo47495.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo47764.rtf b/sw/qa/extras/rtfexport/data/fdo47764.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo47764.rtf
rename to sw/qa/extras/rtfexport/data/fdo47764.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo47802.rtf b/sw/qa/extras/rtfexport/data/fdo47802.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo47802.rtf
rename to sw/qa/extras/rtfexport/data/fdo47802.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo48023.rtf b/sw/qa/extras/rtfexport/data/fdo48023.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo48023.rtf
rename to sw/qa/extras/rtfexport/data/fdo48023.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo48033.rtf b/sw/qa/extras/rtfexport/data/fdo48033.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo48033.rtf
rename to sw/qa/extras/rtfexport/data/fdo48033.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo48037.rtf b/sw/qa/extras/rtfexport/data/fdo48037.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo48037.rtf
rename to sw/qa/extras/rtfexport/data/fdo48037.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo48104.rtf b/sw/qa/extras/rtfexport/data/fdo48104.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo48104.rtf
rename to sw/qa/extras/rtfexport/data/fdo48104.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo48193.rtf b/sw/qa/extras/rtfexport/data/fdo48193.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo48193.rtf
rename to sw/qa/extras/rtfexport/data/fdo48193.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo48356.rtf b/sw/qa/extras/rtfexport/data/fdo48356.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo48356.rtf
rename to sw/qa/extras/rtfexport/data/fdo48356.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo48440.rtf b/sw/qa/extras/rtfexport/data/fdo48440.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo48440.rtf
rename to sw/qa/extras/rtfexport/data/fdo48440.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo48446.rtf b/sw/qa/extras/rtfexport/data/fdo48446.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo48446.rtf
rename to sw/qa/extras/rtfexport/data/fdo48446.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo48876.rtf b/sw/qa/extras/rtfexport/data/fdo48876.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo48876.rtf
rename to sw/qa/extras/rtfexport/data/fdo48876.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo49271.rtf b/sw/qa/extras/rtfexport/data/fdo49271.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo49271.rtf
rename to sw/qa/extras/rtfexport/data/fdo49271.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo49501.rtf b/sw/qa/extras/rtfexport/data/fdo49501.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo49501.rtf
rename to sw/qa/extras/rtfexport/data/fdo49501.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo49655.rtf b/sw/qa/extras/rtfexport/data/fdo49655.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo49655.rtf
rename to sw/qa/extras/rtfexport/data/fdo49655.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo49659.rtf b/sw/qa/extras/rtfexport/data/fdo49659.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo49659.rtf
rename to sw/qa/extras/rtfexport/data/fdo49659.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo49893-2.rtf b/sw/qa/extras/rtfexport/data/fdo49893-2.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo49893-2.rtf
rename to sw/qa/extras/rtfexport/data/fdo49893-2.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo49934.rtf b/sw/qa/extras/rtfexport/data/fdo49934.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo49934.rtf
rename to sw/qa/extras/rtfexport/data/fdo49934.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo50539.rtf b/sw/qa/extras/rtfexport/data/fdo50539.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo50539.rtf
rename to sw/qa/extras/rtfexport/data/fdo50539.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo50665.rtf b/sw/qa/extras/rtfexport/data/fdo50665.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo50665.rtf
rename to sw/qa/extras/rtfexport/data/fdo50665.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo51916.rtf b/sw/qa/extras/rtfexport/data/fdo51916.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo51916.rtf
rename to sw/qa/extras/rtfexport/data/fdo51916.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo52389.rtf b/sw/qa/extras/rtfexport/data/fdo52389.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo52389.rtf
rename to sw/qa/extras/rtfexport/data/fdo52389.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo52475.rtf b/sw/qa/extras/rtfexport/data/fdo52475.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo52475.rtf
rename to sw/qa/extras/rtfexport/data/fdo52475.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo52989.rtf b/sw/qa/extras/rtfexport/data/fdo52989.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo52989.rtf
rename to sw/qa/extras/rtfexport/data/fdo52989.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo53594.rtf b/sw/qa/extras/rtfexport/data/fdo53594.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo53594.rtf
rename to sw/qa/extras/rtfexport/data/fdo53594.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo54473.rtf b/sw/qa/extras/rtfexport/data/fdo54473.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo54473.rtf
rename to sw/qa/extras/rtfexport/data/fdo54473.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo54612.rtf b/sw/qa/extras/rtfexport/data/fdo54612.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo54612.rtf
rename to sw/qa/extras/rtfexport/data/fdo54612.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo54900.rtf b/sw/qa/extras/rtfexport/data/fdo54900.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo54900.rtf
rename to sw/qa/extras/rtfexport/data/fdo54900.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo55493.rtf b/sw/qa/extras/rtfexport/data/fdo55493.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo55493.rtf
rename to sw/qa/extras/rtfexport/data/fdo55493.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo56512.rtf b/sw/qa/extras/rtfexport/data/fdo56512.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo56512.rtf
rename to sw/qa/extras/rtfexport/data/fdo56512.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo57678.rtf b/sw/qa/extras/rtfexport/data/fdo57678.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo57678.rtf
rename to sw/qa/extras/rtfexport/data/fdo57678.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo57886.rtf b/sw/qa/extras/rtfexport/data/fdo57886.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo57886.rtf
rename to sw/qa/extras/rtfexport/data/fdo57886.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo58076-2.rtf b/sw/qa/extras/rtfexport/data/fdo58076-2.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo58076-2.rtf
rename to sw/qa/extras/rtfexport/data/fdo58076-2.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo58076.rtf b/sw/qa/extras/rtfexport/data/fdo58076.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo58076.rtf
rename to sw/qa/extras/rtfexport/data/fdo58076.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo58646.rtf b/sw/qa/extras/rtfexport/data/fdo58646.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo58646.rtf
rename to sw/qa/extras/rtfexport/data/fdo58646.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo58646line.rtf b/sw/qa/extras/rtfexport/data/fdo58646line.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo58646line.rtf
rename to sw/qa/extras/rtfexport/data/fdo58646line.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo58933.rtf b/sw/qa/extras/rtfexport/data/fdo58933.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo58933.rtf
rename to sw/qa/extras/rtfexport/data/fdo58933.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo59419.rtf b/sw/qa/extras/rtfexport/data/fdo59419.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo59419.rtf
rename to sw/qa/extras/rtfexport/data/fdo59419.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo59638.rtf b/sw/qa/extras/rtfexport/data/fdo59638.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo59638.rtf
rename to sw/qa/extras/rtfexport/data/fdo59638.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo60722.rtf b/sw/qa/extras/rtfexport/data/fdo60722.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo60722.rtf
rename to sw/qa/extras/rtfexport/data/fdo60722.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo61193.rtf b/sw/qa/extras/rtfexport/data/fdo61193.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo61193.rtf
rename to sw/qa/extras/rtfexport/data/fdo61193.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo61909.rtf b/sw/qa/extras/rtfexport/data/fdo61909.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo61909.rtf
rename to sw/qa/extras/rtfexport/data/fdo61909.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo62044-paste.rtf b/sw/qa/extras/rtfexport/data/fdo62044-paste.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo62044-paste.rtf
rename to sw/qa/extras/rtfexport/data/fdo62044-paste.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo62044.rtf b/sw/qa/extras/rtfexport/data/fdo62044.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo62044.rtf
rename to sw/qa/extras/rtfexport/data/fdo62044.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo62288.rtf b/sw/qa/extras/rtfexport/data/fdo62288.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo62288.rtf
rename to sw/qa/extras/rtfexport/data/fdo62288.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo62805.rtf b/sw/qa/extras/rtfexport/data/fdo62805.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo62805.rtf
rename to sw/qa/extras/rtfexport/data/fdo62805.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo62977.rtf b/sw/qa/extras/rtfexport/data/fdo62977.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo62977.rtf
rename to sw/qa/extras/rtfexport/data/fdo62977.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo63023.rtf b/sw/qa/extras/rtfexport/data/fdo63023.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo63023.rtf
rename to sw/qa/extras/rtfexport/data/fdo63023.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo63428.rtf b/sw/qa/extras/rtfexport/data/fdo63428.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo63428.rtf
rename to sw/qa/extras/rtfexport/data/fdo63428.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo64637.rtf b/sw/qa/extras/rtfexport/data/fdo64637.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo64637.rtf
rename to sw/qa/extras/rtfexport/data/fdo64637.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo64671.rtf b/sw/qa/extras/rtfexport/data/fdo64671.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo64671.rtf
rename to sw/qa/extras/rtfexport/data/fdo64671.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo65090.rtf b/sw/qa/extras/rtfexport/data/fdo65090.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo65090.rtf
rename to sw/qa/extras/rtfexport/data/fdo65090.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo66040.rtf b/sw/qa/extras/rtfexport/data/fdo66040.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo66040.rtf
rename to sw/qa/extras/rtfexport/data/fdo66040.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo67498.rtf b/sw/qa/extras/rtfexport/data/fdo67498.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo67498.rtf
rename to sw/qa/extras/rtfexport/data/fdo67498.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo68076.rtf b/sw/qa/extras/rtfexport/data/fdo68076.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo68076.rtf
rename to sw/qa/extras/rtfexport/data/fdo68076.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo68779.rtf b/sw/qa/extras/rtfexport/data/fdo68779.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo68779.rtf
rename to sw/qa/extras/rtfexport/data/fdo68779.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo69289.rtf b/sw/qa/extras/rtfexport/data/fdo69289.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo69289.rtf
rename to sw/qa/extras/rtfexport/data/fdo69289.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo69384-paste.rtf b/sw/qa/extras/rtfexport/data/fdo69384-paste.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo69384-paste.rtf
rename to sw/qa/extras/rtfexport/data/fdo69384-paste.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo70221.rtf b/sw/qa/extras/rtfexport/data/fdo70221.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo70221.rtf
rename to sw/qa/extras/rtfexport/data/fdo70221.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo70578.rtf b/sw/qa/extras/rtfexport/data/fdo70578.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo70578.rtf
rename to sw/qa/extras/rtfexport/data/fdo70578.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo72031.rtf b/sw/qa/extras/rtfexport/data/fdo72031.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo72031.rtf
rename to sw/qa/extras/rtfexport/data/fdo72031.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo73241.rtf b/sw/qa/extras/rtfexport/data/fdo73241.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo73241.rtf
rename to sw/qa/extras/rtfexport/data/fdo73241.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo74229.rtf b/sw/qa/extras/rtfexport/data/fdo74229.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo74229.rtf
rename to sw/qa/extras/rtfexport/data/fdo74229.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo75735.rtf b/sw/qa/extras/rtfexport/data/fdo75735.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo75735.rtf
rename to sw/qa/extras/rtfexport/data/fdo75735.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo76628.rtf b/sw/qa/extras/rtfexport/data/fdo76628.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo76628.rtf
rename to sw/qa/extras/rtfexport/data/fdo76628.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo76633.rtf b/sw/qa/extras/rtfexport/data/fdo76633.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo76633.rtf
rename to sw/qa/extras/rtfexport/data/fdo76633.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo77267.rtf b/sw/qa/extras/rtfexport/data/fdo77267.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo77267.rtf
rename to sw/qa/extras/rtfexport/data/fdo77267.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo77996.rtf b/sw/qa/extras/rtfexport/data/fdo77996.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo77996.rtf
rename to sw/qa/extras/rtfexport/data/fdo77996.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo78502.rtf b/sw/qa/extras/rtfexport/data/fdo78502.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo78502.rtf
rename to sw/qa/extras/rtfexport/data/fdo78502.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo79384.rtf b/sw/qa/extras/rtfexport/data/fdo79384.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo79384.rtf
rename to sw/qa/extras/rtfexport/data/fdo79384.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo79959.rtf b/sw/qa/extras/rtfexport/data/fdo79959.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo79959.rtf
rename to sw/qa/extras/rtfexport/data/fdo79959.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo80905.rtf b/sw/qa/extras/rtfexport/data/fdo80905.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo80905.rtf
rename to sw/qa/extras/rtfexport/data/fdo80905.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo81892.rtf b/sw/qa/extras/rtfexport/data/fdo81892.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo81892.rtf
rename to sw/qa/extras/rtfexport/data/fdo81892.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo82076.rtf b/sw/qa/extras/rtfexport/data/fdo82076.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo82076.rtf
rename to sw/qa/extras/rtfexport/data/fdo82076.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo82078.rtf b/sw/qa/extras/rtfexport/data/fdo82078.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo82078.rtf
rename to sw/qa/extras/rtfexport/data/fdo82078.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo82106.rtf b/sw/qa/extras/rtfexport/data/fdo82106.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo82106.rtf
rename to sw/qa/extras/rtfexport/data/fdo82106.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo82859.rtf b/sw/qa/extras/rtfexport/data/fdo82859.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo82859.rtf
rename to sw/qa/extras/rtfexport/data/fdo82859.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo83204.rtf b/sw/qa/extras/rtfexport/data/fdo83204.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo83204.rtf
rename to sw/qa/extras/rtfexport/data/fdo83204.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo83464.rtf b/sw/qa/extras/rtfexport/data/fdo83464.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo83464.rtf
rename to sw/qa/extras/rtfexport/data/fdo83464.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo84679.rtf b/sw/qa/extras/rtfexport/data/fdo84679.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo84679.rtf
rename to sw/qa/extras/rtfexport/data/fdo84679.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo85889-mac.rtf b/sw/qa/extras/rtfexport/data/fdo85889-mac.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo85889-mac.rtf
rename to sw/qa/extras/rtfexport/data/fdo85889-mac.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo85889-pc.rtf b/sw/qa/extras/rtfexport/data/fdo85889-pc.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo85889-pc.rtf
rename to sw/qa/extras/rtfexport/data/fdo85889-pc.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo85889-pca.rtf b/sw/qa/extras/rtfexport/data/fdo85889-pca.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo85889-pca.rtf
rename to sw/qa/extras/rtfexport/data/fdo85889-pca.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo86750.rtf b/sw/qa/extras/rtfexport/data/fdo86750.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo86750.rtf
rename to sw/qa/extras/rtfexport/data/fdo86750.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo86761.rtf b/sw/qa/extras/rtfexport/data/fdo86761.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo86761.rtf
rename to sw/qa/extras/rtfexport/data/fdo86761.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo89496.rtf b/sw/qa/extras/rtfexport/data/fdo89496.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo89496.rtf
rename to sw/qa/extras/rtfexport/data/fdo89496.rtf
diff --git a/sw/qa/extras/rtfimport/data/fdo94835.rtf b/sw/qa/extras/rtfexport/data/fdo94835.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/fdo94835.rtf
rename to sw/qa/extras/rtfexport/data/fdo94835.rtf
diff --git a/sw/qa/extras/rtfimport/data/font-override.rtf b/sw/qa/extras/rtfexport/data/font-override.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/font-override.rtf
rename to sw/qa/extras/rtfexport/data/font-override.rtf
diff --git a/sw/qa/extras/rtfimport/data/footer-para.rtf b/sw/qa/extras/rtfexport/data/footer-para.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/footer-para.rtf
rename to sw/qa/extras/rtfexport/data/footer-para.rtf
diff --git a/sw/qa/extras/rtfexport/data/hello.rtf b/sw/qa/extras/rtfexport/data/hello.rtf
new file mode 100644
index 000000000000..472817d311b9
--- /dev/null
+++ b/sw/qa/extras/rtfexport/data/hello.rtf
@@ -0,0 +1 @@
+{\rtf1 Hello world!\par}
diff --git a/sw/qa/extras/rtfimport/data/hexcrlf.rtf b/sw/qa/extras/rtfexport/data/hexcrlf.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/hexcrlf.rtf
rename to sw/qa/extras/rtfexport/data/hexcrlf.rtf
diff --git a/sw/qa/extras/rtfimport/data/landscape.rtf b/sw/qa/extras/rtfexport/data/landscape.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/landscape.rtf
rename to sw/qa/extras/rtfexport/data/landscape.rtf
diff --git a/sw/qa/extras/rtfimport/data/leftmargin-default.rtf b/sw/qa/extras/rtfexport/data/leftmargin-default.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/leftmargin-default.rtf
rename to sw/qa/extras/rtfexport/data/leftmargin-default.rtf
diff --git a/sw/qa/extras/rtfimport/data/levelfollow.rtf b/sw/qa/extras/rtfexport/data/levelfollow.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/levelfollow.rtf
rename to sw/qa/extras/rtfexport/data/levelfollow.rtf
diff --git a/sw/qa/extras/rtfimport/data/mathtype.rtf b/sw/qa/extras/rtfexport/data/mathtype.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/mathtype.rtf
rename to sw/qa/extras/rtfexport/data/mathtype.rtf
diff --git a/sw/qa/extras/rtfimport/data/n192129.rtf b/sw/qa/extras/rtfexport/data/n192129.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/n192129.rtf
rename to sw/qa/extras/rtfexport/data/n192129.rtf
diff --git a/sw/qa/extras/rtfimport/data/n750757.rtf b/sw/qa/extras/rtfexport/data/n750757.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/n750757.rtf
rename to sw/qa/extras/rtfexport/data/n750757.rtf
diff --git a/sw/qa/extras/rtfimport/data/n751020.rtf b/sw/qa/extras/rtfexport/data/n751020.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/n751020.rtf
rename to sw/qa/extras/rtfexport/data/n751020.rtf
diff --git a/sw/qa/extras/rtfimport/data/n757651.rtf b/sw/qa/extras/rtfexport/data/n757651.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/n757651.rtf
rename to sw/qa/extras/rtfexport/data/n757651.rtf
diff --git a/sw/qa/extras/rtfimport/data/n818997.rtf b/sw/qa/extras/rtfexport/data/n818997.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/n818997.rtf
rename to sw/qa/extras/rtfexport/data/n818997.rtf
diff --git a/sw/qa/extras/rtfimport/data/n820504.rtf b/sw/qa/extras/rtfexport/data/n820504.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/n820504.rtf
rename to sw/qa/extras/rtfexport/data/n820504.rtf
diff --git a/sw/qa/extras/rtfimport/data/n825305.rtf b/sw/qa/extras/rtfexport/data/n825305.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/n825305.rtf
rename to sw/qa/extras/rtfexport/data/n825305.rtf
diff --git a/sw/qa/extras/rtfimport/data/para-bottom-margin.rtf b/sw/qa/extras/rtfexport/data/para-bottom-margin.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/para-bottom-margin.rtf
rename to sw/qa/extras/rtfexport/data/para-bottom-margin.rtf
diff --git a/sw/qa/extras/rtfimport/data/rhbz1065629.rtf b/sw/qa/extras/rtfexport/data/rhbz1065629.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/rhbz1065629.rtf
rename to sw/qa/extras/rtfexport/data/rhbz1065629.rtf
diff --git a/sw/qa/extras/rtfimport/data/shptxt-pard.rtf b/sw/qa/extras/rtfexport/data/shptxt-pard.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/shptxt-pard.rtf
rename to sw/qa/extras/rtfexport/data/shptxt-pard.rtf
diff --git a/sw/qa/extras/rtfimport/data/shpz-dhgt.rtf b/sw/qa/extras/rtfexport/data/shpz-dhgt.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/shpz-dhgt.rtf
rename to sw/qa/extras/rtfexport/data/shpz-dhgt.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf100507.rtf b/sw/qa/extras/rtfexport/data/tdf100507.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf100507.rtf
rename to sw/qa/extras/rtfexport/data/tdf100507.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf104287.rtf b/sw/qa/extras/rtfexport/data/tdf104287.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf104287.rtf
rename to sw/qa/extras/rtfexport/data/tdf104287.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf104317.rtf b/sw/qa/extras/rtfexport/data/tdf104317.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf104317.rtf
rename to sw/qa/extras/rtfexport/data/tdf104317.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf104744.rtf b/sw/qa/extras/rtfexport/data/tdf104744.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf104744.rtf
rename to sw/qa/extras/rtfexport/data/tdf104744.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf105729.rtf b/sw/qa/extras/rtfexport/data/tdf105729.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf105729.rtf
rename to sw/qa/extras/rtfexport/data/tdf105729.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf105852.rtf b/sw/qa/extras/rtfexport/data/tdf105852.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf105852.rtf
rename to sw/qa/extras/rtfexport/data/tdf105852.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf106694.rtf b/sw/qa/extras/rtfexport/data/tdf106694.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf106694.rtf
rename to sw/qa/extras/rtfexport/data/tdf106694.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf106950.rtf b/sw/qa/extras/rtfexport/data/tdf106950.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf106950.rtf
rename to sw/qa/extras/rtfexport/data/tdf106950.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf106953.rtf b/sw/qa/extras/rtfexport/data/tdf106953.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf106953.rtf
rename to sw/qa/extras/rtfexport/data/tdf106953.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf107116.rtf b/sw/qa/extras/rtfexport/data/tdf107116.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf107116.rtf
rename to sw/qa/extras/rtfexport/data/tdf107116.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf108123.rtf b/sw/qa/extras/rtfexport/data/tdf108123.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf108123.rtf
rename to sw/qa/extras/rtfexport/data/tdf108123.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf108416.rtf b/sw/qa/extras/rtfexport/data/tdf108416.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf108416.rtf
rename to sw/qa/extras/rtfexport/data/tdf108416.rtf
diff --git a/sw/qa/extras/rtfexport/data/tdf108949_footnoteCharFormat.odt b/sw/qa/extras/rtfexport/data/tdf108949_footnoteCharFormat.odt
new file mode 100644
index 000000000000..906effcc7536
Binary files /dev/null and b/sw/qa/extras/rtfexport/data/tdf108949_footnoteCharFormat.odt differ
diff --git a/sw/qa/extras/rtfimport/data/tdf44986.rtf b/sw/qa/extras/rtfexport/data/tdf44986.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf44986.rtf
rename to sw/qa/extras/rtfexport/data/tdf44986.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf50821.rtf b/sw/qa/extras/rtfexport/data/tdf50821.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf50821.rtf
rename to sw/qa/extras/rtfexport/data/tdf50821.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf54584.rtf b/sw/qa/extras/rtfexport/data/tdf54584.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf54584.rtf
rename to sw/qa/extras/rtfexport/data/tdf54584.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf74795.rtf b/sw/qa/extras/rtfexport/data/tdf74795.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf74795.rtf
rename to sw/qa/extras/rtfexport/data/tdf74795.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf75614.rtf b/sw/qa/extras/rtfexport/data/tdf75614.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf75614.rtf
rename to sw/qa/extras/rtfexport/data/tdf75614.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf77349.rtf b/sw/qa/extras/rtfexport/data/tdf77349.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf77349.rtf
rename to sw/qa/extras/rtfexport/data/tdf77349.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf82073.rtf b/sw/qa/extras/rtfexport/data/tdf82073.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf82073.rtf
rename to sw/qa/extras/rtfexport/data/tdf82073.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf86182.rtf b/sw/qa/extras/rtfexport/data/tdf86182.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf86182.rtf
rename to sw/qa/extras/rtfexport/data/tdf86182.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf86814.rtf b/sw/qa/extras/rtfexport/data/tdf86814.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf86814.rtf
rename to sw/qa/extras/rtfexport/data/tdf86814.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf87034.rtf b/sw/qa/extras/rtfexport/data/tdf87034.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf87034.rtf
rename to sw/qa/extras/rtfexport/data/tdf87034.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf88811.rtf b/sw/qa/extras/rtfexport/data/tdf88811.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf88811.rtf
rename to sw/qa/extras/rtfexport/data/tdf88811.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf90260-nopar.rtf b/sw/qa/extras/rtfexport/data/tdf90260-nopar.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf90260-nopar.rtf
rename to sw/qa/extras/rtfexport/data/tdf90260-nopar.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf90697.rtf b/sw/qa/extras/rtfexport/data/tdf90697.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf90697.rtf
rename to sw/qa/extras/rtfexport/data/tdf90697.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf91074.rtf b/sw/qa/extras/rtfexport/data/tdf91074.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf91074.rtf
rename to sw/qa/extras/rtfexport/data/tdf91074.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf92061.rtf b/sw/qa/extras/rtfexport/data/tdf92061.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf92061.rtf
rename to sw/qa/extras/rtfexport/data/tdf92061.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf92481.rtf b/sw/qa/extras/rtfexport/data/tdf92481.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf92481.rtf
rename to sw/qa/extras/rtfexport/data/tdf92481.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf94435.rtf b/sw/qa/extras/rtfexport/data/tdf94435.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf94435.rtf
rename to sw/qa/extras/rtfexport/data/tdf94435.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf94456.rtf b/sw/qa/extras/rtfexport/data/tdf94456.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf94456.rtf
rename to sw/qa/extras/rtfexport/data/tdf94456.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf95707.rtf b/sw/qa/extras/rtfexport/data/tdf95707.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf95707.rtf
rename to sw/qa/extras/rtfexport/data/tdf95707.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf96275.rtf b/sw/qa/extras/rtfexport/data/tdf96275.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf96275.rtf
rename to sw/qa/extras/rtfexport/data/tdf96275.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf96308-deftab.rtf b/sw/qa/extras/rtfexport/data/tdf96308-deftab.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf96308-deftab.rtf
rename to sw/qa/extras/rtfexport/data/tdf96308-deftab.rtf
diff --git a/sw/qa/extras/rtfimport/data/tdf97035.rtf b/sw/qa/extras/rtfexport/data/tdf97035.rtf
similarity index 100%
rename from sw/qa/extras/rtfimport/data/tdf97035.rtf
rename to sw/qa/extras/rtfexport/data/tdf97035.rtf
diff --git a/sw/qa/extras/rtfexport/rtfexport2.cxx b/sw/qa/extras/rtfexport/rtfexport2.cxx
new file mode 100644
index 000000000000..034f32c2de26
--- /dev/null
+++ b/sw/qa/extras/rtfexport/rtfexport2.cxx
@@ -0,0 +1,1844 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <memory>
+#include <swmodeltestbase.hxx>
+
+#include <com/sun/star/awt/FontWeight.hpp>
+#include <com/sun/star/document/XFilter.hpp>
+#include <com/sun/star/document/XImporter.hpp>
+#include <com/sun/star/graphic/GraphicType.hpp>
+#include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/style/CaseMap.hpp>
+#include <com/sun/star/style/LineSpacing.hpp>
+#include <com/sun/star/style/LineSpacingMode.hpp>
+#include <com/sun/star/style/ParagraphAdjust.hpp>
+#include <com/sun/star/style/TabStop.hpp>
+#include <com/sun/star/table/BorderLine2.hpp>
+#include <com/sun/star/table/BorderLineStyle.hpp>
+#include <com/sun/star/text/RelOrientation.hpp>
+#include <com/sun/star/text/TableColumnSeparator.hpp>
+#include <com/sun/star/text/TextContentAnchorType.hpp>
+#include <com/sun/star/text/XFootnotesSupplier.hpp>
+#include <com/sun/star/text/XPageCursor.hpp>
+#include <com/sun/star/text/XTextGraphicObjectsSupplier.hpp>
+#include <com/sun/star/text/XTextFieldsSupplier.hpp>
+#include <com/sun/star/text/XTextFramesSupplier.hpp>
+#include <com/sun/star/text/XTextRangeCompare.hpp>
+#include <com/sun/star/text/XTextTablesSupplier.hpp>
+#include <com/sun/star/text/XTextTable.hpp>
+#include <com/sun/star/text/XTextViewCursorSupplier.hpp>
+#include <com/sun/star/text/WrapTextMode.hpp>
+#include <com/sun/star/text/HoriOrientation.hpp>
+#include <com/sun/star/text/WritingMode2.hpp>
+#include <com/sun/star/util/XNumberFormatsSupplier.hpp>
+#include <com/sun/star/graphic/XGraphic.hpp>
+
+#include <rtl/ustring.hxx>
+#include <vcl/outdev.hxx>
+#include <vcl/svapp.hxx>
+#include <vcl/settings.hxx>
+#include <unotools/ucbstreamhelper.hxx>
+#include <unotools/streamwrap.hxx>
+#include <comphelper/sequenceashashmap.hxx>
+#include "comphelper/configuration.hxx"
+
+#include <bordertest.hxx>
+
+class Test : public SwModelTestBase
+{
+public:
+ Test() : SwModelTestBase("/sw/qa/extras/rtfexport/data/", "Rich Text Format")
+ {
+ }
+
+ virtual std::unique_ptr<Resetter> preTest(const char* filename) override
+ {
+ m_aSavedSettings = Application::GetSettings();
+ if (OString(filename) == "fdo48023.rtf" || OString(filename) == "fdo72031.rtf")
+ {
+ std::unique_ptr<Resetter> pResetter(new Resetter([this]()
+ {
+ Application::SetSettings(this->m_aSavedSettings);
+ }));
+ AllSettings aSettings(m_aSavedSettings);
+ aSettings.SetLanguageTag(LanguageTag("ru"));
+ Application::SetSettings(aSettings);
+ return pResetter;
+ }
+ else if (OString(filename) == "fdo44211.rtf")
+ {
+ std::unique_ptr<Resetter> pResetter(new Resetter([this]()
+ {
+ Application::SetSettings(this->m_aSavedSettings);
+ }));
+ AllSettings aSettings(m_aSavedSettings);
+ aSettings.SetLanguageTag(LanguageTag("lt"));
+ Application::SetSettings(aSettings);
+ return pResetter;
+ }
+ return nullptr;
+ }
+
+protected:
+ /// Copy&paste helper.
+ void paste(const OUString& aFilename, uno::Reference<text::XTextRange> const& xTextRange = uno::Reference<text::XTextRange>())
+ {
+ uno::Reference<document::XFilter> xFilter(m_xSFactory->createInstance("com.sun.star.comp.Writer.RtfFilter"), uno::UNO_QUERY_THROW);
+ uno::Reference<document::XImporter> xImporter(xFilter, uno::UNO_QUERY_THROW);
+ xImporter->setTargetDocument(mxComponent);
+ uno::Sequence<beans::PropertyValue> aDescriptor(xTextRange.is() ? 3 : 2);
+ aDescriptor[0].Name = "InputStream";
+ SvStream* pStream = utl::UcbStreamHelper::CreateStream(m_directories.getURLFromSrc("/sw/qa/extras/rtfexport/data/") + aFilename, StreamMode::WRITE);
+ uno::Reference<io::XStream> xStream(new utl::OStreamWrapper(*pStream));
+ aDescriptor[0].Value <<= xStream;
+ aDescriptor[1].Name = "InsertMode";
+ aDescriptor[1].Value <<= true;
+ if (xTextRange.is())
+ {
+ aDescriptor[2].Name = "TextInsertModeRange";
+ aDescriptor[2].Value <<= xTextRange;
+ }
+ xFilter->filter(aDescriptor);
+ }
+ AllSettings m_aSavedSettings;
+};
+
+#if !defined(_WIN32)
+
+DECLARE_RTFEXPORT_TEST(testFdo45553, "fdo45553.rtf")
+{
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY);
+ uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration();
+ while (xParaEnum->hasMoreElements())
+ {
+ uno::Reference<container::XEnumerationAccess> xRangeEnumAccess(xParaEnum->nextElement(), uno::UNO_QUERY);
+ uno::Reference<container::XEnumeration> xRangeEnum = xRangeEnumAccess->createEnumeration();
+ while (xRangeEnum->hasMoreElements())
+ {
+ uno::Reference<text::XTextRange> xRange(xRangeEnum->nextElement(), uno::UNO_QUERY);
+ OUString aStr = xRange->getString();
+ if (aStr == "space-before")
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(convertTwipToMm100(120)), getProperty<sal_Int32>(xRange, "ParaTopMargin"));
+ else if (aStr == "space-after")
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(convertTwipToMm100(240)), getProperty<sal_Int32>(xRange, "ParaBottomMargin"));
+ }
+ }
+}
+
+DECLARE_RTFEXPORT_TEST(testN192129, "n192129.rtf")
+{
+ // We expect that the result will be 16x16px.
+ Size aExpectedSize(16, 16);
+ MapMode aMap(MapUnit::Map100thMM);
+ aExpectedSize = Application::GetDefaultDevice()->PixelToLogic(aExpectedSize, aMap);
+
+ uno::Reference<text::XTextGraphicObjectsSupplier> xTextGraphicObjectsSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xIndexAccess(xTextGraphicObjectsSupplier->getGraphicObjects(), uno::UNO_QUERY);
+ uno::Reference<drawing::XShape> xShape(xIndexAccess->getByIndex(0), uno::UNO_QUERY);
+ awt::Size aActualSize(xShape->getSize());
+ if ((aExpectedSize.Width() - aActualSize.Width) / 2 != 0)
+ {
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(aExpectedSize.Width()), aActualSize.Width);
+ }
+ if ((aExpectedSize.Height() - aActualSize.Height) / 2 != 0)
+ {
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(aExpectedSize.Height()), aActualSize.Height);
+ }
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo45543, "fdo45543.rtf")
+{
+ CPPUNIT_ASSERT_EQUAL(5, getLength());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo42465, "fdo42465.rtf")
+{
+ CPPUNIT_ASSERT_EQUAL(3, getLength());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo45187, "fdo45187.rtf")
+{
+ uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xDraws(xDrawPageSupplier->getDrawPage(), uno::UNO_QUERY);
+ // There should be two shapes.
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xDraws->getCount());
+
+ // They should be anchored to different paragraphs.
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextRangeCompare> xTextRangeCompare(xTextDocument->getText(), uno::UNO_QUERY);
+ uno::Reference<text::XTextRange> xAnchor0 = uno::Reference<text::XTextContent>(xDraws->getByIndex(0), uno::UNO_QUERY)->getAnchor();
+ uno::Reference<text::XTextRange> xAnchor1 = uno::Reference<text::XTextContent>(xDraws->getByIndex(1), uno::UNO_QUERY)->getAnchor();
+ // Was 0 ("starts at the same position"), should be 1 ("starts before")
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(1), xTextRangeCompare->compareRegionStarts(xAnchor0, xAnchor1));
+}
+
+DECLARE_RTFEXPORT_TEST(testN750757, "n750757.rtf")
+{
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY);
+ uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration();
+
+ CPPUNIT_ASSERT_EQUAL(false, bool(getProperty<bool>(xParaEnum->nextElement(), "ParaContextMargin")));
+ CPPUNIT_ASSERT_EQUAL(true, bool(getProperty<bool>(xParaEnum->nextElement(), "ParaContextMargin")));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo45563, "fdo45563.rtf")
+{
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY);
+ uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration();
+ int i = 0;
+ while (xParaEnum->hasMoreElements())
+ {
+ xParaEnum->nextElement();
+ i++;
+ }
+ CPPUNIT_ASSERT_EQUAL(4, i);
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo43965, "fdo43965.rtf")
+{
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY);
+ uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration();
+
+ // First paragraph: the parameter of \up was ignored
+ uno::Reference<container::XEnumerationAccess> xRangeEnumAccess(xParaEnum->nextElement(), uno::UNO_QUERY);
+ uno::Reference<container::XEnumeration> xRangeEnum = xRangeEnumAccess->createEnumeration();
+ uno::Reference<beans::XPropertySet> xPropertySet(xRangeEnum->nextElement(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(36), getProperty<sal_Int32>(xPropertySet, "CharEscapement"));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(100), getProperty<sal_Int32>(xPropertySet, "CharEscapementHeight"));
+
+ // Second paragraph: Word vs Writer border default problem
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(26), getProperty<table::BorderLine2>(xParaEnum->nextElement(), "TopBorder").LineWidth);
+
+ // Finally, make sure that we have two pages
+ CPPUNIT_ASSERT_EQUAL(2, getPages());
+}
+
+DECLARE_RTFEXPORT_TEST(testN751020, "n751020.rtf")
+{
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY);
+ uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration();
+ CPPUNIT_ASSERT(xParaEnum->hasMoreElements());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(convertTwipToMm100(200)), getProperty<sal_Int32>(xParaEnum->nextElement(), "ParaBottomMargin"));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo79384, "fdo79384.rtf")
+{
+ uno::Reference<text::XTextRange> xTextRange = getRun(getParagraph(1), 1);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("Маркеры спискамЫ", 31, RTL_TEXTENCODING_UTF8), xTextRange->getString());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo47326, "fdo47326.rtf")
+{
+ // This was 15 only, as \super buffered text, then the contents of it got lost.
+ CPPUNIT_ASSERT_EQUAL(19, getLength());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo46955, "fdo46955.rtf")
+{
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY);
+ uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration();
+ while (xParaEnum->hasMoreElements())
+ {
+ uno::Reference<container::XEnumerationAccess> xRangeEnumAccess(xParaEnum->nextElement(), uno::UNO_QUERY);
+ uno::Reference<container::XEnumeration> xRangeEnum = xRangeEnumAccess->createEnumeration();
+ while (xRangeEnum->hasMoreElements())
+ CPPUNIT_ASSERT_EQUAL(style::CaseMap::UPPERCASE, getProperty<sal_Int16>(xRangeEnum->nextElement(), "CharCaseMap"));
+ }
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo81892, "fdo81892.rtf")
+{
+ // table was not centered
+ uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY);
+ uno::Reference<text::XTextTable> xTable(xTables->getByIndex(0), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(text::HoriOrientation::CENTER, getProperty<sal_Int16>(xTable, "HoriOrient"));
+
+ // fdo#81893: paragraph with \page was not centered
+ uno::Reference<text::XTextRange> xPara(getParagraph(2, "Performance"));
+ CPPUNIT_ASSERT_EQUAL(style::ParagraphAdjust_CENTER, static_cast<style::ParagraphAdjust>(getProperty<sal_Int16>(xPara, "ParaAdjust")));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo45394, "fdo45394.rtf")
+{
+ uno::Reference<text::XText> xHeaderText = getProperty< uno::Reference<text::XText> >(getStyles("PageStyles")->getByName("Standard"), "HeaderText");
+ OUString aActual = xHeaderText->getString();
+ // Encoding in the header was wrong.
+ OUString aExpected("\xd0\x9f\xd0\x9a \xd0\xa0\xd0\x98\xd0\x9a", 11, RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT_EQUAL(aExpected, aActual);
+
+ uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo48104, "fdo48104.rtf")
+{
+ CPPUNIT_ASSERT_EQUAL(2, getPages());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo47107, "fdo47107.rtf")
+{
+ uno::Reference<container::XNameAccess> xNumberingStyles(getStyles("NumberingStyles"));
+ // Make sure numbered and bullet legacy syntax is recognized, this used to throw a NoSuchElementException
+ xNumberingStyles->getByName("WWNum1");
+ xNumberingStyles->getByName("WWNum2");
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo44176, "fdo44176.rtf")
+{
+ uno::Reference<container::XNameAccess> xPageStyles(getStyles("PageStyles"));
+ uno::Reference<beans::XPropertySet> xFirstPage(xPageStyles->getByName("First Page"), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xDefault(xPageStyles->getByName("Standard"), uno::UNO_QUERY);
+ sal_Int32 nFirstTop = 0, nDefaultTop = 0, nDefaultHeader = 0;
+ xFirstPage->getPropertyValue("TopMargin") >>= nFirstTop;
+ xDefault->getPropertyValue("TopMargin") >>= nDefaultTop;
+ xDefault->getPropertyValue("HeaderHeight") >>= nDefaultHeader;
+ CPPUNIT_ASSERT_EQUAL(nFirstTop, nDefaultTop + nDefaultHeader);
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo39053, "fdo39053.rtf")
+{
+ uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xDraws(xDrawPageSupplier->getDrawPage(), uno::UNO_QUERY);
+ int nAsCharacter = 0;
+ for (int i = 0; i < xDraws->getCount(); ++i)
+ if (getProperty<text::TextContentAnchorType>(xDraws->getByIndex(i), "AnchorType") == text::TextContentAnchorType_AS_CHARACTER)
+ nAsCharacter++;
+ // The image in binary format was ignored.
+ CPPUNIT_ASSERT_EQUAL(1, nAsCharacter);
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo48356, "fdo48356.rtf")
+{
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY);
+ uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration();
+ int i = 0;
+ while (xParaEnum->hasMoreElements())
+ {
+ xParaEnum->nextElement();
+ i++;
+ }
+ // The document used to be imported as two paragraphs.
+ CPPUNIT_ASSERT_EQUAL(1, i);
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo48023, "fdo48023.rtf")
+{
+ uno::Reference<text::XTextRange> xTextRange = getRun(getParagraph(1), 1);
+
+ // Implicit encoding detection based on locale was missing
+ OUString aExpected("\xd0\x9f\xd1\x80\xd0\xbe\xd0\xb3\xd1\x80\xd0\xb0\xd0\xbc\xd0\xbc\xd0\xb8\xd1\x81\xd1\x82", 22, RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT_EQUAL(aExpected, xTextRange->getString());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo48876, "fdo48876.rtf")
+{
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY);
+ uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration();
+ CPPUNIT_ASSERT(xParaEnum->hasMoreElements());
+ CPPUNIT_ASSERT_EQUAL(style::LineSpacingMode::MINIMUM, getProperty<style::LineSpacing>(xParaEnum->nextElement(), "ParaLineSpacing").Mode);
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo48193, "fdo48193.rtf")
+{
+ CPPUNIT_ASSERT_EQUAL(7, getLength());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo44211, "fdo44211.rtf")
+{
+ uno::Reference<text::XTextRange> xTextRange = getRun(getParagraph(1), 1);
+
+ OUString aExpected("\xc4\x85\xc4\x8d\xc4\x99", 6, RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT_EQUAL(aExpected, xTextRange->getString());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo48037, "fdo48037.rtf")
+{
+ uno::Reference<util::XNumberFormatsSupplier> xNumberSupplier(mxComponent, uno::UNO_QUERY_THROW);
+ lang::Locale aUSLocale, aFRLocale;
+ aUSLocale.Language = "en";
+ aFRLocale.Language = "fr";
+ sal_Int32 nExpected = xNumberSupplier->getNumberFormats()->addNewConverted("d MMMM yyyy", aUSLocale, aFRLocale);
+
+ uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xFieldsAccess(xTextFieldsSupplier->getTextFields());
+ uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration());
+ uno::Reference<beans::XPropertySet> xPropertySet(xFields->nextElement(), uno::UNO_QUERY);
+ sal_Int32 nActual = 0;
+ xPropertySet->getPropertyValue("NumberFormat") >>= nActual;
+
+ CPPUNIT_ASSERT_EQUAL(nExpected, nActual);
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo47764, "fdo47764.rtf")
+{
+ // \cbpat with zero argument should mean the auto (-1) color, not a default color (black)
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), getProperty<sal_Int32>(getParagraph(1), "ParaBackColor"));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo38786, "fdo38786.rtf")
+{
+ uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xFieldsAccess(xTextFieldsSupplier->getTextFields());
+ uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration());
+ // \chpgn was ignored, so exception was thrown
+ xFields->nextElement();
+}
+
+DECLARE_RTFEXPORT_TEST(testN757651, "n757651.rtf")
+{
+ // The bug was that due to buggy layout the text expanded to two pages.
+ if (Application::GetDefaultDevice()->IsFontAvailable("Times New Roman"))
+ CPPUNIT_ASSERT_EQUAL(1, getPages());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo49501, "fdo49501.rtf")
+{
+ uno::Reference<beans::XPropertySet> xStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY);
+
+ CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xStyle, "IsLandscape"));
+ sal_Int32 nExpected(convertTwipToMm100(567));
+ CPPUNIT_ASSERT_EQUAL(nExpected, getProperty<sal_Int32>(xStyle, "LeftMargin"));
+ CPPUNIT_ASSERT_EQUAL(nExpected, getProperty<sal_Int32>(xStyle, "RightMargin"));
+ CPPUNIT_ASSERT_EQUAL(nExpected, getProperty<sal_Int32>(xStyle, "TopMargin"));
+ CPPUNIT_ASSERT_EQUAL(nExpected, getProperty<sal_Int32>(xStyle, "BottomMargin"));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo49271, "fdo49271.rtf")
+{
+ CPPUNIT_ASSERT_EQUAL(25.f, getProperty<float>(getParagraph(2), "CharHeight"));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo50539, "fdo50539.rtf")
+{
+ // \chcbpat with zero argument should mean the auto (-1) color, not a default color (black)
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), getProperty<sal_Int32>(getRun(getParagraph(1), 1), "CharBackColor"));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo50665, "fdo50665.rtf")
+{
+ // Access the second run, which is a textfield
+ uno::Reference<beans::XPropertySet> xRun(getRun(getParagraph(1), 2), uno::UNO_QUERY);
+ // This used to be the default, as character properties were ignored.
+ CPPUNIT_ASSERT_EQUAL(OUString("Book Antiqua"), getProperty<OUString>(xRun, "CharFontName"));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo49659, "fdo49659.rtf")
+{
+ // Both tables were ignored: 1) was in the header, 2) was ignored due to missing empty par at the end of the doc
+ uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndexAccess->getCount());
+
+ // The graphic was also empty
+ uno::Reference<beans::XPropertySet> xGraphic(getProperty< uno::Reference<beans::XPropertySet> >(getShape(1), "Graphic"), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(graphic::GraphicType::PIXEL, getProperty<sal_Int8>(xGraphic, "GraphicType"));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo46966, "fdo46966.rtf")
+{
+ /*
+ * The problem was the top margin was 1440 (1 inch), but it should be 720 (0.5 inch).
+ *
+ * xray ThisComponent.StyleFamilies.PageStyles.Default.TopMargin
+ */
+ uno::Reference<beans::XPropertySet> xPropertySet(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(convertTwipToMm100(720)), getProperty<sal_Int32>(xPropertySet, "TopMargin"));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo76633, "fdo76633.rtf")
+{
+ // check that there is only a graphic object, not an additional rectangle
+ uno::Reference<lang::XServiceInfo> xShape(getShape(1), uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xShape.is());
+ CPPUNIT_ASSERT(xShape->supportsService("com.sun.star.text.TextGraphicObject"));
+ try
+ {
+ uno::Reference<drawing::XShape> xShape2(getShape(2), uno::UNO_QUERY);
+ CPPUNIT_FAIL("exception expected");
+ }
+ catch (lang::IndexOutOfBoundsException const&)
+ {
+ /* expected */
+ }
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo48033, "fdo48033.rtf")
+{
+ /*
+ * The problem was that the picture (48033) or OLE object (53594) was in the first cell,
+ * instead of the second one.
+ *
+ * oTable = ThisComponent.TextTables(0)
+ * oParas = oTable.getCellByName("B1").Text.createEnumeration
+ * oPara = oParas.nextElement
+ * oRuns = oPara.createEnumeration
+ * oRun = oRuns.nextElement
+ * xray oRun.TextPortionType ' Frame, was Text
+ */
+ uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY);
+ uno::Reference<text::XTextTable> xTable(xTables->getByIndex(0), uno::UNO_QUERY);
+ uno::Reference<text::XTextRange> xCell(xTable->getCellByName("B1"), uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xCell->getText(), uno::UNO_QUERY);
+ uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration();
+ uno::Reference<text::XTextRange> xPara(xParaEnum->nextElement(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("Frame"), getProperty<OUString>(getRun(xPara, 1), "TextPortionType"));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo53594, "fdo53594.rtf")
+{
+ /*
+ * The problem was that the picture (48033) or OLE object (53594) was in the first cell,
+ * instead of the second one.
+ *
+ * oTable = ThisComponent.TextTables(0)
+ * oParas = oTable.getCellByName("B1").Text.createEnumeration
+ * oPara = oParas.nextElement
+ * oRuns = oPara.createEnumeration
+ * oRun = oRuns.nextElement
+ * xray oRun.TextPortionType ' Frame, was Text
+ */
+ uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY);
+ uno::Reference<text::XTextTable> xTable(xTables->getByIndex(0), uno::UNO_QUERY);
+ uno::Reference<text::XTextRange> xCell(xTable->getCellByName("B1"), uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xCell->getText(), uno::UNO_QUERY);
+ uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration();
+ uno::Reference<text::XTextRange> xPara(xParaEnum->nextElement(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("Frame"), getProperty<OUString>(getRun(xPara, 1), "TextPortionType"));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo36089, "fdo36089.rtf")
+{
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(-50), getProperty<sal_Int16>(getRun(getParagraph(1), 2), "CharEscapement"));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo48446, "fdo48446.rtf")
+{
+ OUString aExpected("\xd0\x98\xd0\xbc\xd1\x8f", 6, RTL_TEXTENCODING_UTF8);
+ getParagraph(1, aExpected);
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo47495, "fdo47495.rtf")
+{
+ // Used to have 4 paragraphs, as a result the original bugdoc had 2 pages instead of 1.
+ CPPUNIT_ASSERT_EQUAL(2, getParagraphs());
+}
+
+DECLARE_RTFEXPORT_TEST(testAllGapsWord, "all_gaps_word.rtf")
+{
+ BorderTest borderTest;
+ BorderTest::testTheBorders(mxComponent, false);
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo52389, "fdo52389.rtf")
+{
+ // The last '!' character at the end of the document was lost
+ CPPUNIT_ASSERT_EQUAL(6, getLength());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo49655, "fdo49655.rtf")
+{
+ /*
+ * 49655 :
+ * The problem was that the table was not imported due to the ' ' string in the middle of the table definition.
+ *
+ * xray ThisComponent.TextTables.Count 'was 0
+ */
+ uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo62805, "fdo62805.rtf")
+{
+ /*
+ * 62805 :
+ * The problem was that the table was not imported due to the absence of \pard after \row.
+ * The table was instead in a group (the '}' replace the \pard).
+ */
+ uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo52475, "fdo52475.rtf")
+{
+ // The problem was that \chcbpat0 resulted in no color, instead of COL_AUTO.
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), getProperty<sal_Int32>(getRun(getParagraph(1), 3), "CharBackColor"));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo55493, "fdo55493.rtf")
+{
+ // The problem was that the width of the PNG was detected as 15,24cm, instead of 3.97cm
+ uno::Reference<drawing::XShape> xShape(getShape(1), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3969), xShape->getSize().Width);
+}
+
+DECLARE_RTFEXPORT_TEST(testCopyPastePageStyle, "copypaste-pagestyle.rtf")
+{
+ // The problem was that RTF import during copy&paste did not ignore page styles.
+ // Once we have more copy&paste tests, makes sense to refactor this to some helper method.
+ paste("copypaste-pagestyle-paste.rtf");
+
+ uno::Reference<beans::XPropertySet> xPropertySet(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(21001), getProperty<sal_Int32>(xPropertySet, "Width")); // Was letter, i.e. 21590
+}
+
+DECLARE_RTFEXPORT_TEST(testCopyPasteFootnote, "copypaste-footnote.rtf")
+{
+ // The RTF import did not handle the case when the position wasn't the main document XText, but something different, e.g. a footnote.
+ uno::Reference<text::XFootnotesSupplier> xFootnotesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xFootnotes(xFootnotesSupplier->getFootnotes(), uno::UNO_QUERY);
+ uno::Reference<text::XTextRange> xTextRange(xFootnotes->getByIndex(0), uno::UNO_QUERY);
+ paste("copypaste-footnote-paste.rtf", xTextRange);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("bbb"), xTextRange->getString());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo61193, "hello.rtf")
+{
+ // Pasting content that contained a footnote caused a crash.
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextRange> xText(xTextDocument->getText(), uno::UNO_QUERY);
+ uno::Reference<text::XTextRange> xEnd = xText->getEnd();
+ paste("fdo61193.rtf", xEnd);
+}
+
+DECLARE_RTFEXPORT_TEST(testTdf108123, "hello.rtf")
+{
+ // This crashed, the shape push/pop and table manager stack went out of
+ // sync -> we tried to de-reference an empty stack.
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextRange> xText(xTextDocument->getText(), uno::UNO_QUERY);
+ uno::Reference<text::XTextRange> xEnd = xText->getEnd();
+ paste("tdf108123.rtf", xEnd);
+}
+
+DECLARE_RTFEXPORT_TEST(testShptxtPard, "shptxt-pard.rtf")
+{
+ // The problem was that \pard inside \shptxt caused loss of shape text
+ uno::Reference<text::XText> xText(getShape(1), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("shape text"), xText->getString());
+}
+
+DECLARE_RTFEXPORT_TEST(testDoDhgt, "do-dhgt.rtf")
+{
+ uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xDraws(xDrawPageSupplier->getDrawPage(), uno::UNO_QUERY);
+ for (int i = 0; i < xDraws->getCount(); ++i)
+ {
+ sal_Int32 nFillColor = getProperty<sal_Int32>(xDraws->getByIndex(i), "FillColor");
+ if (nFillColor == 0xc0504d) // red
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xDraws->getByIndex(i), "ZOrder"));
+ else if (nFillColor == 0x9bbb59) // green
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), getProperty<sal_Int32>(xDraws->getByIndex(i), "ZOrder"));
+ else if (nFillColor == 0x4f81bd) // blue
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), getProperty<sal_Int32>(xDraws->getByIndex(i), "ZOrder"));
+ }
+}
+
+DECLARE_RTFEXPORT_TEST(testDplinehollow, "dplinehollow.rtf")
+{
+ uno::Reference<beans::XPropertySet> xPropertySet(getShape(1), uno::UNO_QUERY);
+ table::BorderLine2 line(getProperty<table::BorderLine2>(xPropertySet, "TopBorder"));
+ CPPUNIT_ASSERT_EQUAL(table::BorderLineStyle::NONE, line.LineStyle);
+}
+
+DECLARE_RTFEXPORT_TEST(testLeftmarginDefault, "leftmargin-default.rtf")
+{
+ // The default left/right margin was incorrect when the top margin was set to zero.
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2540), getProperty<sal_Int32>(getStyles("PageStyles")->getByName("Standard"), "LeftMargin"));
+}
+
+DECLARE_RTFEXPORT_TEST(testDppolyline, "dppolyline.rtf")
+{
+ // This was completely ignored, for now, just make sure we have all 4 lines.
+ uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xDraws(xDrawPageSupplier->getDrawPage(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(4), xDraws->getCount());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo56512, "fdo56512.rtf")
+{
+ uno::Reference<text::XTextFramesSupplier> xTextFramesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY);
+ uno::Reference<text::XTextRange> xTextRange(xIndexAccess->getByIndex(0), uno::UNO_QUERY);
+ OUString aExpected("\xd7\xa2\xd7\x95\xd7\xa1\xd7\xa7 \xd7\x9e\xd7\x95\xd7\xa8\xd7\xa9\xd7\x94 ", 20, RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT_EQUAL(aExpected, xTextRange->getString());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo52989, "fdo52989.rtf")
+{
+ // Same as n#192129, but for JPEG files.
+ uno::Reference<drawing::XShape> xShape(getShape(1), uno::UNO_QUERY);
+ OString aMessage("xShape->getSize().Width() = ");
+ aMessage += OString::number(xShape->getSize().Width);
+
+ // This was 2, should be 423 (or 369?).
+ CPPUNIT_ASSERT_MESSAGE(aMessage.getStr(), xShape->getSize().Width >= 273);
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo54473, "fdo54473.rtf")
+{
+ // The problem was that character styles were not imported due to a typo.
+ CPPUNIT_ASSERT_EQUAL(OUString("Anot"), getProperty<OUString>(getRun(getParagraph(1), 1, "Text "), "CharStyleName"));
+ CPPUNIT_ASSERT_EQUAL(OUString("ForeignTxt"), getProperty<OUString>(getRun(getParagraph(1), 3, "character "), "CharStyleName"));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo49934, "fdo49934.rtf")
+{
+ // Column break without columns defined should be a page break, but it was just ignored.
+ CPPUNIT_ASSERT_EQUAL(2, getPages());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo57886, "fdo57886.rtf")
+{
+ // Was 'int from <?> to <?> <?>'.
+ CPPUNIT_ASSERT_EQUAL(OUString("int from {firstlower} to {firstupper} {firstbody}"), getFormula(getRun(getParagraph(1), 1)));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo58076, "fdo58076.rtf")
+{
+ // An additional section was created, so the default page style didn't have the custom margins.
+ uno::Reference<beans::XPropertySet> xStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2251), getProperty<sal_Int32>(xStyle, "LeftMargin"));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1752), getProperty<sal_Int32>(xStyle, "RightMargin"));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(635), getProperty<sal_Int32>(xStyle, "TopMargin"));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(635), getProperty<sal_Int32>(xStyle, "BottomMargin"));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo57678, "fdo57678.rtf")
+{
+ // Paragraphs of the two tables were not converted to tables.
+ uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndexAccess->getCount());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo54612, "fdo54612.rtf")
+{
+ // \dpptx without a \dppolycount caused a crash.
+ uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xDraws(xDrawPageSupplier->getDrawPage(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(8), xDraws->getCount());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo58933, "fdo58933.rtf")
+{
+ // The problem was that the table had an additional cell in its first line.
+ uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY);
+ uno::Reference<text::XTextTable> xTable(xTables->getByIndex(0), uno::UNO_QUERY);
+ // This was 4.
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xTable->getCellNames().getLength());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo44053, "fdo44053.rtf")
+{
+ uno::Reference<text::XTextTablesSupplier> xTablesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY);
+ uno::Reference<text::XTextTable> xTextTable(xTables->getByIndex(0), uno::UNO_QUERY);
+ uno::Reference<table::XTableRows> xTableRows(xTextTable->getRows(), uno::UNO_QUERY);
+ // The with of the table's A1 and A2 cell should equal.
+ CPPUNIT_ASSERT_EQUAL(getProperty< uno::Sequence<text::TableColumnSeparator> >(xTableRows->getByIndex(0), "TableColumnSeparators")[0].Position,
+ getProperty< uno::Sequence<text::TableColumnSeparator> >(xTableRows->getByIndex(1), "TableColumnSeparators")[0].Position);
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo48440, "fdo48440.rtf")
+{
+ // Page break was ignored.
+ CPPUNIT_ASSERT_EQUAL(2, getPages());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo58646line, "fdo58646line.rtf")
+{
+ // \line symbol was ignored
+ getParagraph(1, "foo\nbar");
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo78502, "fdo78502.rtf")
+{
+ // ";" separators were inserted as text
+ getParagraph(1, "foo");
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo58646, "fdo58646.rtf")
+{
+ // Page break was ignored inside a continuous section, on title page.
+ CPPUNIT_ASSERT_EQUAL(2, getPages());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo59419, "fdo59419.rtf")
+{
+ // Junk to be ignored broke import of the table.
+ uno::Reference<text::XTextTablesSupplier> xTablesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount());
+}
+
+DECLARE_RTFEXPORT_TEST(testHexCRLF, "hexcrlf.rtf")
+{
+ // hex-escaped \r and \n should create a paragraph break
+ getParagraph(1, "foo");
+ getParagraph(2, "bar");
+ getParagraph(3, "baz");
+ getParagraph(4, "");
+ getParagraph(5, "quux");
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo58076_2, "fdo58076-2.rtf")
+{
+ // Position of the picture wasn't correct.
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(convertTwipToMm100(8345)), getProperty<sal_Int32>(getShape(1), "HoriOrientPosition"));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo59638, "fdo59638.rtf")
+{
+ // The problem was that w:lvlOverride inside w:num was ignores by dmapper.
+
+ uno::Reference<beans::XPropertySet> xPropertySet(getStyles("NumberingStyles")->getByName("WWNum1"), uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xLevels(xPropertySet->getPropertyValue("NumberingRules"), uno::UNO_QUERY);
+ uno::Sequence<beans::PropertyValue> aProps;
+ xLevels->getByIndex(0) >>= aProps; // 1st level
+
+ for (int i = 0; i < aProps.getLength(); ++i)
+ {
+ const beans::PropertyValue& rProp = aProps[i];
+
+ if (rProp.Name == "BulletChar")
+ {
+ // Was '*', should be 'o'.
+ CPPUNIT_ASSERT_EQUAL(OUString("\xEF\x82\xB7", 3, RTL_TEXTENCODING_UTF8), rProp.Value.get<OUString>());
+ return;
+ }
+ }
+ CPPUNIT_FAIL("no BulletChar property");
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo60722, "fdo60722.rtf")
+{
+ // The problem was that the larger shape was over the smaller one, and not the other way around.
+ uno::Reference<beans::XPropertySet> xShape(getShape(1), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xShape, "ZOrder"));
+ CPPUNIT_ASSERT_EQUAL(OUString("larger"), getProperty<OUString>(xShape, "Description"));
+
+ xShape.set(getShape(2), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), getProperty<sal_Int32>(xShape, "ZOrder"));
+ CPPUNIT_ASSERT_EQUAL(OUString("smaller"), getProperty<OUString>(xShape, "Description"));
+
+ // Color of the line was blue, and it had zero width.
+ xShape.set(getShape(3), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(26), getProperty<sal_uInt32>(xShape, "LineWidth"));
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), getProperty<sal_uInt32>(xShape, "LineColor"));
+}
+
+DECLARE_RTFEXPORT_TEST(testDoDhgtOld, "do-dhgt-old.rtf")
+{
+ // The file contains 3 shapes which have the same dhgt (z-order).
+ // Test that the order is 1) a 2) black rectangle 3) b, and not something else
+ uno::Reference<text::XText> xShape(getShape(1), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xShape, "ZOrder"));
+ CPPUNIT_ASSERT_EQUAL(OUString("a"), xShape->getString());
+
+ xShape.set(getShape(2), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), getProperty<sal_Int32>(xShape, "ZOrder"));
+ CPPUNIT_ASSERT_EQUAL(COL_BLACK, getProperty<sal_uInt32>(xShape, "FillColor"));
+
+ xShape.set(getShape(3), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), getProperty<sal_Int32>(xShape, "ZOrder"));
+ CPPUNIT_ASSERT_EQUAL(OUString("b"), xShape->getString());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo61909, "fdo61909.rtf")
+{
+ uno::Reference<text::XTextRange> xTextRange = getRun(getParagraph(1), 1);
+ // Was the Writer default font.
+ CPPUNIT_ASSERT_EQUAL(OUString("Courier New"), getProperty<OUString>(xTextRange, "CharFontName"));
+ CPPUNIT_ASSERT_EQUAL(COL_AUTO, getProperty<sal_uInt32>(xTextRange, "CharBackColor"));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo62288, "fdo62288.rtf")
+{
+ uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY);
+ uno::Reference<text::XTextTable> xTable(xTables->getByIndex(0), uno::UNO_QUERY);
+ uno::Reference<text::XTextRange> xCell(xTable->getCellByName("B1"), uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xCell->getText(), uno::UNO_QUERY);
+ uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration();
+ uno::Reference<text::XTextRange> xPara(xParaEnum->nextElement(), uno::UNO_QUERY);
+ // Margins were inherited from the previous cell, even there was a \pard there.
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xPara, "ParaLeftMargin"));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo37716, "fdo37716.rtf")
+{
+ uno::Reference<text::XTextFramesSupplier> xTextFramesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xFrames(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY);
+ // \nowrap got ignored, so Surround was text::WrapTextMode_PARALLEL
+ CPPUNIT_ASSERT_EQUAL(text::WrapTextMode_NONE, getProperty<text::WrapTextMode>(xFrames->getByIndex(0), "Surround"));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo51916, "fdo51916.rtf")
+{
+ // Complex nested table caused a crash.
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo63023, "fdo63023.rtf")
+{
+ uno::Reference<text::XText> xHeaderText = getProperty< uno::Reference<text::XText> >(getStyles("PageStyles")->getByName("Standard"), "HeaderText");
+ // Back color was black (0) in the header, due to missing color table in the substream.
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0xFFFF99), getProperty<sal_Int32>(getRun(getParagraphOfText(1, xHeaderText), 1), "CharBackColor"));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo42109, "fdo42109.rtf")
+{
+ uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY);
+ uno::Reference<text::XTextTable> xTable(xTables->getByIndex(0), uno::UNO_QUERY);
+ uno::Reference<text::XTextRange> xCell(xTable->getCellByName("B1"), uno::UNO_QUERY);
+ // Make sure the page number is imported as a field in the B1 cell.
+ CPPUNIT_ASSERT_EQUAL(OUString("TextField"), getProperty<OUString>(getRun(getParagraphOfText(1, xCell->getText()), 1), "TextPortionType"));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo62977, "fdo62977.rtf")
+{
+ // The middle character was imported as '?' instead of the proper unicode value.
+ getRun(getParagraph(1), 1, OUString("\xE5\xB9\xB4\xEF\xBC\x94\xE6\x9C\x88", 9, RTL_TEXTENCODING_UTF8));
+}
+
+DECLARE_RTFEXPORT_TEST(testN818997, "n818997.rtf")
+{
+ // \page was ignored between two \shp tokens.
+ CPPUNIT_ASSERT_EQUAL(2, getPages());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo64671, "fdo64671.rtf")
+{
+ // Additional '}' was inserted before the special character.
+ getRun(getParagraph(1), 1, OUString("\xC5\xBD", 2, RTL_TEXTENCODING_UTF8));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo62044, "fdo62044.rtf")
+{
+ // The problem was that RTF import during copy&paste did not ignore existing paragraph styles.
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextRange> xText(xTextDocument->getText(), uno::UNO_QUERY);
+ uno::Reference<text::XTextRange> xEnd = xText->getEnd();
+ paste("fdo62044-paste.rtf", xEnd);
+
+ uno::Reference<beans::XPropertySet> xPropertySet(getStyles("ParagraphStyles")->getByName("Heading 1"), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(10.f, getProperty<float>(xPropertySet, "CharHeight")); // Was 18, i.e. reset back to original value.
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo70578, "fdo70578.rtf")
+{
+ // Style without explicit \s0 was not imported as the default style
+ uno::Reference<beans::XPropertySet> xPropertySet(
+ getStyles("ParagraphStyles")->getByName("Subtitle"), uno::UNO_QUERY);
+ uno::Reference<style::XStyle> xStyle(xPropertySet, uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("Standard"), xStyle->getParentStyle());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xPropertySet, "ParaTopMargin"));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xPropertySet, "ParaBottomMargin"));
+}
+
+DECLARE_RTFEXPORT_TEST(testN825305, "n825305.rtf")
+{
+ // The problem was that the textbox wasn't transparent, due to unimplemented fFilled == 0.
+ uno::Reference<beans::XPropertyState> xPropertyState(getShape(2), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(100), getProperty<sal_Int32>(getShape(2), "BackColorTransparency"));
+ beans::PropertyState ePropertyState = xPropertyState->getPropertyState("BackColorTransparency");
+ // Was beans::PropertyState_DEFAULT_VALUE.
+ CPPUNIT_ASSERT_EQUAL(beans::PropertyState_DIRECT_VALUE, ePropertyState);
+}
+
+DECLARE_RTFEXPORT_TEST(testTdf106953, "tdf106953.rtf")
+{
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1270), getProperty<sal_Int32>(getParagraph(1), "ParaLeftMargin"));
+ uno::Reference<beans::XPropertyState> xPropertyState(getParagraph(1), uno::UNO_QUERY);
+ beans::PropertyState ePropertyState = xPropertyState->getPropertyState("ParaLeftMargin");
+ // Was beans::PropertyState_DEFAULT_VALUE.
+ CPPUNIT_ASSERT_EQUAL(beans::PropertyState_DIRECT_VALUE, ePropertyState);
+}
+
+DECLARE_RTFEXPORT_TEST(testParaBottomMargin, "para-bottom-margin.rtf")
+{
+ uno::Reference<beans::XPropertySet> xPropertySet(getStyles("ParagraphStyles")->getByName("Standard"), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(353), getProperty<sal_Int32>(xPropertySet, "ParaBottomMargin"));
+
+ // This was 353, i.e. bottom margin of the paragraph was 0.35cm instead of 0.
+ // The reason why this is 0 despite the default style containing \sa200
+ // is that Word will actually interpret \sN (or \pard which apparently
+ // implies \s0) as "set style N and for every attribute of that style,
+ // set an attribute with default value on the paragraph"
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(getParagraph(1), "ParaBottomMargin"));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), getProperty<sal_Int32>(getParagraph(1), "ParaTopMargin"));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo66040, "fdo66040.rtf")
+{
+ uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xDraws(xDrawPageSupplier->getDrawPage(), uno::UNO_QUERY);
+ // This was 0 (no shapes were imported), we want two textframes.
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xDraws->getCount());
+
+ // The second paragraph of the first shape should be actually a table, with "A" in its A1 cell.
+ uno::Reference<text::XTextRange> xTextRange(xDraws->getByIndex(0), uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextRange->getText();
+ uno::Reference<text::XTextTable> xTable(getParagraphOrTable(2, xText), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("A"), uno::Reference<text::XTextRange>(xTable->getCellByName("A1"), uno::UNO_QUERY)->getString());
+
+ // Make sure the second shape has the correct position and size.
+ uno::Reference<drawing::XShape> xShape(xDraws->getByIndex(1), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(14420), getProperty<sal_Int32>(xShape, "HoriOrientPosition"));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(-1032), getProperty<sal_Int32>(xShape, "VertOrientPosition"));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(14000), xShape->getSize().Width);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(21001), xShape->getSize().Height);
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo77996, "fdo77996.rtf")
+{
+ // all styles were imported as name "0"
+ uno::Reference<container::XNameAccess> xChars(getStyles("CharacterStyles"));
+ CPPUNIT_ASSERT(!xChars->hasByName("0"));
+ CPPUNIT_ASSERT(xChars->hasByName("strong"));
+ CPPUNIT_ASSERT(xChars->hasByName("author"));
+ uno::Reference<container::XNameAccess> xParas(getStyles("ParagraphStyles"));
+ CPPUNIT_ASSERT(!xParas->hasByName("0"));
+ CPPUNIT_ASSERT(xParas->hasByName("extract2"));
+ // some document properties were lost
+ uno::Reference<document::XDocumentPropertiesSupplier> xDocumentPropertiesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<document::XDocumentProperties> xProps(xDocumentPropertiesSupplier->getDocumentProperties());
+ CPPUNIT_ASSERT_EQUAL(OUString("Aln Lin (Bei Jing)"), xProps->getAuthor());
+ OUString aTitle("\xe5\x8e\xa6\xe9\x97\xa8\xe9\x92\xa8\xe4\xb8\x9a\xe8\x82\xa1\xe4\xbb\xbd\xe6\x9c\x89\xe9\x99\x90\xe5\x85\xac\xe5\x8f\xb8", 30, RTL_TEXTENCODING_UTF8);
+ CPPUNIT_ASSERT_EQUAL(aTitle, xProps->getTitle());
+ uno::Reference<beans::XPropertySet> xUDProps(xProps->getUserDefinedProperties(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("jay"), getProperty<OUString>(xUDProps, "Operator"));
+
+ // fdo#80486 also check that the ftnsep doesn't insert paragraph breaks
+ getParagraph(1, aTitle);
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo47802, "fdo47802.rtf")
+{
+ uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xDraws(xDrawPageSupplier->getDrawPage(), uno::UNO_QUERY);
+ // Shape inside table was ignored.
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xDraws->getCount());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo39001, "fdo39001.rtf")
+{
+ // Document was of 4 pages, \sect at the end of the doc wasn't ignored.
+ CPPUNIT_ASSERT_EQUAL(3, getPages());
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo54900, "fdo54900.rtf")
+{
+ uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY);
+ uno::Reference<text::XTextTable> xTable(xTables->getByIndex(0), uno::UNO_QUERY);
+ uno::Reference<text::XTextRange> xCell(xTable->getCellByName("A1"), uno::UNO_QUERY);
+ // Paragraph was aligned to left, should be center.
+ CPPUNIT_ASSERT_EQUAL(style::ParagraphAdjust_CENTER, static_cast<style::ParagraphAdjust>(getProperty<sal_Int16>(getParagraphOfText(1, xCell->getText()), "ParaAdjust")));
+}
+
+DECLARE_RTFEXPORT_TEST(testFdo64637, "fdo64637.rtf")
+{
+ // The problem was that the custom "Company" property was added twice, the second invocation resulted in an exception.
+ uno::Reference<document::XDocumentPropertiesSupplier> xDocumentPropertiesSupplier(mxComponent, uno::UNO_QUERY);
... etc. - the rest is truncated
More information about the Libreoffice-commits
mailing list