diff options
author | Michael Stahl <michael.stahl@allotropia.de> | 2024-02-14 19:13:34 +0100 |
---|---|---|
committer | Caolán McNamara <caolan.mcnamara@collabora.com> | 2024-03-01 11:58:42 +0100 |
commit | 5cef8d6e09f852671a412e39f8a3d4729302e28c (patch) | |
tree | 77e03f6514c67cb93287f547232e4d678235898d /sw/qa | |
parent | 7f939fee0ee20a63272267fbf6cecdb034e1bbd6 (diff) |
tdf#158597 writerfilter,sw: fix toggle properties in ListAutoFormat
... for DOCX import.
These can be set both via paragraph style and via character style in the
w:pPr/w:rPr, so use the applyToggleAttributes().
Adding a test for this requires adding the "CharStyleName" property to
GetAutoCharStylePropertyMap().
Change-Id: I9701d5ac82ec3e7757650c08861791dc398a1a77
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163386
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
(cherry picked from commit ff9be3fd30ead41359734f9281b034a988d71196)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163449
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Diffstat (limited to 'sw/qa')
-rw-r--r-- | sw/qa/extras/ooxmlexport/data/tdf158597.docx | bin | 0 -> 12719 bytes | |||
-rw-r--r-- | sw/qa/extras/ooxmlexport/ooxmlexport21.cxx | 258 |
2 files changed, 258 insertions, 0 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/tdf158597.docx b/sw/qa/extras/ooxmlexport/data/tdf158597.docx Binary files differnew file mode 100644 index 000000000000..ad7924ce71b3 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/tdf158597.docx diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx index cdcdfe778577..e902f7a7b873 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx @@ -9,12 +9,15 @@ #include <swmodeltestbase.hxx> +#include <com/sun/star/awt/FontSlant.hpp> #include <com/sun/star/beans/XPropertyState.hpp> #include <com/sun/star/text/XDocumentIndex.hpp> #include <com/sun/star/text/XTextTable.hpp> #include <com/sun/star/style/LineSpacing.hpp> #include <com/sun/star/style/LineSpacingMode.hpp> +#include <comphelper/sequenceashashmap.hxx> + #include <pam.hxx> #include <unotxdoc.hxx> #include <docsh.hxx> @@ -30,6 +33,261 @@ public: } }; +DECLARE_OOXMLEXPORT_TEST(testTdf158597, "tdf158597.docx") +{ + // test with 2 properties: font size, italic (toggle) + { + uno::Reference<text::XTextRange> xParagraph(getParagraph(1)); + CPPUNIT_ASSERT_EQUAL(OUString("No style"), xParagraph->getString()); + uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph"), + getProperty<OUString>(xProps, "ParaStyleName")); + uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1)); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xRun, "CharStyleName")); + CPPUNIT_ASSERT_EQUAL(11.f, getProperty<float>(xRun, "CharHeight")); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, getProperty<awt::FontSlant>(xRun, "CharPosture")); + CPPUNIT_ASSERT(!xProps->getPropertyValue("ListAutoFormat").hasValue()); + } + { + uno::Reference<text::XTextRange> xParagraph(getParagraph(2)); + CPPUNIT_ASSERT_EQUAL(OUString("Char style mark"), xParagraph->getString()); + uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph"), + getProperty<OUString>(xProps, "ParaStyleName")); + uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1)); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xRun, "CharStyleName")); + CPPUNIT_ASSERT_EQUAL(11.f, getProperty<float>(xRun, "CharHeight")); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, getProperty<awt::FontSlant>(xRun, "CharPosture")); + comphelper::SequenceAsHashMap listAutoFormat(xProps->getPropertyValue("ListAutoFormat")); + CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), listAutoFormat["CharStyleName"].get<OUString>()); + CPPUNIT_ASSERT(!listAutoFormat["CharHeight"].hasValue()); + CPPUNIT_ASSERT(!listAutoFormat["CharPosture"].hasValue()); + } + { + uno::Reference<text::XTextRange> xParagraph(getParagraph(3)); + CPPUNIT_ASSERT_EQUAL(OUString("Char style mark and text"), xParagraph->getString()); + uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph"), + getProperty<OUString>(xProps, "ParaStyleName")); + uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1)); + CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), getProperty<OUString>(xRun, "CharStyleName")); + CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight")); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, + getProperty<awt::FontSlant>(xRun, "CharPosture")); + comphelper::SequenceAsHashMap listAutoFormat(xProps->getPropertyValue("ListAutoFormat")); + CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), listAutoFormat["CharStyleName"].get<OUString>()); + CPPUNIT_ASSERT(!listAutoFormat["CharHeight"].hasValue()); + CPPUNIT_ASSERT(!listAutoFormat["CharPosture"].hasValue()); + } + { + uno::Reference<text::XTextRange> xParagraph(getParagraph(4)); + CPPUNIT_ASSERT_EQUAL(OUString("Char style text"), xParagraph->getString()); + uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph"), + getProperty<OUString>(xProps, "ParaStyleName")); + uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1)); + CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), getProperty<OUString>(xRun, "CharStyleName")); + CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight")); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, + getProperty<awt::FontSlant>(xRun, "CharPosture")); + CPPUNIT_ASSERT(!xProps->getPropertyValue("ListAutoFormat").hasValue()); + } + + { + uno::Reference<text::XTextRange> xParagraph(getParagraph(5)); + CPPUNIT_ASSERT_EQUAL(OUString("Para style"), xParagraph->getString()); + uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph E"), + getProperty<OUString>(xProps, "ParaStyleName")); + uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1)); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xRun, "CharStyleName")); + CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight")); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, + getProperty<awt::FontSlant>(xRun, "CharPosture")); + CPPUNIT_ASSERT(!xProps->getPropertyValue("ListAutoFormat").hasValue()); + } + { + uno::Reference<text::XTextRange> xParagraph(getParagraph(6)); + CPPUNIT_ASSERT_EQUAL(OUString("Para style + Char style mark"), xParagraph->getString()); + uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph E"), + getProperty<OUString>(xProps, "ParaStyleName")); + uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1)); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xRun, "CharStyleName")); + CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight")); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, + getProperty<awt::FontSlant>(xRun, "CharPosture")); + comphelper::SequenceAsHashMap listAutoFormat(xProps->getPropertyValue("ListAutoFormat")); + CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), listAutoFormat["CharStyleName"].get<OUString>()); + CPPUNIT_ASSERT(!listAutoFormat["CharHeight"].hasValue()); + // bug was that here the toggle property was not overwritten + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, + listAutoFormat["CharPosture"].get<awt::FontSlant>()); + } + { + uno::Reference<text::XTextRange> xParagraph(getParagraph(7)); + CPPUNIT_ASSERT_EQUAL(OUString("Para style + Char style mark and text"), + xParagraph->getString()); + uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph E"), + getProperty<OUString>(xProps, "ParaStyleName")); + uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1)); + CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), getProperty<OUString>(xRun, "CharStyleName")); + CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight")); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, getProperty<awt::FontSlant>(xRun, "CharPosture")); + comphelper::SequenceAsHashMap listAutoFormat(xProps->getPropertyValue("ListAutoFormat")); + CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), listAutoFormat["CharStyleName"].get<OUString>()); + CPPUNIT_ASSERT(!listAutoFormat["CharHeight"].hasValue()); + // bug was that here the toggle property was not overwritten + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, + listAutoFormat["CharPosture"].get<awt::FontSlant>()); + } + { + uno::Reference<text::XTextRange> xParagraph(getParagraph(8)); + CPPUNIT_ASSERT_EQUAL(OUString("Para style + Char style text"), xParagraph->getString()); + uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph E"), + getProperty<OUString>(xProps, "ParaStyleName")); + uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1)); + CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), getProperty<OUString>(xRun, "CharStyleName")); + CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight")); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, getProperty<awt::FontSlant>(xRun, "CharPosture")); + CPPUNIT_ASSERT(!xProps->getPropertyValue("ListAutoFormat").hasValue()); + } + + { + uno::Reference<text::XTextRange> xParagraph(getParagraph(9)); + CPPUNIT_ASSERT_EQUAL(OUString("No style + direct mark"), xParagraph->getString()); + uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph"), + getProperty<OUString>(xProps, "ParaStyleName")); + uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1)); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xRun, "CharStyleName")); + CPPUNIT_ASSERT_EQUAL(11.f, getProperty<float>(xRun, "CharHeight")); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, getProperty<awt::FontSlant>(xRun, "CharPosture")); + comphelper::SequenceAsHashMap listAutoFormat(xProps->getPropertyValue("ListAutoFormat")); + CPPUNIT_ASSERT(!listAutoFormat["CharStyleName"].hasValue()); + CPPUNIT_ASSERT_EQUAL(16.f, listAutoFormat["CharHeight"].get<float>()); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, + listAutoFormat["CharPosture"].get<awt::FontSlant>()); + } + { + uno::Reference<text::XTextRange> xParagraph(getParagraph(10)); + CPPUNIT_ASSERT_EQUAL(OUString("Char style + direct mark"), xParagraph->getString()); + uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph"), + getProperty<OUString>(xProps, "ParaStyleName")); + uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1)); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xRun, "CharStyleName")); + CPPUNIT_ASSERT_EQUAL(11.f, getProperty<float>(xRun, "CharHeight")); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_NONE, getProperty<awt::FontSlant>(xRun, "CharPosture")); + comphelper::SequenceAsHashMap listAutoFormat(xProps->getPropertyValue("ListAutoFormat")); + CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), listAutoFormat["CharStyleName"].get<OUString>()); + CPPUNIT_ASSERT_EQUAL(16.f, listAutoFormat["CharHeight"].get<float>()); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, + listAutoFormat["CharPosture"].get<awt::FontSlant>()); + } + { + uno::Reference<text::XTextRange> xParagraph(getParagraph(11)); + CPPUNIT_ASSERT_EQUAL(OUString("Char style + direct mark and text"), + xParagraph->getString()); + uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph"), + getProperty<OUString>(xProps, "ParaStyleName")); + uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1)); + CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), getProperty<OUString>(xRun, "CharStyleName")); + CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight")); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, + getProperty<awt::FontSlant>(xRun, "CharPosture")); + comphelper::SequenceAsHashMap listAutoFormat(xProps->getPropertyValue("ListAutoFormat")); + CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), listAutoFormat["CharStyleName"].get<OUString>()); + CPPUNIT_ASSERT_EQUAL(16.f, listAutoFormat["CharHeight"].get<float>()); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, + listAutoFormat["CharPosture"].get<awt::FontSlant>()); + } + { + uno::Reference<text::XTextRange> xParagraph(getParagraph(12)); + CPPUNIT_ASSERT_EQUAL(OUString("Char style + direct text"), xParagraph->getString()); + uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph"), + getProperty<OUString>(xProps, "ParaStyleName")); + uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1)); + CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), getProperty<OUString>(xRun, "CharStyleName")); + CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight")); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, + getProperty<awt::FontSlant>(xRun, "CharPosture")); + CPPUNIT_ASSERT(!xProps->getPropertyValue("ListAutoFormat").hasValue()); + } + + { + uno::Reference<text::XTextRange> xParagraph(getParagraph(13)); + CPPUNIT_ASSERT_EQUAL(OUString("Para style + direct mark"), xParagraph->getString()); + uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph E"), + getProperty<OUString>(xProps, "ParaStyleName")); + uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1)); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xRun, "CharStyleName")); + CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight")); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, + getProperty<awt::FontSlant>(xRun, "CharPosture")); + comphelper::SequenceAsHashMap listAutoFormat(xProps->getPropertyValue("ListAutoFormat")); + CPPUNIT_ASSERT(!listAutoFormat["CharStyleName"].hasValue()); + CPPUNIT_ASSERT_EQUAL(16.f, listAutoFormat["CharHeight"].get<float>()); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, + listAutoFormat["CharPosture"].get<awt::FontSlant>()); + } + { + uno::Reference<text::XTextRange> xParagraph(getParagraph(14)); + CPPUNIT_ASSERT_EQUAL(OUString("Para style + Char style + direct mark"), + xParagraph->getString()); + uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph E"), + getProperty<OUString>(xProps, "ParaStyleName")); + uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1)); + CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xRun, "CharStyleName")); + CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight")); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, + getProperty<awt::FontSlant>(xRun, "CharPosture")); + comphelper::SequenceAsHashMap listAutoFormat(xProps->getPropertyValue("ListAutoFormat")); + CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), listAutoFormat["CharStyleName"].get<OUString>()); + CPPUNIT_ASSERT_EQUAL(16.f, listAutoFormat["CharHeight"].get<float>()); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, + listAutoFormat["CharPosture"].get<awt::FontSlant>()); + } + { + uno::Reference<text::XTextRange> xParagraph(getParagraph(15)); + CPPUNIT_ASSERT_EQUAL(OUString("Para style + Char style + direct mark and text"), + xParagraph->getString()); + uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph E"), + getProperty<OUString>(xProps, "ParaStyleName")); + uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1)); + CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), getProperty<OUString>(xRun, "CharStyleName")); + CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight")); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, + getProperty<awt::FontSlant>(xRun, "CharPosture")); + comphelper::SequenceAsHashMap listAutoFormat(xProps->getPropertyValue("ListAutoFormat")); + CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), listAutoFormat["CharStyleName"].get<OUString>()); + CPPUNIT_ASSERT_EQUAL(16.f, listAutoFormat["CharHeight"].get<float>()); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, + listAutoFormat["CharPosture"].get<awt::FontSlant>()); + } + { + uno::Reference<text::XTextRange> xParagraph(getParagraph(16)); + CPPUNIT_ASSERT_EQUAL(OUString("Para style + Char style + direct text"), + xParagraph->getString()); + uno::Reference<beans::XPropertySet> xProps(xParagraph, uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("List Paragraph E"), + getProperty<OUString>(xProps, "ParaStyleName")); + uno::Reference<text::XTextRange> xRun(getRun(xParagraph, 1)); + CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), getProperty<OUString>(xRun, "CharStyleName")); + CPPUNIT_ASSERT_EQUAL(16.f, getProperty<float>(xRun, "CharHeight")); + CPPUNIT_ASSERT_EQUAL(awt::FontSlant_ITALIC, + getProperty<awt::FontSlant>(xRun, "CharPosture")); + CPPUNIT_ASSERT(!xProps->getPropertyValue("ListAutoFormat").hasValue()); + } +} + DECLARE_OOXMLEXPORT_TEST(testTdf153909_followTextFlow, "tdf153909_followTextFlow.docx") { // Although MSO's UI reports "layoutInCell" for the rectangle, it isn't specified or honored |