summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sd/CppunitTest_sd_export_tests-ooxml3.mk14
-rw-r--r--sd/Module_sd.mk1
-rw-r--r--sd/qa/unit/export-tests-ooxml2.cxx1576
-rw-r--r--sd/qa/unit/export-tests-ooxml3.cxx1730
4 files changed, 1745 insertions, 1576 deletions
diff --git a/sd/CppunitTest_sd_export_tests-ooxml3.mk b/sd/CppunitTest_sd_export_tests-ooxml3.mk
new file mode 100644
index 000000000000..88b15f953261
--- /dev/null
+++ b/sd/CppunitTest_sd_export_tests-ooxml3.mk
@@ -0,0 +1,14 @@
+# -*- 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 sd_export_test,-ooxml3))
+
+# vim: set noet sw=4 ts=4:
diff --git a/sd/Module_sd.mk b/sd/Module_sd.mk
index 1e0a9e8f2816..3fa1debe3958 100644
--- a/sd/Module_sd.mk
+++ b/sd/Module_sd.mk
@@ -35,6 +35,7 @@ $(eval $(call gb_Module_add_slowcheck_targets,sd,\
CppunitTest_sd_import_tests_smartart \
CppunitTest_sd_export_tests-ooxml1 \
CppunitTest_sd_export_tests-ooxml2 \
+ CppunitTest_sd_export_tests-ooxml3 \
CppunitTest_sd_export_tests \
CppunitTest_sd_filters_test \
CppunitTest_sd_layout_tests \
diff --git a/sd/qa/unit/export-tests-ooxml2.cxx b/sd/qa/unit/export-tests-ooxml2.cxx
index 17664e632b35..b2d30225af44 100644
--- a/sd/qa/unit/export-tests-ooxml2.cxx
+++ b/sd/qa/unit/export-tests-ooxml2.cxx
@@ -146,74 +146,7 @@ public:
void testGroupsRotatedPosition();
void testAccentColor();
void testThemeColors();
- void testTdf114848();
- void testTdf68759();
- void testTdf127901();
- void testTdf48735();
- void testTdf90626();
- void testTdf107608();
- void testTdf111786();
- void testFontScale();
- void testShapeAutofitPPTX();
- void testLegacyShapeAutofitPPTX();
- void testTdf115394();
- void testTdf115394Zero();
- void testTdf115005();
- int testTdf115005_FallBack_Images(bool bAddReplacementImages);
- void testTdf115005_FallBack_Images_On();
- void testTdf115005_FallBack_Images_Off();
- void testTdf118806();
- void testTdf130058();
- void testTdf111789();
- void testTdf100348_convert_Fontwork2TextWarp();
- void testTdf1225573_FontWorkScaleX();
- void testTdf99497_keepAppearanceOfCircleKind();
- /// SmartArt animated elements
- void testTdf104792();
- void testTdf90627();
- void testTdf104786();
- void testTdf118783();
- void testTdf104789();
- void testOpenDocumentAsReadOnly();
- void testTdf118835();
- void testTdf118768();
- void testTdf118836();
- void testTdf116350TextEffects();
- void testTdf128096();
- void testTdf120573();
void testTdf118825();
- void testTdf119118();
- void testTdf99213();
- void testPotxExport();
- void testTdf44223();
- void testSmartArtPreserve();
- void testTdf125346();
- void testTdf125346_2();
- void testTdf125360();
- void testTdf125360_1();
- void testTdf125360_2();
- void testTdf125551();
- void testTdf136830();
- void testTdf126234();
- void testTdf126741();
- void testTdf127372();
- void testTdf127379();
- void testTdf98603();
- void testTdf79082();
- void testTdf128213();
- void testTdf129372();
- void testShapeGlowEffect();
- void testTdf119087();
- void testTdf131554();
- void testTdf132282();
- void testTdf132201EffectOrder();
- void testShapeSoftEdgeEffect();
- void testShapeShadowBlurEffect();
- void testTdf119223();
- void testTdf128213ShapeRot();
- void testTdf125560_textDeflate();
- void testTdf125560_textInflateTop();
- void testTdf96061_textHighlight();
void testTextColumns_tdf140852();
void testTextColumns_3columns();
@@ -277,72 +210,7 @@ public:
CPPUNIT_TEST(testGroupsRotatedPosition);
CPPUNIT_TEST(testAccentColor);
CPPUNIT_TEST(testThemeColors);
- CPPUNIT_TEST(testTdf114848);
- CPPUNIT_TEST(testTdf68759);
- CPPUNIT_TEST(testTdf127901);
- CPPUNIT_TEST(testTdf48735);
- CPPUNIT_TEST(testTdf90626);
- CPPUNIT_TEST(testTdf107608);
- CPPUNIT_TEST(testTdf111786);
- CPPUNIT_TEST(testFontScale);
- CPPUNIT_TEST(testShapeAutofitPPTX);
- CPPUNIT_TEST(testLegacyShapeAutofitPPTX);
- CPPUNIT_TEST(testTdf115394);
- CPPUNIT_TEST(testTdf115394Zero);
- CPPUNIT_TEST(testTdf115005);
- CPPUNIT_TEST(testTdf115005_FallBack_Images_On);
- CPPUNIT_TEST(testTdf115005_FallBack_Images_Off);
- CPPUNIT_TEST(testTdf118806);
- CPPUNIT_TEST(testTdf130058);
- CPPUNIT_TEST(testTdf111789);
- CPPUNIT_TEST(testTdf100348_convert_Fontwork2TextWarp);
- CPPUNIT_TEST(testTdf1225573_FontWorkScaleX);
- CPPUNIT_TEST(testTdf99497_keepAppearanceOfCircleKind);
- CPPUNIT_TEST(testTdf104792);
- CPPUNIT_TEST(testTdf90627);
- CPPUNIT_TEST(testTdf104786);
- CPPUNIT_TEST(testTdf118783);
- CPPUNIT_TEST(testTdf104789);
- CPPUNIT_TEST(testOpenDocumentAsReadOnly);
- CPPUNIT_TEST(testTdf118835);
- CPPUNIT_TEST(testTdf118768);
- CPPUNIT_TEST(testTdf118836);
- CPPUNIT_TEST(testTdf116350TextEffects);
- CPPUNIT_TEST(testTdf128096);
- CPPUNIT_TEST(testTdf120573);
CPPUNIT_TEST(testTdf118825);
- CPPUNIT_TEST(testTdf119118);
- CPPUNIT_TEST(testTdf99213);
- CPPUNIT_TEST(testPotxExport);
- CPPUNIT_TEST(testTdf44223);
- CPPUNIT_TEST(testSmartArtPreserve);
- CPPUNIT_TEST(testTdf125346);
- CPPUNIT_TEST(testTdf125346_2);
- CPPUNIT_TEST(testTdf125360);
- CPPUNIT_TEST(testTdf125360_1);
- CPPUNIT_TEST(testTdf125360_2);
- CPPUNIT_TEST(testTdf125551);
- CPPUNIT_TEST(testTdf136830);
- CPPUNIT_TEST(testTdf126234);
- CPPUNIT_TEST(testTdf126741);
- CPPUNIT_TEST(testTdf127372);
- CPPUNIT_TEST(testTdf127379);
- CPPUNIT_TEST(testTdf98603);
- CPPUNIT_TEST(testTdf79082);
- CPPUNIT_TEST(testTdf128213);
- CPPUNIT_TEST(testTdf129372);
- CPPUNIT_TEST(testShapeGlowEffect);
- CPPUNIT_TEST(testTdf119087);
- CPPUNIT_TEST(testTdf131554);
- CPPUNIT_TEST(testTdf132282);
- CPPUNIT_TEST(testTdf132201EffectOrder);
- CPPUNIT_TEST(testShapeSoftEdgeEffect);
- CPPUNIT_TEST(testShapeShadowBlurEffect);
- CPPUNIT_TEST(testTdf119223);
- CPPUNIT_TEST(testTdf128213ShapeRot);
- CPPUNIT_TEST(testTdf125560_textDeflate);
- CPPUNIT_TEST(testTdf125560_textInflateTop);
- CPPUNIT_TEST(testTdf96061_textHighlight);
CPPUNIT_TEST(testTextColumns_tdf140852);
CPPUNIT_TEST(testTextColumns_3columns);
@@ -350,10 +218,8 @@ public:
virtual void registerNamespaces(xmlXPathContextPtr& pXmlXPathCtx) override
{
- XmlTestTools::registerODFNamespaces(pXmlXPathCtx);
XmlTestTools::registerOOXMLNamespaces(pXmlXPathCtx);
}
-
};
void SdOOXMLExportTest2::testTdf131905()
@@ -1744,643 +1610,6 @@ void SdOOXMLExportTest2::testThemeColors()
assertXPath(pXmlDocTheme2, "/a:theme/a:themeElements/a:clrScheme/a:accent3/a:srgbClr", "val", "a5a5a5");
}
-void SdOOXMLExportTest2::testTdf114848()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf114848.pptx"), PPTX);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
- xDocShRef->DoClose();
-
- xmlDocUniquePtr pXmlDocTheme1 = parseExport(tempFile, "ppt/theme/theme1.xml");
- assertXPath(pXmlDocTheme1, "/a:theme/a:themeElements/a:clrScheme/a:dk2/a:srgbClr", "val", "1f497d");
- xmlDocUniquePtr pXmlDocTheme2 = parseExport(tempFile, "ppt/theme/theme2.xml");
- assertXPath(pXmlDocTheme2, "/a:theme/a:themeElements/a:clrScheme/a:dk2/a:srgbClr", "val", "1f497d");
-}
-
-void SdOOXMLExportTest2::testTdf68759()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf68759.odp"), ODP);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
- xDocShRef->DoClose();
-
- xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
- assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:pic[1]/p:spPr/a:xfrm/a:off", "x", "1687320");
- assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:pic[1]/p:spPr/a:xfrm/a:off", "y", "1615320");
- assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:pic[2]/p:spPr/a:xfrm", "flipH", "1");
- assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:pic[2]/p:spPr/a:xfrm", "rot", "9600000");
- assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:pic[2]/p:spPr/a:xfrm/a:off", "x", "3847320");
- assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:pic[2]/p:spPr/a:xfrm/a:off", "y", "1614600");
- assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:pic[3]/p:spPr/a:xfrm", "flipH", "1");
- assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:pic[3]/p:spPr/a:xfrm/a:off", "x", "5934960");
- assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:pic[3]/p:spPr/a:xfrm/a:off", "y", "1615320");
-
-}
-
-void SdOOXMLExportTest2::testTdf127901()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf127901.odp"), ODP);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
- xDocShRef->DoClose();
-
- xmlDocUniquePtr pXmlDocContent1 = parseExport(tempFile, "ppt/slides/slide1.xml");
- assertXPath(pXmlDocContent1, "/p:sld/p:cSld/p:spTree/p:pic/p:blipFill/a:blip/a:lum", "bright", "70000");
- assertXPath(pXmlDocContent1, "/p:sld/p:cSld/p:spTree/p:pic/p:blipFill/a:blip/a:lum", "contrast", "-70000");
-
- xmlDocUniquePtr pXmlDocContent2 = parseExport(tempFile, "ppt/slides/slide2.xml");
- assertXPath(pXmlDocContent2, "/p:sld/p:cSld/p:spTree/p:pic/p:blipFill/a:blip/a:grayscl", 1);
-
- xmlDocUniquePtr pXmlDocContent3 = parseExport(tempFile, "ppt/slides/slide3.xml");
- assertXPath(pXmlDocContent3, "/p:sld/p:cSld/p:spTree/p:pic/p:blipFill/a:blip/a:biLevel", "thresh", "50000");
-
-}
-
-void SdOOXMLExportTest2::testTdf48735()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf48735.odp"), ODP);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
- xDocShRef->DoClose();
-
- xmlDocUniquePtr pXmlDocContent1 = parseExport(tempFile, "ppt/slides/slide1.xml");
- assertXPath(pXmlDocContent1, "/p:sld/p:cSld/p:spTree/p:pic/p:blipFill/a:srcRect", "b", "23627");
- assertXPath(pXmlDocContent1, "/p:sld/p:cSld/p:spTree/p:pic/p:blipFill/a:srcRect", "l", "23627");
- assertXPath(pXmlDocContent1, "/p:sld/p:cSld/p:spTree/p:pic/p:blipFill/a:srcRect", "r", "23627");
- assertXPath(pXmlDocContent1, "/p:sld/p:cSld/p:spTree/p:pic/p:blipFill/a:srcRect", "t", "18842");
-}
-
-void SdOOXMLExportTest2::testTdf90626()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf90626.odp"), ODP);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
- xDocShRef->DoClose();
-
- xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
- assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p[1]/a:pPr/a:buSzPct", "val", "100000");
- assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p[2]/a:pPr/a:buSzPct", "val", "150142");
- assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p[3]/a:pPr/a:buSzPct", "val", "100000");
- assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p[4]/a:pPr/a:buSzPct", "val", "150142");
-}
-
-void SdOOXMLExportTest2::testTdf107608()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf107608.pptx"), PPTX);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- uno::Reference< beans::XPropertySet > xShape( getShapeFromPage( 0, 0, xDocShRef ) );
- uno::Reference< beans::XPropertySet > xPropSet( xShape, uno::UNO_SET_THROW );
-
- drawing::FillStyle aFillStyle( drawing::FillStyle_NONE );
- xPropSet->getPropertyValue("FillStyle") >>= aFillStyle;
- CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, aFillStyle);
-
- bool bBackgroundFill = false;
- xPropSet->getPropertyValue("FillBackground") >>= bBackgroundFill;
- CPPUNIT_ASSERT(bBackgroundFill);
-
- Color nBackgroundColor;
- xPropSet->getPropertyValue("FillColor") >>= nBackgroundColor;
- CPPUNIT_ASSERT_EQUAL(Color(0x92D050), nBackgroundColor);
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf111786()
-{
- // Export line transparency with the color
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf111786.pptx"), PPTX);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- uno::Reference< beans::XPropertySet > xShape( getShapeFromPage( 0, 0, xDocShRef ) );
- uno::Reference< beans::XPropertySet > xPropSet( xShape, uno::UNO_SET_THROW );
-
- Color nLineColor;
- xPropSet->getPropertyValue("LineColor") >>= nLineColor;
- CPPUNIT_ASSERT_EQUAL(Color(0x3465A4), nLineColor);
-
- sal_Int16 nTransparency;
- xPropSet->getPropertyValue("LineTransparence") >>= nTransparency;
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int16>(33), nTransparency);
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testFontScale()
-{
- sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/font-scale.pptx"), PPTX);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
- xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
-
- // Rounding errors possible, approximate value (+/- 1%)
- OUString sScale = getXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp/p:txBody/a:bodyPr/a:normAutofit", "fontScale");
- CPPUNIT_ASSERT_DOUBLES_EQUAL(sal_Int32(76000), sScale.toInt32(), 1000);
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testShapeAutofitPPTX()
-{
- sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/testShapeAutofit.pptx"), PPTX);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
- xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
- CPPUNIT_ASSERT(pXmlDocContent);
-
- // TextAutoGrowHeight --> "Resize shape to fit text" --> true
- assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp[1]/p:txBody/a:bodyPr/a:spAutoFit", 1);
- // TextAutoGrowHeight --> "Resize shape to fit text" --> false
- assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:bodyPr/a:noAutofit", 1);
-}
-
-void SdOOXMLExportTest2::testLegacyShapeAutofitPPTX()
-{
- sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/odp/testLegacyShapeAutofit.odp"), ODP);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
- xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
- CPPUNIT_ASSERT(pXmlDocContent);
-
- // Text in a legacy rectangle
- assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp[1]/p:txBody/a:bodyPr/a:noAutofit", 1);
- // Text in (closed) Polygon
- assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:bodyPr/a:noAutofit", 1);
- // Text in a legacy ellipse
- assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp[3]/p:txBody/a:bodyPr/a:noAutofit", 1);
-}
-
-void SdOOXMLExportTest2::testTdf115394()
-{
- sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf115394.pptx"), PPTX);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
- double fTransitionDuration;
-
- // Slow in MS formats
- SdPage* pPage1 = xDocShRef->GetDoc()->GetSdPage(0, PageKind::Standard);
- fTransitionDuration = pPage1->getTransitionDuration();
- CPPUNIT_ASSERT_EQUAL(1.0, fTransitionDuration);
-
- // Medium in MS formats
- SdPage* pPage2 = xDocShRef->GetDoc()->GetSdPage(1, PageKind::Standard);
- fTransitionDuration = pPage2->getTransitionDuration();
- CPPUNIT_ASSERT_EQUAL(0.75, fTransitionDuration);
-
- // Fast in MS formats
- SdPage* pPage3 = xDocShRef->GetDoc()->GetSdPage(2, PageKind::Standard);
- fTransitionDuration = pPage3->getTransitionDuration();
- CPPUNIT_ASSERT_EQUAL(0.5, fTransitionDuration);
-
- // Custom values
- SdPage* pPage4 = xDocShRef->GetDoc()->GetSdPage(3, PageKind::Standard);
- fTransitionDuration = pPage4->getTransitionDuration();
- CPPUNIT_ASSERT_EQUAL(0.25, fTransitionDuration);
-
- SdPage* pPage5 = xDocShRef->GetDoc()->GetSdPage(4, PageKind::Standard);
- fTransitionDuration = pPage5->getTransitionDuration();
- CPPUNIT_ASSERT_EQUAL(4.25, fTransitionDuration);
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf115394Zero()
-{
- sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf115394-zero.pptx"), PPTX);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
- double fTransitionDuration;
-
- SdPage* pPage = xDocShRef->GetDoc()->GetSdPage(0, PageKind::Standard);
- fTransitionDuration = pPage->getTransitionDuration();
- CPPUNIT_ASSERT_EQUAL(0.01, fTransitionDuration);
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf115005()
-{
- sd::DrawDocShellRef xDocShRefOriginal = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf115005.odp"), ODP);
- utl::TempFile tempFile;
- sd::DrawDocShellRef xDocShRefResaved = saveAndReload(xDocShRefOriginal.get(), ODP, &tempFile);
-
- // additional checks of the output file
- uno::Reference<packages::zip::XZipFileAccess2> xNameAccess = packages::zip::ZipFileAccess::createWithURL(comphelper::getComponentContext(m_xSFactory), tempFile.GetURL());
-
- // check that the document contains original vector images
- const uno::Sequence<OUString> names = xNameAccess->getElementNames();
- int nSVMFiles = 0;
- for (OUString const & s : names)
- {
- if(s.endsWith(".svm"))
- nSVMFiles++;
- }
- CPPUNIT_ASSERT_EQUAL(3, nSVMFiles);
-}
-
-int SdOOXMLExportTest2::testTdf115005_FallBack_Images(bool bAddReplacementImages)
-{
- sd::DrawDocShellRef xDocShRefOriginal = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf115005_no_fallback_images.odp"), ODP);
-
- // check if fallback images were not created if AddReplacementImages=true/false
- // set AddReplacementImages
- {
- std::shared_ptr<comphelper::ConfigurationChanges> batch( comphelper::ConfigurationChanges::create() );
- if ( !officecfg::Office::Common::Save::Graphic::AddReplacementImages::isReadOnly() )
- officecfg::Office::Common::Save::Graphic::AddReplacementImages::set(bAddReplacementImages, batch);
- batch->commit();
- }
-
- // save the file with already set options
- utl::TempFile tempFile;
- sd::DrawDocShellRef xDocShRefResaved = saveAndReload(xDocShRefOriginal.get(), ODP, &tempFile);
-
- // additional checks of the output file
- uno::Reference<packages::zip::XZipFileAccess2> xNameAccess = packages::zip::ZipFileAccess::createWithURL(comphelper::getComponentContext(m_xSFactory), tempFile.GetURL());
-
- // check that the document contains original vector images
- const uno::Sequence<OUString> names = xNameAccess->getElementNames();
- int nSVMFiles = 0;
- int nPNGFiles = 0;
- for (OUString const & n :names)
- {
- if(n.endsWith(".svm"))
- nSVMFiles++;
- if(n.endsWith(".png"))
- nPNGFiles++;
- }
-
- // check results
- CPPUNIT_ASSERT_EQUAL(1, nSVMFiles);
- return nPNGFiles;
-}
-
-void SdOOXMLExportTest2::testTdf115005_FallBack_Images_On()
-{
- const int nPNGFiles = testTdf115005_FallBack_Images(true);
- CPPUNIT_ASSERT_EQUAL(1, nPNGFiles);
-}
-
-void SdOOXMLExportTest2::testTdf115005_FallBack_Images_Off()
-{
- const int nPNGFiles = testTdf115005_FallBack_Images(false);
- CPPUNIT_ASSERT_EQUAL(0, nPNGFiles);
-}
-
-void SdOOXMLExportTest2::testTdf118806()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf118806.odp"), ODP);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
- assertXPath(pXmlDocContent, "//p:animMotion", "origin", "layout");
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf130058()
-{
- sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf130058.pptx"), PPTX);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- uno::Reference< beans::XPropertySet > xShape( getShapeFromPage( 0, 0, xDocShRef ) );
- bool bHasShadow = false;
- xShape->getPropertyValue("Shadow") >>= bHasShadow;
- CPPUNIT_ASSERT(bHasShadow);
- double fShadowDist = 0.0;
- xShape->getPropertyValue("ShadowXDistance") >>= fShadowDist;
- CPPUNIT_ASSERT_EQUAL(static_cast<double>(0), fShadowDist);
- xShape->getPropertyValue("ShadowYDistance") >>= fShadowDist;
- CPPUNIT_ASSERT_EQUAL(static_cast<double>(141), fShadowDist);
- Color nColor;
- xShape->getPropertyValue("ShadowColor") >>= nColor;
- CPPUNIT_ASSERT_EQUAL(COL_BLACK, nColor);
- sal_Int32 nTransparency = 0;
- xShape->getPropertyValue("ShadowTransparence") >>= nTransparency;
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(57), nTransparency);
- double fShadowSizeX = 0.0;
- xShape->getPropertyValue("ShadowSizeX") >>= fShadowSizeX;
- CPPUNIT_ASSERT_EQUAL(static_cast<double>(1000), fShadowSizeX);
- double fShadowSizeY = 0.0;
- xShape->getPropertyValue("ShadowSizeY") >>= fShadowSizeY;
- CPPUNIT_ASSERT_EQUAL(static_cast<double>(1000), fShadowSizeY);
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf111789()
-{
- // Shadow properties were not exported for text shapes.
- sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf111789.pptx"), PPTX);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- // First text shape has some shadow
- {
- uno::Reference< beans::XPropertySet > xShape( getShapeFromPage( 0, 0, xDocShRef ) );
- bool bHasShadow = false;
- xShape->getPropertyValue("Shadow") >>= bHasShadow;
- CPPUNIT_ASSERT(bHasShadow);
- double fShadowDist = 0.0;
- xShape->getPropertyValue("ShadowXDistance") >>= fShadowDist;
- CPPUNIT_ASSERT_EQUAL(static_cast<double>(273), fShadowDist);
- xShape->getPropertyValue("ShadowYDistance") >>= fShadowDist;
- CPPUNIT_ASSERT_EQUAL(static_cast<double>(273), fShadowDist);
- Color nColor;
- xShape->getPropertyValue("ShadowColor") >>= nColor;
- CPPUNIT_ASSERT_EQUAL(Color(0xFF0000), nColor);
- sal_Int32 nTransparency = 0;
- xShape->getPropertyValue("ShadowTransparence") >>= nTransparency;
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(7), nTransparency);
- double fShadowSizeX = 0.0;
- xShape->getPropertyValue("ShadowSizeX") >>= fShadowSizeX;
- CPPUNIT_ASSERT_EQUAL(static_cast<double>(100000), fShadowSizeX);
- double fShadowSizeY = 0.0;
- xShape->getPropertyValue("ShadowSizeY") >>= fShadowSizeY;
- CPPUNIT_ASSERT_EQUAL(static_cast<double>(100000), fShadowSizeY);
- }
-
- // Second text shape has no shadow
- {
- uno::Reference< beans::XPropertySet > xShape( getShapeFromPage( 1, 0, xDocShRef ) );
- bool bHasShadow = false;
- xShape->getPropertyValue("Shadow") >>= bHasShadow;
- CPPUNIT_ASSERT(!bHasShadow);
- }
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf104792()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL(
- m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf104792-smart-art-animation.pptx"), PPTX);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
- assertXPath(pXmlDocContent, "/p:sld/p:timing/p:tnLst/p:par/p:cTn/p:childTnLst[1]/p:seq/p:cTn/p:childTnLst[1]/p:par[1]/p:cTn/p:childTnLst[1]/p:par/p:cTn/p:childTnLst[1]/p:par/p:cTn/p:childTnLst[1]/p:set/p:cBhvr/p:tgtEl/p:spTgt", 1);
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf90627()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf90627.odp"), ODP);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
- // Don't export empty endCondLst without cond.
- assertXPath(pXmlDocContent, "/p:sld/p:timing/p:tnLst/p:par/p:cTn/p:childTnLst[1]/p:seq/p:cTn/p:childTnLst[1]/p:par[2]/p:cTn/p:childTnLst[1]/p:par/p:cTn/p:childTnLst[1]/p:par/p:cTn/p:endCondLst[not(*)]", 0);
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf104786()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf104786.pptx"), PPTX);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide2.xml");
- // Don't export empty 'to'
- assertXPath(pXmlDocContent, "/p:sld/p:timing/p:tnLst/p:par/p:cTn/p:childTnLst[1]/p:seq/p:cTn/p:childTnLst[1]/p:par[2]/p:cTn/p:childTnLst[1]/p:par/p:cTn/p:childTnLst[1]/p:par/p:cTn/p:childTnLst/p:set[2]/p:to", 0);
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf118783()
-{
- sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf118783.odp"), ODP);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
- xDocShRef->DoClose();
-
- xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
- OUString sAttributeName = getXPathContent(pXmlDocContent, "//p:animRot/p:cBhvr/p:attrNameLst/p:attrName");
- CPPUNIT_ASSERT_EQUAL(OUString("r"), sAttributeName);
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf104789()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf104789.pptx"), PPTX);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
- OUString sAttributeName = getXPathContent(pXmlDocContent, "/p:sld/p:timing/p:tnLst/p:par/p:cTn/p:childTnLst/p:seq/p:cTn/p:childTnLst/p:par/p:cTn/p:childTnLst/p:par/p:cTn/p:childTnLst/p:par/p:cTn/p:childTnLst/p:set/p:cBhvr/p:attrNameLst/p:attrName");
- CPPUNIT_ASSERT_EQUAL(OUString("style.opacity"), sAttributeName);
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testOpenDocumentAsReadOnly()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/open-as-read-only.pptx"), PPTX);
- CPPUNIT_ASSERT(xDocShRef->IsSecurityOptOpenReadOnly());
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
- CPPUNIT_ASSERT(xDocShRef->IsSecurityOptOpenReadOnly());
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf118835()
-{
- sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf118835.odp"), ODP);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
- assertXPath(pXmlDocContent, "(//p:animClr)[1]", "clrSpc", "rgb");
- assertXPathContent(pXmlDocContent, "(//p:animClr)[1]//p:attrName", "style.color");
- assertXPath(pXmlDocContent, "(//p:animClr)[1]//p:to/a:srgbClr", "val", "ed1c24");
-
- assertXPath(pXmlDocContent, "(//p:animClr)[2]", "clrSpc", "rgb");
- assertXPathContent(pXmlDocContent, "(//p:animClr)[2]//p:attrName", "stroke.color");
- assertXPath(pXmlDocContent, "(//p:animClr)[2]//p:to/a:srgbClr", "val", "333399");
-
- assertXPath(pXmlDocContent, "(//p:animClr)[3]", "clrSpc", "rgb");
- assertXPathContent(pXmlDocContent, "(//p:animClr)[3]//p:attrName", "fillcolor");
- assertXPath(pXmlDocContent, "(//p:animClr)[3]//p:to/a:srgbClr", "val", "fcd3c1");
-
- assertXPath(pXmlDocContent, "(//p:animClr)[5]", "clrSpc", "hsl");
- assertXPathContent(pXmlDocContent, "(//p:animClr)[5]//p:attrName", "fillcolor");
- assertXPath(pXmlDocContent, "(//p:animClr)[5]//p:by/p:hsl", "h", "10800000");
- assertXPath(pXmlDocContent, "(//p:animClr)[5]//p:by/p:hsl", "s", "0");
- assertXPath(pXmlDocContent, "(//p:animClr)[5]//p:by/p:hsl", "l", "0");
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf118768()
-{
- sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf118768-brake.odp"), ODP);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
- assertXPath(pXmlDocContent, "//p:anim[1]", "from", "(-#ppt_w/2)");
- assertXPath(pXmlDocContent, "//p:anim[1]", "to", "(#ppt_x)");
- assertXPath(pXmlDocContent, "//p:anim[2]", "from", "0");
-
- assertXPath(pXmlDocContent, "//p:anim[2]", "to", "-1");
- assertXPath(pXmlDocContent, "//p:anim[2]/p:cBhvr/p:cTn", "autoRev", "1");
-
- assertXPath(pXmlDocContent, "//p:anim[3]", "by", "(#ppt_h/3+#ppt_w*0.1)");
- assertXPath(pXmlDocContent, "//p:anim[3]/p:cBhvr/p:cTn", "autoRev", "1");
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf118836()
-{
- sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf118836.odp"), ODP);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
- assertXPath(pXmlDocContent, "//p:animScale/p:by", "x", "250000");
- assertXPath(pXmlDocContent, "//p:animScale/p:by", "y", "250000");
- xDocShRef->DoClose();
-}
-
-static double getAdjustmentValue( const uno::Reference<beans::XPropertySet>& xSet )
-{
- auto aGeomPropSeq = xSet->getPropertyValue( "CustomShapeGeometry" )
- .get<uno::Sequence<beans::PropertyValue>>();
- auto aGeomPropVec
- = comphelper::sequenceToContainer<std::vector<beans::PropertyValue>>(
- aGeomPropSeq );
-
- auto aIterator = std::find_if(
- aGeomPropVec.begin(), aGeomPropVec.end(),
- []( const beans::PropertyValue& rValue ) { return rValue.Name == "AdjustmentValues"; } );
-
- if (aIterator != aGeomPropVec.end())
- {
- uno::Sequence<drawing::EnhancedCustomShapeAdjustmentValue> aAdjustment;
- double fResult = 0.0;
- aIterator->Value >>= aAdjustment;
- aAdjustment[0].Value >>= fResult;
- return fResult;
- }
-
- return -1.0;
-}
-
-static bool getScaleXValue(const uno::Reference<beans::XPropertySet>& xSet)
-{
- bool bScaleX = false;
-
- auto aGeomPropSeq = xSet->getPropertyValue("CustomShapeGeometry")
- .get<uno::Sequence<beans::PropertyValue>>();
- auto aGeomPropVec
- = comphelper::sequenceToContainer<std::vector<beans::PropertyValue>>(
- aGeomPropSeq);
-
- auto aIterator = std::find_if(
- aGeomPropVec.begin(), aGeomPropVec.end(),
- [](const beans::PropertyValue& rValue) { return rValue.Name == "TextPath"; });
-
- if (aIterator != aGeomPropVec.end())
- {
- uno::Sequence<beans::PropertyValue> aTextPathProperties;
- aIterator->Value >>= aTextPathProperties;
- auto aIterator2 = std::find_if(
- aTextPathProperties.begin(), aTextPathProperties.end(),
- [](const beans::PropertyValue& rValue) { return rValue.Name == "ScaleX"; });
-
- if (aIterator2 != aTextPathProperties.end())
- {
- aIterator2->Value >>= bScaleX;
- }
- }
-
- return bScaleX;
-}
-
-void SdOOXMLExportTest2::testTdf116350TextEffects()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL( m_directories.getURLFromSrc( u"sd/qa/unit/data/pptx/tdf116350-texteffects.pptx" ), PPTX );
-
- // Default angle for ArchUp
- uno::Reference<beans::XPropertySet> xShape0( getShapeFromPage( 0, 0, xDocShRef ) );
- double fAdjust = getAdjustmentValue( xShape0 );
- CPPUNIT_ASSERT_EQUAL( 180.0, fAdjust );
-
- bool bScaleX = getScaleXValue( xShape0 );
- CPPUNIT_ASSERT_EQUAL( true, bScaleX );
-
- // Default angle for ArchDown
- uno::Reference<beans::XPropertySet> xShape14( getShapeFromPage( 14, 0, xDocShRef ) );
- fAdjust = getAdjustmentValue( xShape14 );
- CPPUNIT_ASSERT_EQUAL( 0.0, fAdjust );
-
- bScaleX = getScaleXValue( xShape14 );
- CPPUNIT_ASSERT_EQUAL( true, bScaleX );
-
- // Angle directly set
- uno::Reference<beans::XPropertySet> xShape1( getShapeFromPage( 1, 0, xDocShRef ) );
- fAdjust = getAdjustmentValue( xShape1 );
- CPPUNIT_ASSERT_EQUAL( 213.25, fAdjust );
-
- bScaleX = getScaleXValue( xShape1 );
- CPPUNIT_ASSERT_EQUAL( true, bScaleX );
-
- // Export
- utl::TempFile tempFile;
- xDocShRef = saveAndReload( xDocShRef.get(), PPTX, &tempFile );
-
- xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
- assertXPath(pXmlDocContent, "//p:sp[1]/p:txBody/a:bodyPr/a:prstTxWarp", "prst", "textArchUp");
- assertXPath(pXmlDocContent, "//p:sp[14]/p:txBody/a:bodyPr/a:prstTxWarp", "prst", "textCircle");
- assertXPath(pXmlDocContent, "//p:sp[14]/p:spPr/a:solidFill/a:srgbClr", 0);
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf128096()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf128096.odp"), ODP);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
- xDocShRef->DoClose();
-
- xmlDocUniquePtr pXmlDocContent1 = parseExport(tempFile, "ppt/slides/slide1.xml");
- assertXPath(pXmlDocContent1, "//p:sld/p:cSld/p:spTree/p:sp/p:txBody/a:p/a:r/a:rPr/a:highlight/a:srgbClr", "val", "ffff00");
-
- // Check that underlined content is also highlighted
- xmlDocUniquePtr pXmlDocContent2 = parseExport(tempFile, "ppt/slides/slide2.xml");
- assertXPath(pXmlDocContent2, "//p:sld/p:cSld/p:spTree/p:sp/p:txBody/a:p/a:r/a:rPr/a:highlight/a:srgbClr", "val", "ffff00");
-}
-void SdOOXMLExportTest2::testTdf120573()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL( m_directories.getURLFromSrc( u"sd/qa/unit/data/pptx/tdf120573.pptx" ), PPTX );
- utl::TempFile tempFile;
- xDocShRef = saveAndReload( xDocShRef.get(), PPTX, &tempFile );
-
- xmlDocUniquePtr pXmlDoc = parseExport(tempFile, "ppt/slides/slide1.xml");
- assertXPath(pXmlDoc, "//p:sld/p:cSld/p:spTree/p:pic/p:nvPicPr/p:nvPr/a:audioFile", 1);
- assertXPath(pXmlDoc, "//p:sld/p:cSld/p:spTree/p:pic/p:nvPicPr/p:nvPr/a:videoFile", 0);
-
- xmlDocUniquePtr pXmlDocRels = parseExport(tempFile, "ppt/slides/_rels/slide1.xml.rels");
- assertXPath(pXmlDocRels,
- "(/rels:Relationships/rels:Relationship[@Target='../media/media1.wav'])[1]",
- "Type",
- "http://schemas.openxmlformats.org/officeDocument/2006/relationships/audio");
-
- xmlDocUniquePtr pXmlContentType = parseExport(tempFile, "[Content_Types].xml");
- assertXPath(pXmlContentType,
- "/ContentType:Types/ContentType:Override[@PartName='/ppt/media/media1.wav']",
- "ContentType",
- "audio/x-wav");
-}
void SdOOXMLExportTest2::testTdf118825()
{
@@ -2397,811 +1626,6 @@ void SdOOXMLExportTest2::testTdf118825()
xDocShRef->DoClose();
}
-void SdOOXMLExportTest2::testTdf119118()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc( u"sd/qa/unit/data/pptx/tdf119118.pptx" ), PPTX);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
- xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
- assertXPath(pXmlDocContent, "//p:iterate", "type", "lt");
- assertXPath(pXmlDocContent, "//p:tmAbs", "val", "200");
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf99213()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc( u"sd/qa/unit/data/odp/tdf99213-target-missing.odp" ), ODP);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
- xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
- // Number of nodes with p:attrNameLst was 3, including one that missed tgtEl
- assertXPath(pXmlDocContent, "//p:attrNameLst", 2);
- // Timenode that miss its target element should be filtered.
- assertXPath(pXmlDocContent, "//p:attrNameLst/preceding-sibling::p:tgtEl", 2);
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testPotxExport()
-{
- // Create new document
- sd::DrawDocShellRef xDocShRef
- = new sd::DrawDocShell(SfxObjectCreateMode::EMBEDDED, false, DocumentType::Draw);
- uno::Reference<frame::XLoadable> xLoadable(xDocShRef->GetModel(), uno::UNO_QUERY);
- CPPUNIT_ASSERT(xLoadable.is());
- xLoadable->initNew();
-
- // Export as a POTM template
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), POTX, &tempFile);
- xDocShRef->DoClose();
-
- // Load and check content type
- xmlDocUniquePtr pContentTypes = parseExport(tempFile, "[Content_Types].xml");
- CPPUNIT_ASSERT(pContentTypes);
- assertXPath(pContentTypes, "/ContentType:Types/ContentType:Override[@PartName='/ppt/presentation.xml']",
- "ContentType", "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml");
-}
-
-void SdOOXMLExportTest2::testTdf44223()
-{
- utl::TempFile tempFile;
- ::sd::DrawDocShellRef xDocShRef
- = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf44223.pptx"), PPTX);
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- std::unique_ptr<SvStream> const pStream1(parseExportStream(tempFile, "ppt/media/audio1.wav"));
- CPPUNIT_ASSERT_EQUAL(sal_uInt64(11140), pStream1->remainingSize());
-
- std::unique_ptr<SvStream> const pStream2(parseExportStream(tempFile, "ppt/media/audio2.wav"));
- CPPUNIT_ASSERT_EQUAL(sal_uInt64(28074), pStream2->remainingSize());
-
- xmlDocUniquePtr pXmlContentType = parseExport(tempFile, "[Content_Types].xml");
- assertXPath(pXmlContentType,
- "/ContentType:Types/ContentType:Override[@PartName='/ppt/media/audio1.wav']",
- "ContentType",
- "audio/x-wav");
-
- assertXPath(pXmlContentType,
- "/ContentType:Types/ContentType:Override[@PartName='/ppt/media/audio2.wav']",
- "ContentType",
- "audio/x-wav");
-
- xmlDocUniquePtr pDoc1 = parseExport(tempFile, "ppt/slides/slide1.xml");
-
- // Start condition: 0s after timenode id 5 begins.
- assertXPath(pDoc1 , "//p:audio/p:cMediaNode/p:cTn/p:stCondLst/p:cond", "evt", "begin");
- assertXPath(pDoc1 , "//p:audio/p:cMediaNode/p:cTn/p:stCondLst/p:cond", "delay", "0");
- assertXPath(pDoc1 , "//p:audio/p:cMediaNode/p:cTn/p:stCondLst/p:cond/p:tn", "val", "5");
-
- xmlDocUniquePtr pDoc2 = parseExport(tempFile, "ppt/slides/slide2.xml");
- assertXPath(pDoc2 , "//p:transition/p:sndAc/p:stSnd/p:snd[@r:embed]", 2);
-
- xmlDocUniquePtr pRels1 = parseExport(tempFile, "ppt/slides/_rels/slide1.xml.rels");
- assertXPath(pRels1, "//rels:Relationship[@Id='rId1']", "Type",
- "http://schemas.openxmlformats.org/officeDocument/2006/relationships/audio");
- assertXPath(pRels1, "//rels:Relationship[@Id='rId1']", "Target", "../media/audio1.wav");
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testSmartArtPreserve()
-{
- ::sd::DrawDocShellRef xDocShRef
- = loadURL(
- m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/smartart-preserve.pptx"), PPTX);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- xmlDocUniquePtr pXmlDoc = parseExport(tempFile, "ppt/slides/slide1.xml");
- assertXPath(pXmlDoc, "//p:sld/p:cSld/p:spTree/p:graphicFrame/p:nvGraphicFramePr/p:cNvPr");
- assertXPath(pXmlDoc, "//p:sld/p:cSld/p:spTree/p:graphicFrame/a:graphic/a:graphicData/dgm:relIds");
- assertXPath(pXmlDoc, "//p:sld/p:cSld/p:spTree/p:graphicFrame/p:nvGraphicFramePr/p:nvPr/p:extLst/p:ext",
- "uri", "{D42A27DB-BD31-4B8C-83A1-F6EECF244321}");
- assertXPath(pXmlDoc, "//p:sld/p:cSld/p:spTree/p:graphicFrame/p:nvGraphicFramePr/p:nvPr/p:extLst/p:ext/p14:modId");
-
- xmlDocUniquePtr pXmlDocRels = parseExport(tempFile, "ppt/slides/_rels/slide1.xml.rels");
- assertXPath(pXmlDocRels,
- "(/rels:Relationships/rels:Relationship[@Target='../diagrams/layout1.xml'])[1]", "Type",
- "http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramLayout");
- assertXPath(pXmlDocRels,
- "(/rels:Relationships/rels:Relationship[@Target='../diagrams/data1.xml'])[1]", "Type",
- "http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramData");
- assertXPath(pXmlDocRels,
- "(/rels:Relationships/rels:Relationship[@Target='../diagrams/colors1.xml'])[1]", "Type",
- "http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramColors");
- assertXPath(pXmlDocRels,
- "(/rels:Relationships/rels:Relationship[@Target='../diagrams/quickStyle1.xml'])[1]", "Type",
- "http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramQuickStyle");
-
- xmlDocUniquePtr pXmlContentType = parseExport(tempFile, "[Content_Types].xml");
- assertXPath(pXmlContentType,
- "/ContentType:Types/ContentType:Override[@PartName='/ppt/diagrams/layout1.xml']",
- "ContentType", "application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml");
- assertXPath(pXmlContentType,
- "/ContentType:Types/ContentType:Override[@PartName='/ppt/diagrams/data1.xml']",
- "ContentType", "application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml");
- assertXPath(pXmlContentType,
- "/ContentType:Types/ContentType:Override[@PartName='/ppt/diagrams/colors1.xml']",
- "ContentType", "application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml");
- assertXPath(pXmlContentType,
- "/ContentType:Types/ContentType:Override[@PartName='/ppt/diagrams/quickStyle1.xml']",
- "ContentType", "application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml");
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf125346()
-{
- // There are two themes in the test document, make sure we use the right theme
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf125346.pptx"), PPTX);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- uno::Reference< beans::XPropertySet > xShape( getShapeFromPage( 0, 0, xDocShRef ) );
- uno::Reference< beans::XPropertySet > xPropSet( xShape, uno::UNO_SET_THROW );
-
- drawing::FillStyle aFillStyle( drawing::FillStyle_NONE );
- xPropSet->getPropertyValue("FillStyle") >>= aFillStyle;
- CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, aFillStyle);
-
- Color nFillColor;
- xPropSet->getPropertyValue("FillColor") >>= nFillColor;
- CPPUNIT_ASSERT_EQUAL(Color(0x90C226), nFillColor);
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf125346_2()
-{
- // There are two themes in the test document, make sure we use the right theme
- // Test more slides with different themes
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf125346_2.pptx"), PPTX);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- {
- uno::Reference< beans::XPropertySet > xShape( getShapeFromPage( 0, 0, xDocShRef ) );
- uno::Reference< beans::XPropertySet > xPropSet( xShape, uno::UNO_SET_THROW );
-
- drawing::FillStyle aFillStyle( drawing::FillStyle_NONE );
- xPropSet->getPropertyValue("FillStyle") >>= aFillStyle;
- CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, aFillStyle);
-
- Color nFillColor;
- xPropSet->getPropertyValue("FillColor") >>= nFillColor;
- CPPUNIT_ASSERT_EQUAL(Color(0x90C226), nFillColor);
- }
-
- {
- uno::Reference< beans::XPropertySet > xShape( getShapeFromPage( 0, 1, xDocShRef ) );
- uno::Reference< beans::XPropertySet > xPropSet( xShape, uno::UNO_SET_THROW );
-
- drawing::FillStyle aFillStyle( drawing::FillStyle_NONE );
- xPropSet->getPropertyValue("FillStyle") >>= aFillStyle;
- CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, aFillStyle);
-
- Color nFillColor;
- xPropSet->getPropertyValue("FillColor") >>= nFillColor;
- CPPUNIT_ASSERT_EQUAL(Color(0x052F61), nFillColor);
- }
-
- {
- uno::Reference< beans::XPropertySet > xShape( getShapeFromPage( 0, 2, xDocShRef ) );
- uno::Reference< beans::XPropertySet > xPropSet( xShape, uno::UNO_SET_THROW );
-
- drawing::FillStyle aFillStyle( drawing::FillStyle_NONE );
- xPropSet->getPropertyValue("FillStyle") >>= aFillStyle;
- CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, aFillStyle);
-
- Color nFillColor;
- xPropSet->getPropertyValue("FillColor") >>= nFillColor;
- CPPUNIT_ASSERT_EQUAL(Color(0x90C226), nFillColor);
- }
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf125360()
-{
- // Check whether the changed fill transparency is exported correctly.
- // Color is defined by shape style
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf125360.pptx"), PPTX);
-
- uno::Reference< beans::XPropertySet > xShape( getShapeFromPage( 0, 0, xDocShRef ) );
-
- xShape->setPropertyValue("FillTransparence", uno::makeAny(static_cast<sal_Int32>(23)));
-
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- xShape.set( getShapeFromPage( 0, 0, xDocShRef ) );
-
- sal_Int32 nTransparence = 0;
- xShape->getPropertyValue("FillTransparence") >>= nTransparence;
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(23), nTransparence);
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf125360_1()
-{
- // Check whether the changed fill transparency is exported correctly.
- // Color is defined by color scheme
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf125360_1.pptx"), PPTX);
-
- uno::Reference< beans::XPropertySet > xShape( getShapeFromPage( 0, 0, xDocShRef ) );
-
- xShape->setPropertyValue("FillTransparence", uno::makeAny(static_cast<sal_Int32>(23)));
-
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- xShape.set( getShapeFromPage( 0, 0, xDocShRef ) );
-
- sal_Int32 nTransparence = 0;
- xShape->getPropertyValue("FillTransparence") >>= nTransparence;
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(23), nTransparence);
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf125360_2()
-{
- // Check whether the changed fill transparency is exported correctly.
- // Color is defined by color scheme with a transparency
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf125360_2.pptx"), PPTX);
-
- uno::Reference< beans::XPropertySet > xShape( getShapeFromPage( 0, 0, xDocShRef ) );
-
- sal_Int32 nTransparence = 0;
- xShape->getPropertyValue("FillTransparence") >>= nTransparence;
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(82), nTransparence);
-
- xShape->setPropertyValue("FillTransparence", uno::makeAny(static_cast<sal_Int32>(23)));
-
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- xShape.set( getShapeFromPage( 0, 0, xDocShRef ) );
-
- nTransparence = 0;
- xShape->getPropertyValue("FillTransparence") >>= nTransparence;
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(23), nTransparence);
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf125551()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf125551.pptx"), PPTX);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- uno::Reference<drawing::XShapes> xGroupShape(getShapeFromPage(0, 0, xDocShRef), uno::UNO_QUERY);
- uno::Reference<drawing::XShape> xShapeBg(xGroupShape->getByIndex(0), uno::UNO_QUERY);
-
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1024), xShapeBg->getPosition().X);
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(576), xShapeBg->getPosition().Y);
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(10815), xShapeBg->getSize().Width);
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(8587), xShapeBg->getSize().Height);
-}
-
-void SdOOXMLExportTest2::testTdf136830()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf136830.pptx"), PPTX);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- // Without the fix in place, the X position of the shapes would have been 0
- uno::Reference<drawing::XShapes> xGroupShape(getShapeFromPage(0, 0, xDocShRef), uno::UNO_QUERY);
-
- uno::Reference<drawing::XShape> xShape1(xGroupShape->getByIndex(0), uno::UNO_QUERY);
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(14134), xShape1->getPosition().X);
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(-5321), xShape1->getPosition().Y);
-
- uno::Reference<drawing::XShape> xShape2(xGroupShape->getByIndex(1), uno::UNO_QUERY);
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(8085), xShape2->getPosition().X);
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(8085), xShape2->getPosition().Y);
-
- uno::Reference<drawing::XShape> xShape3(xGroupShape->getByIndex(2), uno::UNO_QUERY);
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(8283), xShape3->getPosition().X);
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(4620), xShape3->getPosition().Y);
-}
-
-void SdOOXMLExportTest2::testTdf100348_convert_Fontwork2TextWarp()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL(
- m_directories.getURLFromSrc(u"/sd/qa/unit/data/odp/tdf100348_Fontwork2TextWarp.odp"), ODP);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- // Resulting pptx has to contain the TextWarp shape
- xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
- const OString sPathStart("/p:sld/p:cSld/p:spTree/p:sp[1]/p:txBody/a:bodyPr/a:prstTxWarp");
- assertXPath(pXmlDocContent, sPathStart + "[@prst='textWave1']");
- const OString sPathAdj(sPathStart + "/a:avLst/a:gd");
- assertXPath(pXmlDocContent, sPathAdj + "[@name='adj1' and @fmla='val 18750']");
- assertXPath(pXmlDocContent, sPathAdj + "[@name='adj2' and @fmla='val -7500']");
-
- // Reloading has to get the Fontwork shape back
- // TextPath makes a custom shape to a Fontwork shape, so must exist
- uno::Reference<beans::XPropertySet> xShapeWavePropSet(getShapeFromPage(0, 0, xDocShRef));
- auto aGeomPropSeq = xShapeWavePropSet->getPropertyValue("CustomShapeGeometry")
- .get<uno::Sequence<beans::PropertyValue>>();
- auto aGeomPropVec
- = comphelper::sequenceToContainer<std::vector<beans::PropertyValue>>(aGeomPropSeq);
- OUString sName = "TextPath";
- auto aIterator = std::find_if(
- aGeomPropVec.begin(), aGeomPropVec.end(),
- [sName](const beans::PropertyValue& rValue) { return rValue.Name == sName; });
- CPPUNIT_ASSERT_MESSAGE("No TextPath", aIterator != aGeomPropVec.end());
-
- // Type has to be same as in original document on roundtrip.
- sName = "Type";
- auto aIterator2 = std::find_if(
- aGeomPropVec.begin(), aGeomPropVec.end(),
- [sName](const beans::PropertyValue& rValue) { return rValue.Name == sName; });
- CPPUNIT_ASSERT_MESSAGE("No Type", aIterator2 != aGeomPropVec.end());
- OUString sOwnName;
- aIterator2->Value >>= sOwnName;
- CPPUNIT_ASSERT_EQUAL(OUString("fontwork-wave"), sOwnName);
-
- // Adjustmentvalues need to be the same.
- sName = "AdjustmentValues";
- auto aIterator3 = std::find_if(
- aGeomPropVec.begin(), aGeomPropVec.end(),
- [sName](const beans::PropertyValue& rValue) { return rValue.Name == sName; });
- CPPUNIT_ASSERT_MESSAGE("No AdjustmentValues", aIterator3 != aGeomPropVec.end());
- uno::Sequence<drawing::EnhancedCustomShapeAdjustmentValue> aAdjValueSeq;
- aIterator3->Value >>= aAdjValueSeq;
- double fAdj1;
- aAdjValueSeq[0].Value >>= fAdj1;
- double fAdj2;
- aAdjValueSeq[1].Value >>= fAdj2;
- CPPUNIT_ASSERT_EQUAL(4050.0, fAdj1); // odp values, not pptx values
- CPPUNIT_ASSERT_EQUAL(9180.0, fAdj2);
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf1225573_FontWorkScaleX()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf125573_FontWorkScaleX.pptx"), PPTX);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- // Error was, that attribute 'fromWordArt' was ignored
- // ensure, resulting pptx has fromWordArt="1" on textArchDown shape
- xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
- assertXPath(
- pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp[1]/p:txBody/a:bodyPr[@fromWordArt='1']");
-
- // Error was, that text in legacy shapes of category "Follow Path" was not scaled to the path.
- uno::Reference<beans::XPropertySet> xShapeArchProps(getShapeFromPage(0, 0, xDocShRef));
- awt::Rectangle aBoundRectArch;
- xShapeArchProps->getPropertyValue(UNO_NAME_MISC_OBJ_BOUNDRECT) >>= aBoundRectArch;
- // difference should be zero, but allow some range for stroke thickness
- CPPUNIT_ASSERT_LESS(sal_Int32(50), std::abs(aBoundRectArch.Width - 13081));
-
- // Error was, that text in shapes of category "Warp" was not scaled to the path.
- uno::Reference<beans::XPropertySet> xShapeWaveProps(getShapeFromPage(0, 1, xDocShRef));
- awt::Rectangle aBoundRectWave;
- xShapeWaveProps->getPropertyValue(UNO_NAME_MISC_OBJ_BOUNDRECT) >>= aBoundRectWave;
- // difference should be zero, but allow some range for stroke thickness
- CPPUNIT_ASSERT_LESS(sal_Int32(50), std::abs(aBoundRectWave.Width - 11514));
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf126234()
-{
- sd::DrawDocShellRef xDocShRef = loadURL( m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf126234.pptx"), PPTX );
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- // check relative size of the bullet, 400% is a legitimate value for MS Office document
- // Without a fix, it will fail to set the size correctly
- const SdrPage *pPage = GetPage( 1, xDocShRef );
- SdrTextObj *pTxtObj = dynamic_cast<SdrTextObj *>( pPage->GetObj(0) );
- CPPUNIT_ASSERT_MESSAGE( "no text object", pTxtObj != nullptr);
- const EditTextObject& aEdit = pTxtObj->GetOutlinerParaObject()->GetTextObject();
- const SvxNumBulletItem *pNumFmt = aEdit.GetParaAttribs(0).GetItem(EE_PARA_NUMBULLET);
- CPPUNIT_ASSERT(pNumFmt);
- CPPUNIT_ASSERT_EQUAL(sal_uInt16(400), pNumFmt->GetNumRule().GetLevel(0).GetBulletRelSize());
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf126741()
-{
- sd::DrawDocShellRef xDocShRef = loadURL( m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf126741.pptx"), PPTX );
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- // dash dot dot line style import fix
- // The original fixed values are replaced with the percent values, because
- // with fix for tdf#127166 the MS Office preset styles are correctly detected.
- const SdrPage *pPage = GetPage( 1, xDocShRef );
- SdrObject *const pObj = pPage->GetObj(0);
- CPPUNIT_ASSERT(pObj);
-
- const XLineStyleItem& rStyleItem = dynamic_cast<const XLineStyleItem&>(
- pObj->GetMergedItem(XATTR_LINESTYLE));
- const XLineDashItem& rDashItem = dynamic_cast<const XLineDashItem&>(
- pObj->GetMergedItem(XATTR_LINEDASH));
-
- CPPUNIT_ASSERT_EQUAL(drawing::LineStyle_DASH, rStyleItem.GetValue());
- CPPUNIT_ASSERT_EQUAL(sal_uInt16(1), rDashItem.GetDashValue().GetDots());
- CPPUNIT_ASSERT_EQUAL(800.0, rDashItem.GetDashValue().GetDotLen());
- CPPUNIT_ASSERT_EQUAL(sal_uInt16(2), rDashItem.GetDashValue().GetDashes());
- CPPUNIT_ASSERT_EQUAL(100.0, rDashItem.GetDashValue().GetDashLen());
- CPPUNIT_ASSERT_EQUAL(300.0, rDashItem.GetDashValue().GetDistance());
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf99497_keepAppearanceOfCircleKind()
-{
- // Error was, that all CircleKind were exported to 'ellipse'.
- // Resulting pptx has to contain the customshapes of the corresponding kind
- // slide 1 ARC -> arc, slide 2 CUT -> chord, slide 3 SECTION -> pie
- // Adjustment values need to exist and their values need to correspond to the
- // original angles. Shape 'arc' needs to be unfilled.
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/odp/tdf99497_CircleKind.odp"), ODP);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- // slide 1 45° -> adj1 = 20493903, 270° -> adj2 = 5400000, <a:noFill/> exists
- xmlDocUniquePtr pXmlDocContent1 = parseExport(tempFile, "ppt/slides/slide1.xml");
- const OString sPathStart1("/p:sld/p:cSld/p:spTree/p:sp/p:spPr/a:prstGeom");
- assertXPath(pXmlDocContent1, sPathStart1 + "[@prst='arc']");
- const OString sPathAdj1(sPathStart1 + "/a:avLst/a:gd");
- assertXPath(pXmlDocContent1, sPathAdj1 + "[@name='adj1' and @fmla='val 20493903']");
- assertXPath(pXmlDocContent1, sPathAdj1 + "[@name='adj2' and @fmla='val 5400000']");
- assertXPath(pXmlDocContent1, "/p:sld/p:cSld/p:spTree/p:sp/p:spPr/a:noFill");
-
- // slide 2 270° -> adj1 = 5400000, 180° -> adj2 = 10800000
- xmlDocUniquePtr pXmlDocContent2 = parseExport(tempFile, "ppt/slides/slide2.xml");
- const OString sPathStart2("/p:sld/p:cSld/p:spTree/p:sp/p:spPr/a:prstGeom");
- assertXPath(pXmlDocContent2, sPathStart2 + "[@prst='chord']");
- const OString sPathAdj2(sPathStart2 + "/a:avLst/a:gd");
- assertXPath(pXmlDocContent2, sPathAdj2 + "[@name='adj1' and @fmla='val 5400000']");
- assertXPath(pXmlDocContent2, sPathAdj2 + "[@name='adj2' and @fmla='val 10800000']");
-
- // slide 3 120° -> adj1 = 12600000, 30° -> adj2 = 20946396
- xmlDocUniquePtr pXmlDocContent3 = parseExport(tempFile, "ppt/slides/slide3.xml");
- const OString sPathStart3("/p:sld/p:cSld/p:spTree/p:sp/p:spPr/a:prstGeom");
- assertXPath(pXmlDocContent3, sPathStart3 + "[@prst='pie']");
- const OString sPathAdj3(sPathStart3 + "/a:avLst/a:gd");
- assertXPath(pXmlDocContent3, sPathAdj3 + "[@name='adj1' and @fmla='val 12600000']");
- assertXPath(pXmlDocContent3, sPathAdj3 + "[@name='adj2' and @fmla='val 20946396']");
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf127372()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL( m_directories.getURLFromSrc(u"/sd/qa/unit/data/odp/tdf127372.odp"), ODP);
- xDocShRef = saveAndReload( xDocShRef.get(), PPTX );
- uno::Reference< beans::XPropertySet > xShape( getShapeFromPage( 0, 0, xDocShRef ) );
- awt::Gradient aTransparenceGradient;
- xShape->getPropertyValue("FillTransparenceGradient") >>= aTransparenceGradient;
- CPPUNIT_ASSERT_EQUAL(sal_Int32(0x000000), aTransparenceGradient.StartColor);
- CPPUNIT_ASSERT_EQUAL(sal_Int32(0x000000), aTransparenceGradient.EndColor);
-}
-
-void SdOOXMLExportTest2::testTdf127379()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL( m_directories.getURLFromSrc(u"/sd/qa/unit/data/odp/tdf127379.odp"), ODP);
- xDocShRef = saveAndReload( xDocShRef.get(), PPTX );
- uno::Reference< drawing::XDrawPagesSupplier > xDoc(
- xDocShRef->GetDoc()->getUnoModel(), uno::UNO_QUERY_THROW );
- CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xDoc->getDrawPages()->getCount() );
-
- uno::Reference< drawing::XDrawPage > xPage( getPage( 0, xDocShRef ) );
- uno::Reference< beans::XPropertySet > xPropSet( xPage, uno::UNO_QUERY );
-
- uno::Any aAny = xPropSet->getPropertyValue( "Background" );
- CPPUNIT_ASSERT_MESSAGE("Slide background is missing", aAny.hasValue());
- uno::Reference< beans::XPropertySet > aXBackgroundPropSet;
- aAny >>= aXBackgroundPropSet;
-
- drawing::FillStyle aFillStyle(drawing::FillStyle_NONE);
- aXBackgroundPropSet->getPropertyValue("FillStyle") >>= aFillStyle;
- CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, aFillStyle);
-
- awt::Gradient aGradient;
- CPPUNIT_ASSERT(aXBackgroundPropSet->getPropertyValue("FillGradient") >>= aGradient);
- CPPUNIT_ASSERT_EQUAL(sal_Int32(0xFF0000), aGradient.StartColor);
- CPPUNIT_ASSERT_EQUAL(sal_Int32(0x2A6099), aGradient.EndColor);
-}
-
-void SdOOXMLExportTest2::testTdf98603()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL( m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf98603.pptx"), PPTX);
- xDocShRef = saveAndReload( xDocShRef.get(), PPTX );
- uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0, xDocShRef));
- uno::Reference<text::XTextRange> const xParagraph(getParagraphFromShape(0, xShape));
- uno::Reference<text::XTextRange> xRun(getRunFromParagraph(0, xParagraph));
- uno::Reference< beans::XPropertySet> xPropSet(xRun, uno::UNO_QUERY_THROW);
- css::lang::Locale aLocale;
- xPropSet->getPropertyValue("CharLocaleComplex") >>= aLocale;
- CPPUNIT_ASSERT_EQUAL(OUString("he"), aLocale.Language);
- CPPUNIT_ASSERT_EQUAL(OUString("IL"), aLocale.Country);
-}
-
-void SdOOXMLExportTest2::testTdf128213()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL( m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf128213.pptx"), PPTX);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload( xDocShRef.get(), PPTX, &tempFile );
-
- xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
- assertXPathNoAttribute(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp/p:spPr/a:xfrm", "rot");
-}
-
-void SdOOXMLExportTest2::testTdf79082()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL( m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf79082.pptx"), PPTX);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload( xDocShRef.get(), PPTX, &tempFile );
-
- xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
- assertXPath(pXmlDocContent,
- "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p/a:pPr/a:tabLst/a:tab[1]",
- "pos",
- "360000");
- assertXPath(pXmlDocContent,
- "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p/a:pPr/a:tabLst/a:tab[1]",
- "algn",
- "l");
-
- assertXPath(pXmlDocContent,
- "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p/a:pPr/a:tabLst/a:tab[2]",
- "pos",
- "756000");
- assertXPath(pXmlDocContent,
- "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p/a:pPr/a:tabLst/a:tab[2]",
- "algn",
- "l");
-
- assertXPath(pXmlDocContent,
- "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p/a:pPr/a:tabLst/a:tab[3]",
- "pos",
- "1440000");
- assertXPath(pXmlDocContent,
- "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p/a:pPr/a:tabLst/a:tab[3]",
- "algn",
- "ctr");
-
- assertXPath(pXmlDocContent,
- "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p/a:pPr/a:tabLst/a:tab[4]",
- "pos",
- "1800000");
- assertXPath(pXmlDocContent,
- "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p/a:pPr/a:tabLst/a:tab[4]",
- "algn",
- "r");
-
- assertXPath(pXmlDocContent,
- "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p/a:pPr/a:tabLst/a:tab[5]",
- "pos",
- "3240000");
- assertXPath(pXmlDocContent,
- "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p/a:pPr/a:tabLst/a:tab[5]",
- "algn",
- "dec");
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testTdf129372()
-{
- //Without the fix in place, it would crash at import time
- ::sd::DrawDocShellRef xDocShRef = loadURL( m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf129372.pptx"), PPTX);
- xDocShRef = saveAndReload( xDocShRef.get(), PPTX );
- const SdrPage *pPage = GetPage( 1, xDocShRef.get() );
-
- const SdrObject* pObj = pPage->GetObj(0);
- CPPUNIT_ASSERT_MESSAGE( "no object", pObj != nullptr);
- CPPUNIT_ASSERT_EQUAL( OBJ_OLE2, pObj->GetObjIdentifier() );
-}
-
-void SdOOXMLExportTest2::testShapeGlowEffect()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL( m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/shape-glow-effect.pptx"), PPTX);
- xDocShRef = saveAndReload( xDocShRef.get(), PPTX );
- uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0, xDocShRef));
- sal_Int32 nRadius = -1;
- xShape->getPropertyValue("GlowEffectRadius") >>= nRadius;
- CPPUNIT_ASSERT_EQUAL(sal_Int32(388), nRadius); // 139700 EMU = 388.0556 mm/100
- Color nColor;
- xShape->getPropertyValue("GlowEffectColor") >>= nColor;
- CPPUNIT_ASSERT_EQUAL(Color(0xFFC000), nColor);
- sal_Int16 nTransparency;
- xShape->getPropertyValue("GlowEffectTransparency") >>= nTransparency;
- CPPUNIT_ASSERT_EQUAL(sal_Int16(60), nTransparency);
-}
-
-void SdOOXMLExportTest2::testTdf119087()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf119087.pptx"), PPTX);
- xDocShRef = saveAndReload( xDocShRef.get(), PPTX );
- // This would fail both on export validation, and reloading the saved pptx file.
-}
-
-void SdOOXMLExportTest2::testTdf131554()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf131554.pptx"), PPTX);
- xDocShRef = saveAndReload( xDocShRef.get(), PPTX );
- uno::Reference<drawing::XShape> xShape(getShapeFromPage(1, 0, xDocShRef), uno::UNO_QUERY);
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(5622), xShape->getPosition().X);
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(13251), xShape->getPosition().Y);
-}
-
-void SdOOXMLExportTest2::testTdf132282()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf132282.pptx"), PPTX);
- xDocShRef = saveAndReload( xDocShRef.get(), PPTX );
- uno::Reference<drawing::XShape> xShape(getShapeFromPage(0, 0, xDocShRef), uno::UNO_QUERY);
- // Without the fix in place, the position would be 0,0, height = 1 and width = 1
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1736), xShape->getPosition().X);
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(763), xShape->getPosition().Y);
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(30523), xShape->getSize().Width);
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2604), xShape->getSize().Height);
-}
-
-void SdOOXMLExportTest2::testTdf132201EffectOrder()
-{
- auto xDocShRef = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/effectOrder.pptx"),
- PPTX);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
- xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
- assertXPathChildren(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp[3]/p:spPr/a:effectLst", 2);
- // The relative order of effects is important: glow must be before shadow
- CPPUNIT_ASSERT_EQUAL(0, getXPathPosition(pXmlDocContent,
- "/p:sld/p:cSld/p:spTree/p:sp[3]/p:spPr/a:effectLst",
- "glow"));
- CPPUNIT_ASSERT_EQUAL(1, getXPathPosition(pXmlDocContent,
- "/p:sld/p:cSld/p:spTree/p:sp[3]/p:spPr/a:effectLst",
- "outerShdw"));
-
- xDocShRef->DoClose();
-}
-
-void SdOOXMLExportTest2::testShapeSoftEdgeEffect()
-{
- auto xDocShRef
- = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/shape-soft-edges.pptx"), PPTX);
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX);
- auto xShapeProps(getShapeFromPage(0, 0, xDocShRef));
- sal_Int32 nRadius = -1;
- xShapeProps->getPropertyValue("SoftEdgeRadius") >>= nRadius;
- CPPUNIT_ASSERT_EQUAL(sal_Int32(635), nRadius); // 18 pt
-}
-
-void SdOOXMLExportTest2::testShapeShadowBlurEffect()
-{
- auto xDocShRef
- = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/shape-blur-effect.pptx"), PPTX);
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX);
- uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0, xDocShRef));
- bool bHasShadow = false;
- xShape->getPropertyValue("Shadow") >>= bHasShadow;
- CPPUNIT_ASSERT(bHasShadow);
- sal_Int32 nRadius = -1;
- xShape->getPropertyValue("ShadowBlur") >>= nRadius;
- CPPUNIT_ASSERT_EQUAL(sal_Int32(388), nRadius); // 11 pt
-}
-
-void SdOOXMLExportTest2::testTdf119223()
-{
- auto xDocShRef
- = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf119223.odp"), ODP);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
-
- xDocShRef->DoClose();
-
- xmlDocUniquePtr pXmlDocRels = parseExport(tempFile, "ppt/slides/slide1.xml");
- assertXPath(pXmlDocRels,
- "//p:cNvPr[@name='SomeCustomShape']");
-
- assertXPath(pXmlDocRels,
- "//p:cNvPr[@name='SomePicture']");
-
- assertXPath(pXmlDocRels,
- "//p:cNvPr[@name='SomeFormula']");
-
- assertXPath(pXmlDocRels,
- "//p:cNvPr[@name='SomeLine']");
-
- assertXPath(pXmlDocRels,
- "//p:cNvPr[@name='SomeTextbox']");
-
- assertXPath(pXmlDocRels,
- "//p:cNvPr[@name='SomeTable']");
-
- assertXPath(pXmlDocRels,
- "//p:cNvPr[@name='SomeGroup']");
-}
-
-void SdOOXMLExportTest2::testTdf128213ShapeRot()
-{
- auto xDocShRef
- = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf128213-shaperot.pptx"), PPTX);
- utl::TempFile tempFile;
- xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
- xDocShRef->DoClose();
-
- xmlDocUniquePtr pXmlDocRels = parseExport(tempFile, "ppt/slides/slide1.xml");
-
- assertXPath(pXmlDocRels, "/p:sld/p:cSld/p:spTree/p:sp/p:txBody/a:bodyPr/a:scene3d");
- assertXPath(pXmlDocRels, "/p:sld/p:cSld/p:spTree/p:sp/p:txBody/a:bodyPr/a:scene3d/a:camera/a:rot", "rev", "5400000");
-}
-
-void SdOOXMLExportTest2::testTdf125560_textDeflate()
-{
- auto xDocShRef
- = loadURL( m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/ShapePlusImage.pptx"), PPTX );
- utl::TempFile tempFile;
-
- // This problem did not affect the pptx export, only the ODP so assert that
- xDocShRef = saveAndReload(xDocShRef.get(), ODP, &tempFile);
- xDocShRef->DoClose();
-
- xmlDocUniquePtr pXmlDocRels = parseExport(tempFile, "content.xml");
- assertXPath(pXmlDocRels, "/office:document-content/office:body/office:presentation/draw:page/draw:custom-shape/draw:enhanced-geometry", "type", "mso-spt161");
-}
-
-void SdOOXMLExportTest2::testTdf125560_textInflateTop()
-{
- auto xDocShRef
- = loadURL( m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/ShapeTextInflateTop.pptx"), PPTX );
- utl::TempFile tempFile;
-
- // This problem did not affect the pptx export, only the ODP so assert that
- xDocShRef = saveAndReload(xDocShRef.get(), ODP, &tempFile);
- xDocShRef->DoClose();
-
- xmlDocUniquePtr pXmlDocRels = parseExport(tempFile, "content.xml");
- assertXPath(pXmlDocRels, "/office:document-content/office:body/office:presentation/draw:page/draw:custom-shape/draw:enhanced-geometry", "type", "mso-spt164");
-}
-
-void SdOOXMLExportTest2::testTdf96061_textHighlight()
-{
- ::sd::DrawDocShellRef xDocShRef = loadURL( m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf96061.pptx"), PPTX);
-
- uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0, xDocShRef));
- uno::Reference<text::XTextRange> const xParagraph1(getParagraphFromShape(0, xShape));
- uno::Reference<text::XTextRange> xRun1(getRunFromParagraph(0, xParagraph1));
- uno::Reference< beans::XPropertySet> xPropSet1(xRun1, uno::UNO_QUERY_THROW);
- sal_Int32 aColor;
- xPropSet1->getPropertyValue("CharBackColor") >>= aColor;
- CPPUNIT_ASSERT_EQUAL(sal_Int32(16776960), aColor);
-
- uno::Reference<text::XTextRange> const xParagraph2(getParagraphFromShape(1, xShape));
- uno::Reference<text::XTextRange> xRun2(getRunFromParagraph(0, xParagraph2));
- uno::Reference< beans::XPropertySet> xPropSet2(xRun2, uno::UNO_QUERY_THROW);
- xPropSet2->getPropertyValue("CharBackColor") >>= aColor;
- CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), aColor);
-
- xDocShRef = saveAndReload( xDocShRef.get(), PPTX );
-
- uno::Reference<beans::XPropertySet> xShape2(getShapeFromPage(0, 0, xDocShRef));
- uno::Reference<text::XTextRange> const xParagraph3(getParagraphFromShape(0, xShape2));
- uno::Reference<text::XTextRange> xRun3(getRunFromParagraph(0, xParagraph3));
- uno::Reference< beans::XPropertySet> xPropSet3(xRun3, uno::UNO_QUERY_THROW);
- xPropSet3->getPropertyValue("CharBackColor") >>= aColor;
- CPPUNIT_ASSERT_EQUAL(sal_Int32(16776960), aColor);
-
- uno::Reference<text::XTextRange> const xParagraph4(getParagraphFromShape(1, xShape2));
- uno::Reference<text::XTextRange> xRun4(getRunFromParagraph(0, xParagraph4));
- uno::Reference< beans::XPropertySet> xPropSet4(xRun4, uno::UNO_QUERY_THROW);
- xPropSet4->getPropertyValue("CharBackColor") >>= aColor;
- CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), aColor);
-}
void SdOOXMLExportTest2::testTextColumns_tdf140852()
{
diff --git a/sd/qa/unit/export-tests-ooxml3.cxx b/sd/qa/unit/export-tests-ooxml3.cxx
new file mode 100644
index 000000000000..fb2db18e8d22
--- /dev/null
+++ b/sd/qa/unit/export-tests-ooxml3.cxx
@@ -0,0 +1,1730 @@
+
+/* -*- 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 <officecfg/Office/Common.hxx>
+#include "sdmodeltestbase.hxx"
+#include <comphelper/propertysequence.hxx>
+#include <comphelper/sequence.hxx>
+#include <editeng/eeitem.hxx>
+#include <editeng/editobj.hxx>
+#include <editeng/outlobj.hxx>
+#include <editeng/numitem.hxx>
+#include <editeng/unoprnms.hxx>
+
+#include <svx/svdotext.hxx>
+#include <svx/svdomedia.hxx>
+#include <svx/svdotable.hxx>
+#include <svx/xlineit0.hxx>
+#include <svx/xlndsit.hxx>
+#include <rtl/ustring.hxx>
+
+#include <com/sun/star/drawing/XDrawPage.hpp>
+#include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
+#include <com/sun/star/animations/TransitionType.hpp>
+#include <com/sun/star/animations/TransitionSubType.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/awt/Gradient.hpp>
+#include <com/sun/star/awt/Rectangle.hpp>
+#include <com/sun/star/drawing/EnhancedCustomShapeParameterPair.hpp>
+#include <com/sun/star/drawing/EnhancedCustomShapeAdjustmentValue.hpp>
+#include <com/sun/star/drawing/FillStyle.hpp>
+#include <com/sun/star/style/LineSpacing.hpp>
+#include <com/sun/star/style/LineSpacingMode.hpp>
+#include <com/sun/star/frame/XLoadable.hpp>
+
+#include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
+
+#include <sdpage.hxx>
+#include <cfloat>
+#include <cstdlib>
+
+#include <rtl/character.hxx>
+
+class SdOOXMLExportTest3 : public SdModelTestBaseXML
+{
+public:
+ void testTdf114848();
+ void testTdf68759();
+ void testTdf127901();
+ void testTdf48735();
+ void testTdf90626();
+ void testTdf107608();
+ void testTdf111786();
+ void testFontScale();
+ void testShapeAutofitPPTX();
+ void testLegacyShapeAutofitPPTX();
+ void testTdf115394();
+ void testTdf115394Zero();
+ void testTdf115005();
+ int testTdf115005_FallBack_Images(bool bAddReplacementImages);
+ void testTdf115005_FallBack_Images_On();
+ void testTdf115005_FallBack_Images_Off();
+ void testTdf118806();
+ void testTdf130058();
+ void testTdf111789();
+ void testTdf100348_convert_Fontwork2TextWarp();
+ void testTdf1225573_FontWorkScaleX();
+ void testTdf99497_keepAppearanceOfCircleKind();
+ /// SmartArt animated elements
+ void testTdf104792();
+ void testTdf90627();
+ void testTdf104786();
+ void testTdf118783();
+ void testTdf104789();
+ void testOpenDocumentAsReadOnly();
+ void testTdf118835();
+ void testTdf118768();
+ void testTdf118836();
+ void testTdf116350TextEffects();
+ void testTdf128096();
+ void testTdf120573();
+ void testTdf119118();
+ void testTdf99213();
+ void testPotxExport();
+ void testTdf44223();
+ void testSmartArtPreserve();
+ void testTdf125346();
+ void testTdf125346_2();
+ void testTdf125360();
+ void testTdf125360_1();
+ void testTdf125360_2();
+ void testTdf125551();
+ void testTdf136830();
+ void testTdf126234();
+ void testTdf126741();
+ void testTdf127372();
+ void testTdf127379();
+ void testTdf98603();
+ void testTdf79082();
+ void testTdf128213();
+ void testTdf129372();
+ void testShapeGlowEffect();
+ void testTdf119087();
+ void testTdf131554();
+ void testTdf132282();
+ void testTdf132201EffectOrder();
+ void testShapeSoftEdgeEffect();
+ void testShapeShadowBlurEffect();
+ void testTdf119223();
+ void testTdf128213ShapeRot();
+ void testTdf125560_textDeflate();
+ void testTdf125560_textInflateTop();
+ void testTdf96061_textHighlight();
+
+ CPPUNIT_TEST_SUITE(SdOOXMLExportTest3);
+
+ CPPUNIT_TEST(testTdf114848);
+ CPPUNIT_TEST(testTdf68759);
+ CPPUNIT_TEST(testTdf127901);
+ CPPUNIT_TEST(testTdf48735);
+ CPPUNIT_TEST(testTdf90626);
+ CPPUNIT_TEST(testTdf107608);
+ CPPUNIT_TEST(testTdf111786);
+ CPPUNIT_TEST(testFontScale);
+ CPPUNIT_TEST(testShapeAutofitPPTX);
+ CPPUNIT_TEST(testLegacyShapeAutofitPPTX);
+ CPPUNIT_TEST(testTdf115394);
+ CPPUNIT_TEST(testTdf115394Zero);
+ CPPUNIT_TEST(testTdf115005);
+ CPPUNIT_TEST(testTdf115005_FallBack_Images_On);
+ CPPUNIT_TEST(testTdf115005_FallBack_Images_Off);
+ CPPUNIT_TEST(testTdf118806);
+ CPPUNIT_TEST(testTdf130058);
+ CPPUNIT_TEST(testTdf111789);
+ CPPUNIT_TEST(testTdf100348_convert_Fontwork2TextWarp);
+ CPPUNIT_TEST(testTdf1225573_FontWorkScaleX);
+ CPPUNIT_TEST(testTdf99497_keepAppearanceOfCircleKind);
+ CPPUNIT_TEST(testTdf104792);
+ CPPUNIT_TEST(testTdf90627);
+ CPPUNIT_TEST(testTdf104786);
+ CPPUNIT_TEST(testTdf118783);
+ CPPUNIT_TEST(testTdf104789);
+ CPPUNIT_TEST(testOpenDocumentAsReadOnly);
+ CPPUNIT_TEST(testTdf118835);
+ CPPUNIT_TEST(testTdf118768);
+ CPPUNIT_TEST(testTdf118836);
+ CPPUNIT_TEST(testTdf116350TextEffects);
+ CPPUNIT_TEST(testTdf128096);
+ CPPUNIT_TEST(testTdf120573);
+ CPPUNIT_TEST(testTdf119118);
+ CPPUNIT_TEST(testTdf99213);
+ CPPUNIT_TEST(testPotxExport);
+ CPPUNIT_TEST(testTdf44223);
+ CPPUNIT_TEST(testSmartArtPreserve);
+ CPPUNIT_TEST(testTdf125346);
+ CPPUNIT_TEST(testTdf125346_2);
+ CPPUNIT_TEST(testTdf125360);
+ CPPUNIT_TEST(testTdf125360_1);
+ CPPUNIT_TEST(testTdf125360_2);
+ CPPUNIT_TEST(testTdf125551);
+ CPPUNIT_TEST(testTdf136830);
+ CPPUNIT_TEST(testTdf126234);
+ CPPUNIT_TEST(testTdf126741);
+ CPPUNIT_TEST(testTdf127372);
+ CPPUNIT_TEST(testTdf127379);
+ CPPUNIT_TEST(testTdf98603);
+ CPPUNIT_TEST(testTdf79082);
+ CPPUNIT_TEST(testTdf128213);
+ CPPUNIT_TEST(testTdf129372);
+ CPPUNIT_TEST(testShapeGlowEffect);
+ CPPUNIT_TEST(testTdf119087);
+ CPPUNIT_TEST(testTdf131554);
+ CPPUNIT_TEST(testTdf132282);
+ CPPUNIT_TEST(testTdf132201EffectOrder);
+ CPPUNIT_TEST(testShapeSoftEdgeEffect);
+ CPPUNIT_TEST(testShapeShadowBlurEffect);
+ CPPUNIT_TEST(testTdf119223);
+ CPPUNIT_TEST(testTdf128213ShapeRot);
+ CPPUNIT_TEST(testTdf125560_textDeflate);
+ CPPUNIT_TEST(testTdf125560_textInflateTop);
+ CPPUNIT_TEST(testTdf96061_textHighlight);
+ CPPUNIT_TEST_SUITE_END();
+
+ virtual void registerNamespaces(xmlXPathContextPtr& pXmlXPathCtx) override
+ {
+ XmlTestTools::registerODFNamespaces(pXmlXPathCtx);
+ XmlTestTools::registerOOXMLNamespaces(pXmlXPathCtx);
+ }
+};
+
+void SdOOXMLExportTest3::testTdf114848()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf114848.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+ xDocShRef->DoClose();
+
+ xmlDocUniquePtr pXmlDocTheme1 = parseExport(tempFile, "ppt/theme/theme1.xml");
+ assertXPath(pXmlDocTheme1, "/a:theme/a:themeElements/a:clrScheme/a:dk2/a:srgbClr", "val",
+ "1f497d");
+ xmlDocUniquePtr pXmlDocTheme2 = parseExport(tempFile, "ppt/theme/theme2.xml");
+ assertXPath(pXmlDocTheme2, "/a:theme/a:themeElements/a:clrScheme/a:dk2/a:srgbClr", "val",
+ "1f497d");
+}
+
+void SdOOXMLExportTest3::testTdf68759()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf68759.odp"), ODP);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+ xDocShRef->DoClose();
+
+ xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+ assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:pic[1]/p:spPr/a:xfrm/a:off", "x",
+ "1687320");
+ assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:pic[1]/p:spPr/a:xfrm/a:off", "y",
+ "1615320");
+ assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:pic[2]/p:spPr/a:xfrm", "flipH", "1");
+ assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:pic[2]/p:spPr/a:xfrm", "rot", "9600000");
+ assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:pic[2]/p:spPr/a:xfrm/a:off", "x",
+ "3847320");
+ assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:pic[2]/p:spPr/a:xfrm/a:off", "y",
+ "1614600");
+ assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:pic[3]/p:spPr/a:xfrm", "flipH", "1");
+ assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:pic[3]/p:spPr/a:xfrm/a:off", "x",
+ "5934960");
+ assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:pic[3]/p:spPr/a:xfrm/a:off", "y",
+ "1615320");
+}
+
+void SdOOXMLExportTest3::testTdf127901()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf127901.odp"), ODP);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+ xDocShRef->DoClose();
+
+ xmlDocUniquePtr pXmlDocContent1 = parseExport(tempFile, "ppt/slides/slide1.xml");
+ assertXPath(pXmlDocContent1, "/p:sld/p:cSld/p:spTree/p:pic/p:blipFill/a:blip/a:lum", "bright",
+ "70000");
+ assertXPath(pXmlDocContent1, "/p:sld/p:cSld/p:spTree/p:pic/p:blipFill/a:blip/a:lum", "contrast",
+ "-70000");
+
+ xmlDocUniquePtr pXmlDocContent2 = parseExport(tempFile, "ppt/slides/slide2.xml");
+ assertXPath(pXmlDocContent2, "/p:sld/p:cSld/p:spTree/p:pic/p:blipFill/a:blip/a:grayscl", 1);
+
+ xmlDocUniquePtr pXmlDocContent3 = parseExport(tempFile, "ppt/slides/slide3.xml");
+ assertXPath(pXmlDocContent3, "/p:sld/p:cSld/p:spTree/p:pic/p:blipFill/a:blip/a:biLevel",
+ "thresh", "50000");
+}
+
+void SdOOXMLExportTest3::testTdf48735()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf48735.odp"), ODP);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+ xDocShRef->DoClose();
+
+ xmlDocUniquePtr pXmlDocContent1 = parseExport(tempFile, "ppt/slides/slide1.xml");
+ assertXPath(pXmlDocContent1, "/p:sld/p:cSld/p:spTree/p:pic/p:blipFill/a:srcRect", "b", "23627");
+ assertXPath(pXmlDocContent1, "/p:sld/p:cSld/p:spTree/p:pic/p:blipFill/a:srcRect", "l", "23627");
+ assertXPath(pXmlDocContent1, "/p:sld/p:cSld/p:spTree/p:pic/p:blipFill/a:srcRect", "r", "23627");
+ assertXPath(pXmlDocContent1, "/p:sld/p:cSld/p:spTree/p:pic/p:blipFill/a:srcRect", "t", "18842");
+}
+
+void SdOOXMLExportTest3::testTdf90626()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf90626.odp"), ODP);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+ xDocShRef->DoClose();
+
+ xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+ assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p[1]/a:pPr/a:buSzPct",
+ "val", "100000");
+ assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p[2]/a:pPr/a:buSzPct",
+ "val", "150142");
+ assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p[3]/a:pPr/a:buSzPct",
+ "val", "100000");
+ assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p[4]/a:pPr/a:buSzPct",
+ "val", "150142");
+}
+
+void SdOOXMLExportTest3::testTdf107608()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf107608.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0, xDocShRef));
+ uno::Reference<beans::XPropertySet> xPropSet(xShape, uno::UNO_SET_THROW);
+
+ drawing::FillStyle aFillStyle(drawing::FillStyle_NONE);
+ xPropSet->getPropertyValue("FillStyle") >>= aFillStyle;
+ CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, aFillStyle);
+
+ bool bBackgroundFill = false;
+ xPropSet->getPropertyValue("FillBackground") >>= bBackgroundFill;
+ CPPUNIT_ASSERT(bBackgroundFill);
+
+ Color nBackgroundColor;
+ xPropSet->getPropertyValue("FillColor") >>= nBackgroundColor;
+ CPPUNIT_ASSERT_EQUAL(Color(0x92D050), nBackgroundColor);
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf111786()
+{
+ // Export line transparency with the color
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf111786.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0, xDocShRef));
+ uno::Reference<beans::XPropertySet> xPropSet(xShape, uno::UNO_SET_THROW);
+
+ Color nLineColor;
+ xPropSet->getPropertyValue("LineColor") >>= nLineColor;
+ CPPUNIT_ASSERT_EQUAL(Color(0x3465A4), nLineColor);
+
+ sal_Int16 nTransparency;
+ xPropSet->getPropertyValue("LineTransparence") >>= nTransparency;
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int16>(33), nTransparency);
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testFontScale()
+{
+ sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/font-scale.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+ xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+
+ // Rounding errors possible, approximate value (+/- 1%)
+ OUString sScale = getXPath(
+ pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp/p:txBody/a:bodyPr/a:normAutofit", "fontScale");
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(sal_Int32(76000), sScale.toInt32(), 1000);
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testShapeAutofitPPTX()
+{
+ sd::DrawDocShellRef xDocShRef = loadURL(
+ m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/testShapeAutofit.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+ xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+ CPPUNIT_ASSERT(pXmlDocContent);
+
+ // TextAutoGrowHeight --> "Resize shape to fit text" --> true
+ assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp[1]/p:txBody/a:bodyPr/a:spAutoFit", 1);
+ // TextAutoGrowHeight --> "Resize shape to fit text" --> false
+ assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:bodyPr/a:noAutofit", 1);
+}
+
+void SdOOXMLExportTest3::testLegacyShapeAutofitPPTX()
+{
+ sd::DrawDocShellRef xDocShRef = loadURL(
+ m_directories.getURLFromSrc(u"/sd/qa/unit/data/odp/testLegacyShapeAutofit.odp"), ODP);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+ xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+ CPPUNIT_ASSERT(pXmlDocContent);
+
+ // Text in a legacy rectangle
+ assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp[1]/p:txBody/a:bodyPr/a:noAutofit", 1);
+ // Text in (closed) Polygon
+ assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:bodyPr/a:noAutofit", 1);
+ // Text in a legacy ellipse
+ assertXPath(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp[3]/p:txBody/a:bodyPr/a:noAutofit", 1);
+}
+
+void SdOOXMLExportTest3::testTdf115394()
+{
+ sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf115394.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+ double fTransitionDuration;
+
+ // Slow in MS formats
+ SdPage* pPage1 = xDocShRef->GetDoc()->GetSdPage(0, PageKind::Standard);
+ fTransitionDuration = pPage1->getTransitionDuration();
+ CPPUNIT_ASSERT_EQUAL(1.0, fTransitionDuration);
+
+ // Medium in MS formats
+ SdPage* pPage2 = xDocShRef->GetDoc()->GetSdPage(1, PageKind::Standard);
+ fTransitionDuration = pPage2->getTransitionDuration();
+ CPPUNIT_ASSERT_EQUAL(0.75, fTransitionDuration);
+
+ // Fast in MS formats
+ SdPage* pPage3 = xDocShRef->GetDoc()->GetSdPage(2, PageKind::Standard);
+ fTransitionDuration = pPage3->getTransitionDuration();
+ CPPUNIT_ASSERT_EQUAL(0.5, fTransitionDuration);
+
+ // Custom values
+ SdPage* pPage4 = xDocShRef->GetDoc()->GetSdPage(3, PageKind::Standard);
+ fTransitionDuration = pPage4->getTransitionDuration();
+ CPPUNIT_ASSERT_EQUAL(0.25, fTransitionDuration);
+
+ SdPage* pPage5 = xDocShRef->GetDoc()->GetSdPage(4, PageKind::Standard);
+ fTransitionDuration = pPage5->getTransitionDuration();
+ CPPUNIT_ASSERT_EQUAL(4.25, fTransitionDuration);
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf115394Zero()
+{
+ sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf115394-zero.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+ double fTransitionDuration;
+
+ SdPage* pPage = xDocShRef->GetDoc()->GetSdPage(0, PageKind::Standard);
+ fTransitionDuration = pPage->getTransitionDuration();
+ CPPUNIT_ASSERT_EQUAL(0.01, fTransitionDuration);
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf115005()
+{
+ sd::DrawDocShellRef xDocShRefOriginal
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf115005.odp"), ODP);
+ utl::TempFile tempFile;
+ sd::DrawDocShellRef xDocShRefResaved = saveAndReload(xDocShRefOriginal.get(), ODP, &tempFile);
+
+ // additional checks of the output file
+ uno::Reference<packages::zip::XZipFileAccess2> xNameAccess
+ = packages::zip::ZipFileAccess::createWithURL(comphelper::getComponentContext(m_xSFactory),
+ tempFile.GetURL());
+
+ // check that the document contains original vector images
+ const uno::Sequence<OUString> names = xNameAccess->getElementNames();
+ int nSVMFiles = 0;
+ for (OUString const& s : names)
+ {
+ if (s.endsWith(".svm"))
+ nSVMFiles++;
+ }
+ CPPUNIT_ASSERT_EQUAL(3, nSVMFiles);
+}
+
+int SdOOXMLExportTest3::testTdf115005_FallBack_Images(bool bAddReplacementImages)
+{
+ sd::DrawDocShellRef xDocShRefOriginal = loadURL(
+ m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf115005_no_fallback_images.odp"), ODP);
+
+ // check if fallback images were not created if AddReplacementImages=true/false
+ // set AddReplacementImages
+ {
+ std::shared_ptr<comphelper::ConfigurationChanges> batch(
+ comphelper::ConfigurationChanges::create());
+ if (!officecfg::Office::Common::Save::Graphic::AddReplacementImages::isReadOnly())
+ officecfg::Office::Common::Save::Graphic::AddReplacementImages::set(
+ bAddReplacementImages, batch);
+ batch->commit();
+ }
+
+ // save the file with already set options
+ utl::TempFile tempFile;
+ sd::DrawDocShellRef xDocShRefResaved = saveAndReload(xDocShRefOriginal.get(), ODP, &tempFile);
+
+ // additional checks of the output file
+ uno::Reference<packages::zip::XZipFileAccess2> xNameAccess
+ = packages::zip::ZipFileAccess::createWithURL(comphelper::getComponentContext(m_xSFactory),
+ tempFile.GetURL());
+
+ // check that the document contains original vector images
+ const uno::Sequence<OUString> names = xNameAccess->getElementNames();
+ int nSVMFiles = 0;
+ int nPNGFiles = 0;
+ for (OUString const& n : names)
+ {
+ if (n.endsWith(".svm"))
+ nSVMFiles++;
+ if (n.endsWith(".png"))
+ nPNGFiles++;
+ }
+
+ // check results
+ CPPUNIT_ASSERT_EQUAL(1, nSVMFiles);
+ return nPNGFiles;
+}
+
+void SdOOXMLExportTest3::testTdf115005_FallBack_Images_On()
+{
+ const int nPNGFiles = testTdf115005_FallBack_Images(true);
+ CPPUNIT_ASSERT_EQUAL(1, nPNGFiles);
+}
+
+void SdOOXMLExportTest3::testTdf115005_FallBack_Images_Off()
+{
+ const int nPNGFiles = testTdf115005_FallBack_Images(false);
+ CPPUNIT_ASSERT_EQUAL(0, nPNGFiles);
+}
+
+void SdOOXMLExportTest3::testTdf118806()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf118806.odp"), ODP);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+ assertXPath(pXmlDocContent, "//p:animMotion", "origin", "layout");
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf130058()
+{
+ sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf130058.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0, xDocShRef));
+ bool bHasShadow = false;
+ xShape->getPropertyValue("Shadow") >>= bHasShadow;
+ CPPUNIT_ASSERT(bHasShadow);
+ double fShadowDist = 0.0;
+ xShape->getPropertyValue("ShadowXDistance") >>= fShadowDist;
+ CPPUNIT_ASSERT_EQUAL(static_cast<double>(0), fShadowDist);
+ xShape->getPropertyValue("ShadowYDistance") >>= fShadowDist;
+ CPPUNIT_ASSERT_EQUAL(static_cast<double>(141), fShadowDist);
+ Color nColor;
+ xShape->getPropertyValue("ShadowColor") >>= nColor;
+ CPPUNIT_ASSERT_EQUAL(COL_BLACK, nColor);
+ sal_Int32 nTransparency = 0;
+ xShape->getPropertyValue("ShadowTransparence") >>= nTransparency;
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(57), nTransparency);
+ double fShadowSizeX = 0.0;
+ xShape->getPropertyValue("ShadowSizeX") >>= fShadowSizeX;
+ CPPUNIT_ASSERT_EQUAL(static_cast<double>(1000), fShadowSizeX);
+ double fShadowSizeY = 0.0;
+ xShape->getPropertyValue("ShadowSizeY") >>= fShadowSizeY;
+ CPPUNIT_ASSERT_EQUAL(static_cast<double>(1000), fShadowSizeY);
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf111789()
+{
+ // Shadow properties were not exported for text shapes.
+ sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf111789.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ // First text shape has some shadow
+ {
+ uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0, xDocShRef));
+ bool bHasShadow = false;
+ xShape->getPropertyValue("Shadow") >>= bHasShadow;
+ CPPUNIT_ASSERT(bHasShadow);
+ double fShadowDist = 0.0;
+ xShape->getPropertyValue("ShadowXDistance") >>= fShadowDist;
+ CPPUNIT_ASSERT_EQUAL(static_cast<double>(273), fShadowDist);
+ xShape->getPropertyValue("ShadowYDistance") >>= fShadowDist;
+ CPPUNIT_ASSERT_EQUAL(static_cast<double>(273), fShadowDist);
+ Color nColor;
+ xShape->getPropertyValue("ShadowColor") >>= nColor;
+ CPPUNIT_ASSERT_EQUAL(Color(0xFF0000), nColor);
+ sal_Int32 nTransparency = 0;
+ xShape->getPropertyValue("ShadowTransparence") >>= nTransparency;
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(7), nTransparency);
+ double fShadowSizeX = 0.0;
+ xShape->getPropertyValue("ShadowSizeX") >>= fShadowSizeX;
+ CPPUNIT_ASSERT_EQUAL(static_cast<double>(100000), fShadowSizeX);
+ double fShadowSizeY = 0.0;
+ xShape->getPropertyValue("ShadowSizeY") >>= fShadowSizeY;
+ CPPUNIT_ASSERT_EQUAL(static_cast<double>(100000), fShadowSizeY);
+ }
+
+ // Second text shape has no shadow
+ {
+ uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(1, 0, xDocShRef));
+ bool bHasShadow = false;
+ xShape->getPropertyValue("Shadow") >>= bHasShadow;
+ CPPUNIT_ASSERT(!bHasShadow);
+ }
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf100348_convert_Fontwork2TextWarp()
+{
+ ::sd::DrawDocShellRef xDocShRef = loadURL(
+ m_directories.getURLFromSrc(u"/sd/qa/unit/data/odp/tdf100348_Fontwork2TextWarp.odp"), ODP);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ // Resulting pptx has to contain the TextWarp shape
+ xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+ const OString sPathStart("/p:sld/p:cSld/p:spTree/p:sp[1]/p:txBody/a:bodyPr/a:prstTxWarp");
+ assertXPath(pXmlDocContent, sPathStart + "[@prst='textWave1']");
+ const OString sPathAdj(sPathStart + "/a:avLst/a:gd");
+ assertXPath(pXmlDocContent, sPathAdj + "[@name='adj1' and @fmla='val 18750']");
+ assertXPath(pXmlDocContent, sPathAdj + "[@name='adj2' and @fmla='val -7500']");
+
+ // Reloading has to get the Fontwork shape back
+ // TextPath makes a custom shape to a Fontwork shape, so must exist
+ uno::Reference<beans::XPropertySet> xShapeWavePropSet(getShapeFromPage(0, 0, xDocShRef));
+ auto aGeomPropSeq = xShapeWavePropSet->getPropertyValue("CustomShapeGeometry")
+ .get<uno::Sequence<beans::PropertyValue>>();
+ auto aGeomPropVec
+ = comphelper::sequenceToContainer<std::vector<beans::PropertyValue>>(aGeomPropSeq);
+ OUString sName = "TextPath";
+ auto aIterator = std::find_if(
+ aGeomPropVec.begin(), aGeomPropVec.end(),
+ [sName](const beans::PropertyValue& rValue) { return rValue.Name == sName; });
+ CPPUNIT_ASSERT_MESSAGE("No TextPath", aIterator != aGeomPropVec.end());
+
+ // Type has to be same as in original document on roundtrip.
+ sName = "Type";
+ auto aIterator2 = std::find_if(
+ aGeomPropVec.begin(), aGeomPropVec.end(),
+ [sName](const beans::PropertyValue& rValue) { return rValue.Name == sName; });
+ CPPUNIT_ASSERT_MESSAGE("No Type", aIterator2 != aGeomPropVec.end());
+ OUString sOwnName;
+ aIterator2->Value >>= sOwnName;
+ CPPUNIT_ASSERT_EQUAL(OUString("fontwork-wave"), sOwnName);
+
+ // Adjustmentvalues need to be the same.
+ sName = "AdjustmentValues";
+ auto aIterator3 = std::find_if(
+ aGeomPropVec.begin(), aGeomPropVec.end(),
+ [sName](const beans::PropertyValue& rValue) { return rValue.Name == sName; });
+ CPPUNIT_ASSERT_MESSAGE("No AdjustmentValues", aIterator3 != aGeomPropVec.end());
+ uno::Sequence<drawing::EnhancedCustomShapeAdjustmentValue> aAdjValueSeq;
+ aIterator3->Value >>= aAdjValueSeq;
+ double fAdj1;
+ aAdjValueSeq[0].Value >>= fAdj1;
+ double fAdj2;
+ aAdjValueSeq[1].Value >>= fAdj2;
+ CPPUNIT_ASSERT_EQUAL(4050.0, fAdj1); // odp values, not pptx values
+ CPPUNIT_ASSERT_EQUAL(9180.0, fAdj2);
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf1225573_FontWorkScaleX()
+{
+ ::sd::DrawDocShellRef xDocShRef = loadURL(
+ m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf125573_FontWorkScaleX.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ // Error was, that attribute 'fromWordArt' was ignored
+ // ensure, resulting pptx has fromWordArt="1" on textArchDown shape
+ xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+ assertXPath(pXmlDocContent,
+ "/p:sld/p:cSld/p:spTree/p:sp[1]/p:txBody/a:bodyPr[@fromWordArt='1']");
+
+ // Error was, that text in legacy shapes of category "Follow Path" was not scaled to the path.
+ uno::Reference<beans::XPropertySet> xShapeArchProps(getShapeFromPage(0, 0, xDocShRef));
+ awt::Rectangle aBoundRectArch;
+ xShapeArchProps->getPropertyValue(UNO_NAME_MISC_OBJ_BOUNDRECT) >>= aBoundRectArch;
+ // difference should be zero, but allow some range for stroke thickness
+ CPPUNIT_ASSERT_LESS(sal_Int32(50), std::abs(aBoundRectArch.Width - 13081));
+
+ // Error was, that text in shapes of category "Warp" was not scaled to the path.
+ uno::Reference<beans::XPropertySet> xShapeWaveProps(getShapeFromPage(0, 1, xDocShRef));
+ awt::Rectangle aBoundRectWave;
+ xShapeWaveProps->getPropertyValue(UNO_NAME_MISC_OBJ_BOUNDRECT) >>= aBoundRectWave;
+ // difference should be zero, but allow some range for stroke thickness
+ CPPUNIT_ASSERT_LESS(sal_Int32(50), std::abs(aBoundRectWave.Width - 11514));
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf99497_keepAppearanceOfCircleKind()
+{
+ // Error was, that all CircleKind were exported to 'ellipse'.
+ // Resulting pptx has to contain the customshapes of the corresponding kind
+ // slide 1 ARC -> arc, slide 2 CUT -> chord, slide 3 SECTION -> pie
+ // Adjustment values need to exist and their values need to correspond to the
+ // original angles. Shape 'arc' needs to be unfilled.
+ ::sd::DrawDocShellRef xDocShRef = loadURL(
+ m_directories.getURLFromSrc(u"/sd/qa/unit/data/odp/tdf99497_CircleKind.odp"), ODP);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ // slide 1 45° -> adj1 = 20493903, 270° -> adj2 = 5400000, <a:noFill/> exists
+ xmlDocUniquePtr pXmlDocContent1 = parseExport(tempFile, "ppt/slides/slide1.xml");
+ const OString sPathStart1("/p:sld/p:cSld/p:spTree/p:sp/p:spPr/a:prstGeom");
+ assertXPath(pXmlDocContent1, sPathStart1 + "[@prst='arc']");
+ const OString sPathAdj1(sPathStart1 + "/a:avLst/a:gd");
+ assertXPath(pXmlDocContent1, sPathAdj1 + "[@name='adj1' and @fmla='val 20493903']");
+ assertXPath(pXmlDocContent1, sPathAdj1 + "[@name='adj2' and @fmla='val 5400000']");
+ assertXPath(pXmlDocContent1, "/p:sld/p:cSld/p:spTree/p:sp/p:spPr/a:noFill");
+
+ // slide 2 270° -> adj1 = 5400000, 180° -> adj2 = 10800000
+ xmlDocUniquePtr pXmlDocContent2 = parseExport(tempFile, "ppt/slides/slide2.xml");
+ const OString sPathStart2("/p:sld/p:cSld/p:spTree/p:sp/p:spPr/a:prstGeom");
+ assertXPath(pXmlDocContent2, sPathStart2 + "[@prst='chord']");
+ const OString sPathAdj2(sPathStart2 + "/a:avLst/a:gd");
+ assertXPath(pXmlDocContent2, sPathAdj2 + "[@name='adj1' and @fmla='val 5400000']");
+ assertXPath(pXmlDocContent2, sPathAdj2 + "[@name='adj2' and @fmla='val 10800000']");
+
+ // slide 3 120° -> adj1 = 12600000, 30° -> adj2 = 20946396
+ xmlDocUniquePtr pXmlDocContent3 = parseExport(tempFile, "ppt/slides/slide3.xml");
+ const OString sPathStart3("/p:sld/p:cSld/p:spTree/p:sp/p:spPr/a:prstGeom");
+ assertXPath(pXmlDocContent3, sPathStart3 + "[@prst='pie']");
+ const OString sPathAdj3(sPathStart3 + "/a:avLst/a:gd");
+ assertXPath(pXmlDocContent3, sPathAdj3 + "[@name='adj1' and @fmla='val 12600000']");
+ assertXPath(pXmlDocContent3, sPathAdj3 + "[@name='adj2' and @fmla='val 20946396']");
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf104792()
+{
+ ::sd::DrawDocShellRef xDocShRef = loadURL(
+ m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf104792-smart-art-animation.pptx"),
+ PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+ assertXPath(pXmlDocContent,
+ "/p:sld/p:timing/p:tnLst/p:par/p:cTn/p:childTnLst[1]/p:seq/p:cTn/p:childTnLst[1]/"
+ "p:par[1]/p:cTn/p:childTnLst[1]/p:par/p:cTn/p:childTnLst[1]/p:par/p:cTn/"
+ "p:childTnLst[1]/p:set/p:cBhvr/p:tgtEl/p:spTgt",
+ 1);
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf90627()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf90627.odp"), ODP);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+ // Don't export empty endCondLst without cond.
+ assertXPath(pXmlDocContent,
+ "/p:sld/p:timing/p:tnLst/p:par/p:cTn/p:childTnLst[1]/p:seq/p:cTn/p:childTnLst[1]/"
+ "p:par[2]/p:cTn/p:childTnLst[1]/p:par/p:cTn/p:childTnLst[1]/p:par/p:cTn/"
+ "p:endCondLst[not(*)]",
+ 0);
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf104786()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf104786.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide2.xml");
+ // Don't export empty 'to'
+ assertXPath(pXmlDocContent,
+ "/p:sld/p:timing/p:tnLst/p:par/p:cTn/p:childTnLst[1]/p:seq/p:cTn/p:childTnLst[1]/"
+ "p:par[2]/p:cTn/p:childTnLst[1]/p:par/p:cTn/p:childTnLst[1]/p:par/p:cTn/"
+ "p:childTnLst/p:set[2]/p:to",
+ 0);
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf118783()
+{
+ sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf118783.odp"), ODP);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+ xDocShRef->DoClose();
+
+ xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+ OUString sAttributeName
+ = getXPathContent(pXmlDocContent, "//p:animRot/p:cBhvr/p:attrNameLst/p:attrName");
+ CPPUNIT_ASSERT_EQUAL(OUString("r"), sAttributeName);
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf104789()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf104789.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+ OUString sAttributeName = getXPathContent(
+ pXmlDocContent, "/p:sld/p:timing/p:tnLst/p:par/p:cTn/p:childTnLst/p:seq/p:cTn/p:childTnLst/"
+ "p:par/p:cTn/p:childTnLst/p:par/p:cTn/p:childTnLst/p:par/p:cTn/"
+ "p:childTnLst/p:set/p:cBhvr/p:attrNameLst/p:attrName");
+ CPPUNIT_ASSERT_EQUAL(OUString("style.opacity"), sAttributeName);
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testOpenDocumentAsReadOnly()
+{
+ ::sd::DrawDocShellRef xDocShRef = loadURL(
+ m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/open-as-read-only.pptx"), PPTX);
+ CPPUNIT_ASSERT(xDocShRef->IsSecurityOptOpenReadOnly());
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+ CPPUNIT_ASSERT(xDocShRef->IsSecurityOptOpenReadOnly());
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf118835()
+{
+ sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf118835.odp"), ODP);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+ assertXPath(pXmlDocContent, "(//p:animClr)[1]", "clrSpc", "rgb");
+ assertXPathContent(pXmlDocContent, "(//p:animClr)[1]//p:attrName", "style.color");
+ assertXPath(pXmlDocContent, "(//p:animClr)[1]//p:to/a:srgbClr", "val", "ed1c24");
+
+ assertXPath(pXmlDocContent, "(//p:animClr)[2]", "clrSpc", "rgb");
+ assertXPathContent(pXmlDocContent, "(//p:animClr)[2]//p:attrName", "stroke.color");
+ assertXPath(pXmlDocContent, "(//p:animClr)[2]//p:to/a:srgbClr", "val", "333399");
+
+ assertXPath(pXmlDocContent, "(//p:animClr)[3]", "clrSpc", "rgb");
+ assertXPathContent(pXmlDocContent, "(//p:animClr)[3]//p:attrName", "fillcolor");
+ assertXPath(pXmlDocContent, "(//p:animClr)[3]//p:to/a:srgbClr", "val", "fcd3c1");
+
+ assertXPath(pXmlDocContent, "(//p:animClr)[5]", "clrSpc", "hsl");
+ assertXPathContent(pXmlDocContent, "(//p:animClr)[5]//p:attrName", "fillcolor");
+ assertXPath(pXmlDocContent, "(//p:animClr)[5]//p:by/p:hsl", "h", "10800000");
+ assertXPath(pXmlDocContent, "(//p:animClr)[5]//p:by/p:hsl", "s", "0");
+ assertXPath(pXmlDocContent, "(//p:animClr)[5]//p:by/p:hsl", "l", "0");
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf118768()
+{
+ sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf118768-brake.odp"), ODP);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+ assertXPath(pXmlDocContent, "//p:anim[1]", "from", "(-#ppt_w/2)");
+ assertXPath(pXmlDocContent, "//p:anim[1]", "to", "(#ppt_x)");
+ assertXPath(pXmlDocContent, "//p:anim[2]", "from", "0");
+
+ assertXPath(pXmlDocContent, "//p:anim[2]", "to", "-1");
+ assertXPath(pXmlDocContent, "//p:anim[2]/p:cBhvr/p:cTn", "autoRev", "1");
+
+ assertXPath(pXmlDocContent, "//p:anim[3]", "by", "(#ppt_h/3+#ppt_w*0.1)");
+ assertXPath(pXmlDocContent, "//p:anim[3]/p:cBhvr/p:cTn", "autoRev", "1");
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf118836()
+{
+ sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf118836.odp"), ODP);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+ assertXPath(pXmlDocContent, "//p:animScale/p:by", "x", "250000");
+ assertXPath(pXmlDocContent, "//p:animScale/p:by", "y", "250000");
+ xDocShRef->DoClose();
+}
+
+static double getAdjustmentValue(const uno::Reference<beans::XPropertySet>& xSet)
+{
+ auto aGeomPropSeq
+ = xSet->getPropertyValue("CustomShapeGeometry").get<uno::Sequence<beans::PropertyValue>>();
+ auto aGeomPropVec
+ = comphelper::sequenceToContainer<std::vector<beans::PropertyValue>>(aGeomPropSeq);
+
+ auto aIterator = std::find_if(
+ aGeomPropVec.begin(), aGeomPropVec.end(),
+ [](const beans::PropertyValue& rValue) { return rValue.Name == "AdjustmentValues"; });
+
+ if (aIterator != aGeomPropVec.end())
+ {
+ uno::Sequence<drawing::EnhancedCustomShapeAdjustmentValue> aAdjustment;
+ double fResult = 0.0;
+ aIterator->Value >>= aAdjustment;
+ aAdjustment[0].Value >>= fResult;
+ return fResult;
+ }
+
+ return -1.0;
+}
+
+static bool getScaleXValue(const uno::Reference<beans::XPropertySet>& xSet)
+{
+ bool bScaleX = false;
+
+ auto aGeomPropSeq
+ = xSet->getPropertyValue("CustomShapeGeometry").get<uno::Sequence<beans::PropertyValue>>();
+ auto aGeomPropVec
+ = comphelper::sequenceToContainer<std::vector<beans::PropertyValue>>(aGeomPropSeq);
+
+ auto aIterator = std::find_if(
+ aGeomPropVec.begin(), aGeomPropVec.end(),
+ [](const beans::PropertyValue& rValue) { return rValue.Name == "TextPath"; });
+
+ if (aIterator != aGeomPropVec.end())
+ {
+ uno::Sequence<beans::PropertyValue> aTextPathProperties;
+ aIterator->Value >>= aTextPathProperties;
+ auto aIterator2 = std::find_if(
+ aTextPathProperties.begin(), aTextPathProperties.end(),
+ [](const beans::PropertyValue& rValue) { return rValue.Name == "ScaleX"; });
+
+ if (aIterator2 != aTextPathProperties.end())
+ {
+ aIterator2->Value >>= bScaleX;
+ }
+ }
+
+ return bScaleX;
+}
+
+void SdOOXMLExportTest3::testTdf116350TextEffects()
+{
+ ::sd::DrawDocShellRef xDocShRef = loadURL(
+ m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf116350-texteffects.pptx"), PPTX);
+
+ // Default angle for ArchUp
+ uno::Reference<beans::XPropertySet> xShape0(getShapeFromPage(0, 0, xDocShRef));
+ double fAdjust = getAdjustmentValue(xShape0);
+ CPPUNIT_ASSERT_EQUAL(180.0, fAdjust);
+
+ bool bScaleX = getScaleXValue(xShape0);
+ CPPUNIT_ASSERT_EQUAL(true, bScaleX);
+
+ // Default angle for ArchDown
+ uno::Reference<beans::XPropertySet> xShape14(getShapeFromPage(14, 0, xDocShRef));
+ fAdjust = getAdjustmentValue(xShape14);
+ CPPUNIT_ASSERT_EQUAL(0.0, fAdjust);
+
+ bScaleX = getScaleXValue(xShape14);
+ CPPUNIT_ASSERT_EQUAL(true, bScaleX);
+
+ // Angle directly set
+ uno::Reference<beans::XPropertySet> xShape1(getShapeFromPage(1, 0, xDocShRef));
+ fAdjust = getAdjustmentValue(xShape1);
+ CPPUNIT_ASSERT_EQUAL(213.25, fAdjust);
+
+ bScaleX = getScaleXValue(xShape1);
+ CPPUNIT_ASSERT_EQUAL(true, bScaleX);
+
+ // Export
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+ assertXPath(pXmlDocContent, "//p:sp[1]/p:txBody/a:bodyPr/a:prstTxWarp", "prst", "textArchUp");
+ assertXPath(pXmlDocContent, "//p:sp[14]/p:txBody/a:bodyPr/a:prstTxWarp", "prst", "textCircle");
+ assertXPath(pXmlDocContent, "//p:sp[14]/p:spPr/a:solidFill/a:srgbClr", 0);
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf128096()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf128096.odp"), ODP);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+ xDocShRef->DoClose();
+
+ xmlDocUniquePtr pXmlDocContent1 = parseExport(tempFile, "ppt/slides/slide1.xml");
+ assertXPath(pXmlDocContent1,
+ "//p:sld/p:cSld/p:spTree/p:sp/p:txBody/a:p/a:r/a:rPr/a:highlight/a:srgbClr", "val",
+ "ffff00");
+
+ // Check that underlined content is also highlighted
+ xmlDocUniquePtr pXmlDocContent2 = parseExport(tempFile, "ppt/slides/slide2.xml");
+ assertXPath(pXmlDocContent2,
+ "//p:sld/p:cSld/p:spTree/p:sp/p:txBody/a:p/a:r/a:rPr/a:highlight/a:srgbClr", "val",
+ "ffff00");
+}
+void SdOOXMLExportTest3::testTdf120573()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf120573.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ xmlDocUniquePtr pXmlDoc = parseExport(tempFile, "ppt/slides/slide1.xml");
+ assertXPath(pXmlDoc, "//p:sld/p:cSld/p:spTree/p:pic/p:nvPicPr/p:nvPr/a:audioFile", 1);
+ assertXPath(pXmlDoc, "//p:sld/p:cSld/p:spTree/p:pic/p:nvPicPr/p:nvPr/a:videoFile", 0);
+
+ xmlDocUniquePtr pXmlDocRels = parseExport(tempFile, "ppt/slides/_rels/slide1.xml.rels");
+ assertXPath(pXmlDocRels,
+ "(/rels:Relationships/rels:Relationship[@Target='../media/media1.wav'])[1]", "Type",
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/audio");
+
+ xmlDocUniquePtr pXmlContentType = parseExport(tempFile, "[Content_Types].xml");
+ assertXPath(pXmlContentType,
+ "/ContentType:Types/ContentType:Override[@PartName='/ppt/media/media1.wav']",
+ "ContentType", "audio/x-wav");
+}
+
+void SdOOXMLExportTest3::testTdf119118()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf119118.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+ xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+ assertXPath(pXmlDocContent, "//p:iterate", "type", "lt");
+ assertXPath(pXmlDocContent, "//p:tmAbs", "val", "200");
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf99213()
+{
+ ::sd::DrawDocShellRef xDocShRef = loadURL(
+ m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf99213-target-missing.odp"), ODP);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+ xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+ // Number of nodes with p:attrNameLst was 3, including one that missed tgtEl
+ assertXPath(pXmlDocContent, "//p:attrNameLst", 2);
+ // Timenode that miss its target element should be filtered.
+ assertXPath(pXmlDocContent, "//p:attrNameLst/preceding-sibling::p:tgtEl", 2);
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testPotxExport()
+{
+ // Create new document
+ sd::DrawDocShellRef xDocShRef
+ = new sd::DrawDocShell(SfxObjectCreateMode::EMBEDDED, false, DocumentType::Draw);
+ uno::Reference<frame::XLoadable> xLoadable(xDocShRef->GetModel(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xLoadable.is());
+ xLoadable->initNew();
+
+ // Export as a POTM template
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), POTX, &tempFile);
+ xDocShRef->DoClose();
+
+ // Load and check content type
+ xmlDocUniquePtr pContentTypes = parseExport(tempFile, "[Content_Types].xml");
+ CPPUNIT_ASSERT(pContentTypes);
+ assertXPath(pContentTypes,
+ "/ContentType:Types/ContentType:Override[@PartName='/ppt/presentation.xml']",
+ "ContentType",
+ "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml");
+}
+
+void SdOOXMLExportTest3::testTdf44223()
+{
+ utl::TempFile tempFile;
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf44223.pptx"), PPTX);
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ std::unique_ptr<SvStream> const pStream1(parseExportStream(tempFile, "ppt/media/audio1.wav"));
+ CPPUNIT_ASSERT_EQUAL(sal_uInt64(11140), pStream1->remainingSize());
+
+ std::unique_ptr<SvStream> const pStream2(parseExportStream(tempFile, "ppt/media/audio2.wav"));
+ CPPUNIT_ASSERT_EQUAL(sal_uInt64(28074), pStream2->remainingSize());
+
+ xmlDocUniquePtr pXmlContentType = parseExport(tempFile, "[Content_Types].xml");
+ assertXPath(pXmlContentType,
+ "/ContentType:Types/ContentType:Override[@PartName='/ppt/media/audio1.wav']",
+ "ContentType", "audio/x-wav");
+
+ assertXPath(pXmlContentType,
+ "/ContentType:Types/ContentType:Override[@PartName='/ppt/media/audio2.wav']",
+ "ContentType", "audio/x-wav");
+
+ xmlDocUniquePtr pDoc1 = parseExport(tempFile, "ppt/slides/slide1.xml");
+
+ // Start condition: 0s after timenode id 5 begins.
+ assertXPath(pDoc1, "//p:audio/p:cMediaNode/p:cTn/p:stCondLst/p:cond", "evt", "begin");
+ assertXPath(pDoc1, "//p:audio/p:cMediaNode/p:cTn/p:stCondLst/p:cond", "delay", "0");
+ assertXPath(pDoc1, "//p:audio/p:cMediaNode/p:cTn/p:stCondLst/p:cond/p:tn", "val", "5");
+
+ xmlDocUniquePtr pDoc2 = parseExport(tempFile, "ppt/slides/slide2.xml");
+ assertXPath(pDoc2, "//p:transition/p:sndAc/p:stSnd/p:snd[@r:embed]", 2);
+
+ xmlDocUniquePtr pRels1 = parseExport(tempFile, "ppt/slides/_rels/slide1.xml.rels");
+ assertXPath(pRels1, "//rels:Relationship[@Id='rId1']", "Type",
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/audio");
+ assertXPath(pRels1, "//rels:Relationship[@Id='rId1']", "Target", "../media/audio1.wav");
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testSmartArtPreserve()
+{
+ ::sd::DrawDocShellRef xDocShRef = loadURL(
+ m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/smartart-preserve.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ xmlDocUniquePtr pXmlDoc = parseExport(tempFile, "ppt/slides/slide1.xml");
+ assertXPath(pXmlDoc, "//p:sld/p:cSld/p:spTree/p:graphicFrame/p:nvGraphicFramePr/p:cNvPr");
+ assertXPath(pXmlDoc,
+ "//p:sld/p:cSld/p:spTree/p:graphicFrame/a:graphic/a:graphicData/dgm:relIds");
+ assertXPath(pXmlDoc,
+ "//p:sld/p:cSld/p:spTree/p:graphicFrame/p:nvGraphicFramePr/p:nvPr/p:extLst/p:ext",
+ "uri", "{D42A27DB-BD31-4B8C-83A1-F6EECF244321}");
+ assertXPath(pXmlDoc, "//p:sld/p:cSld/p:spTree/p:graphicFrame/p:nvGraphicFramePr/p:nvPr/"
+ "p:extLst/p:ext/p14:modId");
+
+ xmlDocUniquePtr pXmlDocRels = parseExport(tempFile, "ppt/slides/_rels/slide1.xml.rels");
+ assertXPath(
+ pXmlDocRels,
+ "(/rels:Relationships/rels:Relationship[@Target='../diagrams/layout1.xml'])[1]", "Type",
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramLayout");
+ assertXPath(
+ pXmlDocRels, "(/rels:Relationships/rels:Relationship[@Target='../diagrams/data1.xml'])[1]",
+ "Type", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramData");
+ assertXPath(
+ pXmlDocRels,
+ "(/rels:Relationships/rels:Relationship[@Target='../diagrams/colors1.xml'])[1]", "Type",
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramColors");
+ assertXPath(
+ pXmlDocRels,
+ "(/rels:Relationships/rels:Relationship[@Target='../diagrams/quickStyle1.xml'])[1]", "Type",
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramQuickStyle");
+
+ xmlDocUniquePtr pXmlContentType = parseExport(tempFile, "[Content_Types].xml");
+ assertXPath(pXmlContentType,
+ "/ContentType:Types/ContentType:Override[@PartName='/ppt/diagrams/layout1.xml']",
+ "ContentType",
+ "application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml");
+ assertXPath(pXmlContentType,
+ "/ContentType:Types/ContentType:Override[@PartName='/ppt/diagrams/data1.xml']",
+ "ContentType",
+ "application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml");
+ assertXPath(pXmlContentType,
+ "/ContentType:Types/ContentType:Override[@PartName='/ppt/diagrams/colors1.xml']",
+ "ContentType",
+ "application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml");
+ assertXPath(
+ pXmlContentType,
+ "/ContentType:Types/ContentType:Override[@PartName='/ppt/diagrams/quickStyle1.xml']",
+ "ContentType", "application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml");
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf125346()
+{
+ // There are two themes in the test document, make sure we use the right theme
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf125346.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0, xDocShRef));
+ uno::Reference<beans::XPropertySet> xPropSet(xShape, uno::UNO_SET_THROW);
+
+ drawing::FillStyle aFillStyle(drawing::FillStyle_NONE);
+ xPropSet->getPropertyValue("FillStyle") >>= aFillStyle;
+ CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, aFillStyle);
+
+ Color nFillColor;
+ xPropSet->getPropertyValue("FillColor") >>= nFillColor;
+ CPPUNIT_ASSERT_EQUAL(Color(0x90C226), nFillColor);
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf125346_2()
+{
+ // There are two themes in the test document, make sure we use the right theme
+ // Test more slides with different themes
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf125346_2.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ {
+ uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0, xDocShRef));
+ uno::Reference<beans::XPropertySet> xPropSet(xShape, uno::UNO_SET_THROW);
+
+ drawing::FillStyle aFillStyle(drawing::FillStyle_NONE);
+ xPropSet->getPropertyValue("FillStyle") >>= aFillStyle;
+ CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, aFillStyle);
+
+ Color nFillColor;
+ xPropSet->getPropertyValue("FillColor") >>= nFillColor;
+ CPPUNIT_ASSERT_EQUAL(Color(0x90C226), nFillColor);
+ }
+
+ {
+ uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 1, xDocShRef));
+ uno::Reference<beans::XPropertySet> xPropSet(xShape, uno::UNO_SET_THROW);
+
+ drawing::FillStyle aFillStyle(drawing::FillStyle_NONE);
+ xPropSet->getPropertyValue("FillStyle") >>= aFillStyle;
+ CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, aFillStyle);
+
+ Color nFillColor;
+ xPropSet->getPropertyValue("FillColor") >>= nFillColor;
+ CPPUNIT_ASSERT_EQUAL(Color(0x052F61), nFillColor);
+ }
+
+ {
+ uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 2, xDocShRef));
+ uno::Reference<beans::XPropertySet> xPropSet(xShape, uno::UNO_SET_THROW);
+
+ drawing::FillStyle aFillStyle(drawing::FillStyle_NONE);
+ xPropSet->getPropertyValue("FillStyle") >>= aFillStyle;
+ CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, aFillStyle);
+
+ Color nFillColor;
+ xPropSet->getPropertyValue("FillColor") >>= nFillColor;
+ CPPUNIT_ASSERT_EQUAL(Color(0x90C226), nFillColor);
+ }
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf125360()
+{
+ // Check whether the changed fill transparency is exported correctly.
+ // Color is defined by shape style
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf125360.pptx"), PPTX);
+
+ uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0, xDocShRef));
+
+ xShape->setPropertyValue("FillTransparence", uno::makeAny(static_cast<sal_Int32>(23)));
+
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ xShape.set(getShapeFromPage(0, 0, xDocShRef));
+
+ sal_Int32 nTransparence = 0;
+ xShape->getPropertyValue("FillTransparence") >>= nTransparence;
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(23), nTransparence);
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf125360_1()
+{
+ // Check whether the changed fill transparency is exported correctly.
+ // Color is defined by color scheme
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf125360_1.pptx"), PPTX);
+
+ uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0, xDocShRef));
+
+ xShape->setPropertyValue("FillTransparence", uno::makeAny(static_cast<sal_Int32>(23)));
+
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ xShape.set(getShapeFromPage(0, 0, xDocShRef));
+
+ sal_Int32 nTransparence = 0;
+ xShape->getPropertyValue("FillTransparence") >>= nTransparence;
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(23), nTransparence);
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf125360_2()
+{
+ // Check whether the changed fill transparency is exported correctly.
+ // Color is defined by color scheme with a transparency
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf125360_2.pptx"), PPTX);
+
+ uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0, xDocShRef));
+
+ sal_Int32 nTransparence = 0;
+ xShape->getPropertyValue("FillTransparence") >>= nTransparence;
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(82), nTransparence);
+
+ xShape->setPropertyValue("FillTransparence", uno::makeAny(static_cast<sal_Int32>(23)));
+
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ xShape.set(getShapeFromPage(0, 0, xDocShRef));
+
+ nTransparence = 0;
+ xShape->getPropertyValue("FillTransparence") >>= nTransparence;
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(23), nTransparence);
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf125551()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf125551.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ uno::Reference<drawing::XShapes> xGroupShape(getShapeFromPage(0, 0, xDocShRef), uno::UNO_QUERY);
+ uno::Reference<drawing::XShape> xShapeBg(xGroupShape->getByIndex(0), uno::UNO_QUERY);
+
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1024), xShapeBg->getPosition().X);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(576), xShapeBg->getPosition().Y);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(10815), xShapeBg->getSize().Width);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(8587), xShapeBg->getSize().Height);
+}
+
+void SdOOXMLExportTest3::testTdf136830()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf136830.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ // Without the fix in place, the X position of the shapes would have been 0
+ uno::Reference<drawing::XShapes> xGroupShape(getShapeFromPage(0, 0, xDocShRef), uno::UNO_QUERY);
+
+ uno::Reference<drawing::XShape> xShape1(xGroupShape->getByIndex(0), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(14134), xShape1->getPosition().X);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(-5321), xShape1->getPosition().Y);
+
+ uno::Reference<drawing::XShape> xShape2(xGroupShape->getByIndex(1), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(8085), xShape2->getPosition().X);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(8085), xShape2->getPosition().Y);
+
+ uno::Reference<drawing::XShape> xShape3(xGroupShape->getByIndex(2), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(8283), xShape3->getPosition().X);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(4620), xShape3->getPosition().Y);
+}
+
+void SdOOXMLExportTest3::testTdf126234()
+{
+ sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf126234.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ // check relative size of the bullet, 400% is a legitimate value for MS Office document
+ // Without a fix, it will fail to set the size correctly
+ const SdrPage* pPage = GetPage(1, xDocShRef);
+ SdrTextObj* pTxtObj = dynamic_cast<SdrTextObj*>(pPage->GetObj(0));
+ CPPUNIT_ASSERT_MESSAGE("no text object", pTxtObj != nullptr);
+ const EditTextObject& aEdit = pTxtObj->GetOutlinerParaObject()->GetTextObject();
+ const SvxNumBulletItem* pNumFmt = aEdit.GetParaAttribs(0).GetItem(EE_PARA_NUMBULLET);
+ CPPUNIT_ASSERT(pNumFmt);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt16(400), pNumFmt->GetNumRule().GetLevel(0).GetBulletRelSize());
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf126741()
+{
+ sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf126741.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ // dash dot dot line style import fix
+ // The original fixed values are replaced with the percent values, because
+ // with fix for tdf#127166 the MS Office preset styles are correctly detected.
+ const SdrPage* pPage = GetPage(1, xDocShRef);
+ SdrObject* const pObj = pPage->GetObj(0);
+ CPPUNIT_ASSERT(pObj);
+
+ const XLineStyleItem& rStyleItem
+ = dynamic_cast<const XLineStyleItem&>(pObj->GetMergedItem(XATTR_LINESTYLE));
+ const XLineDashItem& rDashItem
+ = dynamic_cast<const XLineDashItem&>(pObj->GetMergedItem(XATTR_LINEDASH));
+
+ CPPUNIT_ASSERT_EQUAL(drawing::LineStyle_DASH, rStyleItem.GetValue());
+ CPPUNIT_ASSERT_EQUAL(sal_uInt16(1), rDashItem.GetDashValue().GetDots());
+ CPPUNIT_ASSERT_EQUAL(800.0, rDashItem.GetDashValue().GetDotLen());
+ CPPUNIT_ASSERT_EQUAL(sal_uInt16(2), rDashItem.GetDashValue().GetDashes());
+ CPPUNIT_ASSERT_EQUAL(100.0, rDashItem.GetDashValue().GetDashLen());
+ CPPUNIT_ASSERT_EQUAL(300.0, rDashItem.GetDashValue().GetDistance());
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf127372()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/odp/tdf127372.odp"), ODP);
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX);
+ uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0, xDocShRef));
+ awt::Gradient aTransparenceGradient;
+ xShape->getPropertyValue("FillTransparenceGradient") >>= aTransparenceGradient;
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0x000000), aTransparenceGradient.StartColor);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0x000000), aTransparenceGradient.EndColor);
+}
+
+void SdOOXMLExportTest3::testTdf127379()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/odp/tdf127379.odp"), ODP);
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX);
+ uno::Reference<drawing::XDrawPagesSupplier> xDoc(xDocShRef->GetDoc()->getUnoModel(),
+ uno::UNO_QUERY_THROW);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xDoc->getDrawPages()->getCount());
+
+ uno::Reference<drawing::XDrawPage> xPage(getPage(0, xDocShRef));
+ uno::Reference<beans::XPropertySet> xPropSet(xPage, uno::UNO_QUERY);
+
+ uno::Any aAny = xPropSet->getPropertyValue("Background");
+ CPPUNIT_ASSERT_MESSAGE("Slide background is missing", aAny.hasValue());
+ uno::Reference<beans::XPropertySet> aXBackgroundPropSet;
+ aAny >>= aXBackgroundPropSet;
+
+ drawing::FillStyle aFillStyle(drawing::FillStyle_NONE);
+ aXBackgroundPropSet->getPropertyValue("FillStyle") >>= aFillStyle;
+ CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, aFillStyle);
+
+ awt::Gradient aGradient;
+ CPPUNIT_ASSERT(aXBackgroundPropSet->getPropertyValue("FillGradient") >>= aGradient);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0xFF0000), aGradient.StartColor);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0x2A6099), aGradient.EndColor);
+}
+
+void SdOOXMLExportTest3::testTdf98603()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf98603.pptx"), PPTX);
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX);
+ uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0, xDocShRef));
+ uno::Reference<text::XTextRange> const xParagraph(getParagraphFromShape(0, xShape));
+ uno::Reference<text::XTextRange> xRun(getRunFromParagraph(0, xParagraph));
+ uno::Reference<beans::XPropertySet> xPropSet(xRun, uno::UNO_QUERY_THROW);
+ css::lang::Locale aLocale;
+ xPropSet->getPropertyValue("CharLocaleComplex") >>= aLocale;
+ CPPUNIT_ASSERT_EQUAL(OUString("he"), aLocale.Language);
+ CPPUNIT_ASSERT_EQUAL(OUString("IL"), aLocale.Country);
+}
+
+void SdOOXMLExportTest3::testTdf128213()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf128213.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+ assertXPathNoAttribute(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp/p:spPr/a:xfrm", "rot");
+}
+
+void SdOOXMLExportTest3::testTdf79082()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf79082.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+ assertXPath(pXmlDocContent,
+ "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p/a:pPr/a:tabLst/a:tab[1]", "pos",
+ "360000");
+ assertXPath(pXmlDocContent,
+ "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p/a:pPr/a:tabLst/a:tab[1]", "algn", "l");
+
+ assertXPath(pXmlDocContent,
+ "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p/a:pPr/a:tabLst/a:tab[2]", "pos",
+ "756000");
+ assertXPath(pXmlDocContent,
+ "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p/a:pPr/a:tabLst/a:tab[2]", "algn", "l");
+
+ assertXPath(pXmlDocContent,
+ "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p/a:pPr/a:tabLst/a:tab[3]", "pos",
+ "1440000");
+ assertXPath(pXmlDocContent,
+ "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p/a:pPr/a:tabLst/a:tab[3]", "algn",
+ "ctr");
+
+ assertXPath(pXmlDocContent,
+ "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p/a:pPr/a:tabLst/a:tab[4]", "pos",
+ "1800000");
+ assertXPath(pXmlDocContent,
+ "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p/a:pPr/a:tabLst/a:tab[4]", "algn", "r");
+
+ assertXPath(pXmlDocContent,
+ "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p/a:pPr/a:tabLst/a:tab[5]", "pos",
+ "3240000");
+ assertXPath(pXmlDocContent,
+ "/p:sld/p:cSld/p:spTree/p:sp[2]/p:txBody/a:p/a:pPr/a:tabLst/a:tab[5]", "algn",
+ "dec");
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testTdf129372()
+{
+ //Without the fix in place, it would crash at import time
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf129372.pptx"), PPTX);
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX);
+ const SdrPage* pPage = GetPage(1, xDocShRef.get());
+
+ const SdrObject* pObj = pPage->GetObj(0);
+ CPPUNIT_ASSERT_MESSAGE("no object", pObj != nullptr);
+ CPPUNIT_ASSERT_EQUAL(OBJ_OLE2, pObj->GetObjIdentifier());
+}
+
+void SdOOXMLExportTest3::testShapeGlowEffect()
+{
+ ::sd::DrawDocShellRef xDocShRef = loadURL(
+ m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/shape-glow-effect.pptx"), PPTX);
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX);
+ uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0, xDocShRef));
+ sal_Int32 nRadius = -1;
+ xShape->getPropertyValue("GlowEffectRadius") >>= nRadius;
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(388), nRadius); // 139700 EMU = 388.0556 mm/100
+ Color nColor;
+ xShape->getPropertyValue("GlowEffectColor") >>= nColor;
+ CPPUNIT_ASSERT_EQUAL(Color(0xFFC000), nColor);
+ sal_Int16 nTransparency;
+ xShape->getPropertyValue("GlowEffectTransparency") >>= nTransparency;
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(60), nTransparency);
+}
+
+void SdOOXMLExportTest3::testTdf119087()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf119087.pptx"), PPTX);
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX);
+ // This would fail both on export validation, and reloading the saved pptx file.
+}
+
+void SdOOXMLExportTest3::testTdf131554()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf131554.pptx"), PPTX);
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX);
+ uno::Reference<drawing::XShape> xShape(getShapeFromPage(1, 0, xDocShRef), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(5622), xShape->getPosition().X);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(13251), xShape->getPosition().Y);
+}
+
+void SdOOXMLExportTest3::testTdf132282()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf132282.pptx"), PPTX);
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX);
+ uno::Reference<drawing::XShape> xShape(getShapeFromPage(0, 0, xDocShRef), uno::UNO_QUERY);
+ // Without the fix in place, the position would be 0,0, height = 1 and width = 1
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1736), xShape->getPosition().X);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(763), xShape->getPosition().Y);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(30523), xShape->getSize().Width);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2604), xShape->getSize().Height);
+}
+
+void SdOOXMLExportTest3::testTdf132201EffectOrder()
+{
+ auto xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/effectOrder.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+ xmlDocUniquePtr pXmlDocContent = parseExport(tempFile, "ppt/slides/slide1.xml");
+ assertXPathChildren(pXmlDocContent, "/p:sld/p:cSld/p:spTree/p:sp[3]/p:spPr/a:effectLst", 2);
+ // The relative order of effects is important: glow must be before shadow
+ CPPUNIT_ASSERT_EQUAL(0, getXPathPosition(pXmlDocContent,
+ "/p:sld/p:cSld/p:spTree/p:sp[3]/p:spPr/a:effectLst",
+ "glow"));
+ CPPUNIT_ASSERT_EQUAL(1, getXPathPosition(pXmlDocContent,
+ "/p:sld/p:cSld/p:spTree/p:sp[3]/p:spPr/a:effectLst",
+ "outerShdw"));
+
+ xDocShRef->DoClose();
+}
+
+void SdOOXMLExportTest3::testShapeSoftEdgeEffect()
+{
+ auto xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/shape-soft-edges.pptx"), PPTX);
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX);
+ auto xShapeProps(getShapeFromPage(0, 0, xDocShRef));
+ sal_Int32 nRadius = -1;
+ xShapeProps->getPropertyValue("SoftEdgeRadius") >>= nRadius;
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(635), nRadius); // 18 pt
+}
+
+void SdOOXMLExportTest3::testShapeShadowBlurEffect()
+{
+ auto xDocShRef = loadURL(
+ m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/shape-blur-effect.pptx"), PPTX);
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX);
+ uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0, xDocShRef));
+ bool bHasShadow = false;
+ xShape->getPropertyValue("Shadow") >>= bHasShadow;
+ CPPUNIT_ASSERT(bHasShadow);
+ sal_Int32 nRadius = -1;
+ xShape->getPropertyValue("ShadowBlur") >>= nRadius;
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(388), nRadius); // 11 pt
+}
+
+void SdOOXMLExportTest3::testTdf119223()
+{
+ auto xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/odp/tdf119223.odp"), ODP);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+
+ xDocShRef->DoClose();
+
+ xmlDocUniquePtr pXmlDocRels = parseExport(tempFile, "ppt/slides/slide1.xml");
+ assertXPath(pXmlDocRels, "//p:cNvPr[@name='SomeCustomShape']");
+
+ assertXPath(pXmlDocRels, "//p:cNvPr[@name='SomePicture']");
+
+ assertXPath(pXmlDocRels, "//p:cNvPr[@name='SomeFormula']");
+
+ assertXPath(pXmlDocRels, "//p:cNvPr[@name='SomeLine']");
+
+ assertXPath(pXmlDocRels, "//p:cNvPr[@name='SomeTextbox']");
+
+ assertXPath(pXmlDocRels, "//p:cNvPr[@name='SomeTable']");
+
+ assertXPath(pXmlDocRels, "//p:cNvPr[@name='SomeGroup']");
+}
+
+void SdOOXMLExportTest3::testTdf128213ShapeRot()
+{
+ auto xDocShRef = loadURL(
+ m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf128213-shaperot.pptx"), PPTX);
+ utl::TempFile tempFile;
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile);
+ xDocShRef->DoClose();
+
+ xmlDocUniquePtr pXmlDocRels = parseExport(tempFile, "ppt/slides/slide1.xml");
+
+ assertXPath(pXmlDocRels, "/p:sld/p:cSld/p:spTree/p:sp/p:txBody/a:bodyPr/a:scene3d");
+ assertXPath(pXmlDocRels,
+ "/p:sld/p:cSld/p:spTree/p:sp/p:txBody/a:bodyPr/a:scene3d/a:camera/a:rot", "rev",
+ "5400000");
+}
+
+void SdOOXMLExportTest3::testTdf125560_textDeflate()
+{
+ auto xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/ShapePlusImage.pptx"), PPTX);
+ utl::TempFile tempFile;
+
+ // This problem did not affect the pptx export, only the ODP so assert that
+ xDocShRef = saveAndReload(xDocShRef.get(), ODP, &tempFile);
+ xDocShRef->DoClose();
+
+ xmlDocUniquePtr pXmlDocRels = parseExport(tempFile, "content.xml");
+ assertXPath(pXmlDocRels,
+ "/office:document-content/office:body/office:presentation/draw:page/"
+ "draw:custom-shape/draw:enhanced-geometry",
+ "type", "mso-spt161");
+}
+
+void SdOOXMLExportTest3::testTdf125560_textInflateTop()
+{
+ auto xDocShRef = loadURL(
+ m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/ShapeTextInflateTop.pptx"), PPTX);
+ utl::TempFile tempFile;
+
+ // This problem did not affect the pptx export, only the ODP so assert that
+ xDocShRef = saveAndReload(xDocShRef.get(), ODP, &tempFile);
+ xDocShRef->DoClose();
+
+ xmlDocUniquePtr pXmlDocRels = parseExport(tempFile, "content.xml");
+ assertXPath(pXmlDocRels,
+ "/office:document-content/office:body/office:presentation/draw:page/"
+ "draw:custom-shape/draw:enhanced-geometry",
+ "type", "mso-spt164");
+}
+
+void SdOOXMLExportTest3::testTdf96061_textHighlight()
+{
+ ::sd::DrawDocShellRef xDocShRef
+ = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf96061.pptx"), PPTX);
+
+ uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0, xDocShRef));
+ uno::Reference<text::XTextRange> const xParagraph1(getParagraphFromShape(0, xShape));
+ uno::Reference<text::XTextRange> xRun1(getRunFromParagraph(0, xParagraph1));
+ uno::Reference<beans::XPropertySet> xPropSet1(xRun1, uno::UNO_QUERY_THROW);
+ sal_Int32 aColor;
+ xPropSet1->getPropertyValue("CharBackColor") >>= aColor;
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(16776960), aColor);
+
+ uno::Reference<text::XTextRange> const xParagraph2(getParagraphFromShape(1, xShape));
+ uno::Reference<text::XTextRange> xRun2(getRunFromParagraph(0, xParagraph2));
+ uno::Reference<beans::XPropertySet> xPropSet2(xRun2, uno::UNO_QUERY_THROW);
+ xPropSet2->getPropertyValue("CharBackColor") >>= aColor;
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), aColor);
+
+ xDocShRef = saveAndReload(xDocShRef.get(), PPTX);
+
+ uno::Reference<beans::XPropertySet> xShape2(getShapeFromPage(0, 0, xDocShRef));
+ uno::Reference<text::XTextRange> const xParagraph3(getParagraphFromShape(0, xShape2));
+ uno::Reference<text::XTextRange> xRun3(getRunFromParagraph(0, xParagraph3));
+ uno::Reference<beans::XPropertySet> xPropSet3(xRun3, uno::UNO_QUERY_THROW);
+ xPropSet3->getPropertyValue("CharBackColor") >>= aColor;
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(16776960), aColor);
+
+ uno::Reference<text::XTextRange> const xParagraph4(getParagraphFromShape(1, xShape2));
+ uno::Reference<text::XTextRange> xRun4(getRunFromParagraph(0, xParagraph4));
+ uno::Reference<beans::XPropertySet> xPropSet4(xRun4, uno::UNO_QUERY_THROW);
+ xPropSet4->getPropertyValue("CharBackColor") >>= aColor;
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), aColor);
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(SdOOXMLExportTest3);
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */