/* -*- 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/.
*/
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testBnc887230)
{
createSdImpressDoc("pptx/bnc887230.pptx");
saveAndReload(u"Impress Office Open XML"_ustr);
const SdrPage* pPage = GetPage(1);
const SdrTextObj* pObj = DynCastSdrTextObj(pPage->GetObj(0)); // Without the fix in place, this test would have failed with //- Expected: 255 //- Actual : 13421823
checkFontAttributes<Color, SvxColorItem>(pObj, COL_LIGHTBLUE, EE_CHAR_COLOR);
}
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testBnc870233_1)
{
createSdImpressDoc("pptx/bnc870233_1.pptx");
saveAndReload(u"Impress Office Open XML"_ustr);
const SdrPage* pPage = GetPage(1);
// The problem was all shapes had the same font (the last parsed font attributes overwrote all previous ones)
// First shape has red, bold font
{ const SdrTextObj* pObj = DynCastSdrTextObj(pPage->GetObj(0));
checkFontAttributes<Color, SvxColorItem>(pObj, COL_LIGHTRED, EE_CHAR_COLOR);
checkFontAttributes<FontWeight, SvxWeightItem>(pObj, WEIGHT_BOLD, EE_CHAR_WEIGHT);
}
// Second shape has blue, italic font
{ const SdrTextObj* pObj = DynCastSdrTextObj(pPage->GetObj(1));
checkFontAttributes<Color, SvxColorItem>(pObj, COL_LIGHTBLUE, EE_CHAR_COLOR);
checkFontAttributes<FontItalic, SvxPostureItem>(pObj, ITALIC_NORMAL, EE_CHAR_ITALIC);
}
}
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testBnc870233_2)
{
createSdImpressDoc("pptx/bnc870233_2.pptx");
saveAndReload(u"Impress Office Open XML"_ustr);
const SdrPage* pPage = GetPage(1);
// The problem was in some SmartArts font color was wrong
// First smart art has blue font color (direct formatting)
{ const SdrObjGroup* pObjGroup = dynamic_cast<SdrObjGroup*>(pPage->GetObj(0));
CPPUNIT_ASSERT(pObjGroup); const SdrTextObj* pObj = DynCastSdrTextObj(pObjGroup->GetSubList()->GetObj(1));
checkFontAttributes<Color, SvxColorItem>(pObj, COL_LIGHTBLUE, EE_CHAR_COLOR);
}
// Second smart art has "dk2" font color (style)
{ const SdrObjGroup* pObjGroup = dynamic_cast<SdrObjGroup*>(pPage->GetObj(1));
CPPUNIT_ASSERT(pObjGroup); const SdrTextObj* pObj = DynCastSdrTextObj(pObjGroup->GetSubList()->GetObj(1));
checkFontAttributes<Color, SvxColorItem>(pObj, Color(0x1f497d), EE_CHAR_COLOR);
}
// Third smart art has white font color (style)
{ const SdrObjGroup* pObjGroup = dynamic_cast<SdrObjGroup*>(pPage->GetObj(2));
CPPUNIT_ASSERT(pObjGroup); const SdrTextObj* pObj = DynCastSdrTextObj(pObjGroup->GetSubList()->GetObj(1));
checkFontAttributes<Color, SvxColorItem>(pObj, COL_WHITE, EE_CHAR_COLOR);
}
}
CPPUNIT_ASSERT_EQUAL_MESSAGE( "Wrong ShapeType!", u"com.sun.star.presentation.OutlinerShape"_ustr, xShp->getShapeType());
uno::Reference<beans::XPropertySet> xShpProps(xShp, uno::UNO_QUERY); // Without the fix in place there will be the following error: // Expected: com.sun.star.presentation.OutlinerShape // Actual: com.sun.star.drawing.CustomShape
CPPUNIT_ASSERT_EQUAL_MESSAGE( "It must be a placeholder!", true,
xShpProps->getPropertyValue(u"IsPresentationObject"_ustr).get<bool>()); // Without the fix in place this will the following: // Expected: true // Actual: false
}
CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong ShapeType!",
u"com.sun.star.presentation.OutlinerShape"_ustr,
xShp->getShapeType());
uno::Reference<beans::XPropertySet> xShpProps(xShp, uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL_MESSAGE( "It must be a placeholder!", true,
xShpProps->getPropertyValue(u"IsPresentationObject"_ustr).get<bool>());
if (i == 1)
{
aFillStyle = xShpProps->getPropertyValue(u"FillStyle"_ustr);
aFillColor = xShpProps->getPropertyValue(u"FillColor"_ustr);
saveAndReload(u"Impress Office Open XML"_ustr); continue;
} else
{
CPPUNIT_ASSERT_EQUAL_MESSAGE("The Placeholder fillstyle has not been exported!",
aFillStyle,
xShpProps->getPropertyValue(u"FillStyle"_ustr));
CPPUNIT_ASSERT_EQUAL_MESSAGE("The Placeholder fillcolor has not been exported!",
aFillColor,
xShpProps->getPropertyValue(u"FillColor"_ustr));
CPPUNIT_ASSERT_EQUAL_MESSAGE("The Placeholder linestyle has not been exported!",
aLineStyle,
xShpProps->getPropertyValue(u"LineStyle"_ustr));
CPPUNIT_ASSERT_EQUAL_MESSAGE("The Placeholder linecolor has not been exported!",
aLineColor,
xShpProps->getPropertyValue(u"LineColor"_ustr)); break;
}
}
}
saveAndReload(u"Impress Office Open XML"_ustr); const SdrPage* pPage = GetPage(1);
// Export to .pptx changes all text frames to custom shape objects, which obey TextWordWrap property // (which is false for text frames otherwise and is ignored). Check that frames that should wrap still do. auto pTxtObj = pPage->GetObj(1);
CPPUNIT_ASSERT_MESSAGE("no text object", pTxtObj != nullptr);
CPPUNIT_ASSERT_EQUAL(u"Text to be always wrapped"_ustr,
pTxtObj->GetOutlinerParaObject()->GetTextObject().GetText(0));
CPPUNIT_ASSERT_EQUAL(true, pTxtObj->GetMergedItem(SDRATTR_TEXT_WORDWRAP).GetValue());
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testBnc880763)
{
createSdImpressDoc("pptx/bnc880763.pptx");
saveAndReload(u"Impress Office Open XML"_ustr);
const SdrPage* pPage = GetPage(1);
// Check z-order of the two shapes, use background color to identify them // First object in the background has blue background color const SdrObjGroup* pObjGroup = dynamic_cast<SdrObjGroup*>(pPage->GetObj(0));
CPPUNIT_ASSERT(pObjGroup); const SdrObject* pObj = pObjGroup->GetSubList()->GetObj(1);
CPPUNIT_ASSERT_MESSAGE("no object", pObj != nullptr);
CPPUNIT_ASSERT_EQUAL(
COL_LIGHTBLUE,
(static_cast<const XColorItem&>(pObj->GetMergedItem(XATTR_FILLCOLOR))).GetColorValue());
// Second object at the front has green background color
pObj = pPage->GetObj(1);
CPPUNIT_ASSERT_MESSAGE("no object", pObj != nullptr);
CPPUNIT_ASSERT_EQUAL(
COL_LIGHTGREEN,
(static_cast<const XColorItem&>(pObj->GetMergedItem(XATTR_FILLCOLOR))).GetColorValue());
}
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testBnc862510_5)
{
createSdImpressDoc("pptx/bnc862510_5.pptx");
saveAndReload(u"Impress Office Open XML"_ustr);
const SdrPage* pPage = GetPage(1);
// Same as testBnc870237, but here we check the horizontal spacing const SdrObjGroup* pObjGroup = dynamic_cast<SdrObjGroup*>(pPage->GetObj(0));
CPPUNIT_ASSERT(pObjGroup); const SdrObject* pObj = pObjGroup->GetSubList()->GetObj(2);
CPPUNIT_ASSERT_MESSAGE("no object", pObj != nullptr);
CPPUNIT_ASSERT_EQUAL(sal_Int32(0), pObj->GetMergedItem(SDRATTR_TEXT_UPPERDIST).GetValue());
CPPUNIT_ASSERT_EQUAL(sal_Int32(0), pObj->GetMergedItem(SDRATTR_TEXT_LOWERDIST).GetValue());
CPPUNIT_ASSERT_EQUAL(sal_Int32(7510), pObj->GetMergedItem(SDRATTR_TEXT_RIGHTDIST).GetValue());
CPPUNIT_ASSERT_EQUAL(sal_Int32(0), pObj->GetMergedItem(SDRATTR_TEXT_LEFTDIST).GetValue());
}
// In numbering a bullet could be defined as empty (no character). // When exporting to OOXML make sure that the bullet is ignored and // not written into the file.
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testBnc822347_EmptyBullet)
{
createSdImpressDoc("bnc822347_EmptyBullet.odp");
saveAndReload(u"Impress Office Open XML"_ustr);
CPPUNIT_ASSERT_EQUAL(sal_Int16(-1),
nDepth); // depth >= 0 means that the paragraph has bullets enabled
}
//Bullets not having any text following them are not getting exported to pptx correctly.
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testFdo90607)
{
createSdImpressDoc("fdo90607.pptx");
saveAndReload(u"Impress Office Open XML"_ustr);
// Test Solid fill color
Color nColor;
xCell.set(xTable->getCellByPosition(0, 0), uno::UNO_QUERY_THROW);
xCell->getPropertyValue(u"FillColor"_ustr) >>= nColor;
CPPUNIT_ASSERT_EQUAL(Color(0x66ffff), nColor);
// Test Picture fill type for cell
drawing::FillStyle aFillStyle(drawing::FillStyle_NONE);
xCell.set(xTable->getCellByPosition(0, 1), uno::UNO_QUERY_THROW);
xCell->getPropertyValue(u"FillStyle"_ustr) >>= aFillStyle;
CPPUNIT_ASSERT_EQUAL(int(drawing::FillStyle_BITMAP), static_cast<int>(aFillStyle));
// Test Gradient fill type for cell
xCell.set(xTable->getCellByPosition(1, 0), uno::UNO_QUERY_THROW);
xCell->getPropertyValue(u"FillStyle"_ustr) >>= aFillStyle;
CPPUNIT_ASSERT_EQUAL(int(drawing::FillStyle_GRADIENT), static_cast<int>(aFillStyle));
}
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testBulletStartNumber)
{
createSdImpressDoc("pptx/n90255.pptx");
saveAndReload(u"Impress Office Open XML"_ustr);
// Without the fix in place, this test would have failed here
CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong paragraph WritingMode", text::WritingMode2::RL_TB,
nWritingMode);
saveAndReload(u"Impress Office Open XML"_ustr);
uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0));
// Get first paragraph
uno::Reference<text::XTextRange> const xParagraph(getParagraphFromShape(0, xShape));
// first chunk of text
uno::Reference<text::XTextRange> xRun(getRunFromParagraph(0, xParagraph));
uno::Reference<beans::XPropertySet> xPropSet(xRun, uno::UNO_QUERY_THROW);
uno::Reference<text::XTextField> xField;
xPropSet->getPropertyValue(u"TextField"_ustr) >>= xField;
CPPUNIT_ASSERT_MESSAGE("Where is the text field?", xField.is());
saveAndReload(u"Impress Office Open XML"_ustr);
uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0));
// Get second paragraph
uno::Reference<text::XTextRange> const xParagraph(getParagraphFromShape(0, xShape));
// first chunk of text
uno::Reference<text::XTextRange> xRun(getRunFromParagraph(0, xParagraph));
uno::Reference<beans::XPropertySet> xPropSet(xRun, uno::UNO_QUERY_THROW);
uno::Reference<text::XTextField> xField;
xPropSet->getPropertyValue(u"TextField"_ustr) >>= xField;
CPPUNIT_ASSERT_MESSAGE("Where is the text field?", xField.is());
CPPUNIT_ASSERT_EQUAL_MESSAGE( "Bullet's left margin is wrong!", sal_Int32(1000),
pNumFmt->GetNumRule().GetLevel(0).GetAbsLSpace()); // left margin is 0.79 cm
CPPUNIT_ASSERT_EQUAL_MESSAGE("Bullet's indentation is wrong!", sal_Int32(-1000),
pNumFmt->GetNumRule().GetLevel(0).GetFirstLineOffset());
}
// tdf#165995: also export top/bottom margins, including zero margins (since default is not 0)
xCell.set(xTable->getCellByPosition(1, 0), uno::UNO_QUERY_THROW); // B1 - the synerzip cell
xCellPropSet.set(xCell, uno::UNO_QUERY_THROW);
sal_Int32 nBottomMargin(-1);
xCellPropSet->getPropertyValue(u"TextLowerDistance"_ustr) >>= nBottomMargin; // Without the accompanying patch, this was 127 (0.127 cm), not zero
CPPUNIT_ASSERT_EQUAL(sal_Int32(0), nBottomMargin);
}
xCellPropSet->getPropertyValue(u"LeftBorder"_ustr) >>= aBorderLine; // While importing the table cell border line width, it converts EMU->Hmm then divided result by 2. // To get original value of LineWidth need to multiple by 2.
sal_Int32 nLeftBorder = aBorderLine.LineWidth * 2;
nLeftBorder = oox::drawingml::convertHmmToEmu(nLeftBorder);
CPPUNIT_ASSERT(nLeftBorder);
CPPUNIT_ASSERT_EQUAL(Color(0x00b0f0), Color(ColorTransparency, aBorderLine.Color));
// must be a group shape
CPPUNIT_ASSERT_EQUAL(SdrObjKind::Group, pShape->GetObjIdentifier());
}
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testTdf112633)
{ // Load document and export it to a temporary file
createSdImpressDoc("pptx/tdf112633.pptx");
save(u"Impress Office Open XML"_ustr);
// Check image with artistic effect exists in the slide
assertXPath(pXmlDoc, "/p:sld/p:cSld/p:spTree/p:pic/p:blipFill/a:blip/a:extLst/a:ext/a14:imgProps/" "a14:imgLayer/a14:imgEffect/a14:artisticPencilGrayscale", "pencilSize", u"80");
// Check there is a relation with the .wdp file that contains the backed up image
OUString sEmbedId1 = getXPath(pXmlDoc, "/p:sld/p:cSld/p:spTree/p:pic/p:blipFill/a:blip/a:extLst/" "a:ext/a14:imgProps/a14:imgLayer", "embed");
OUString sXmlPath = "/rels:Relationships/rels:Relationship[@Id='" + sEmbedId1 + "']";
assertXPath(pRelsDoc, OUStringToOString(sXmlPath, RTL_TEXTENCODING_UTF8), "Target",
u"../media/hdphoto1.wdp");
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testCustomXml)
{ // Load document and export it to a temporary file
createSdImpressDoc("pptx/customxml.pptx");
save(u"Impress Office Open XML"_ustr);
// Check there is a relation to itemProps1.xml.
assertXPath(pRelsDoc, "/rels:Relationships/rels:Relationship", 1);
assertXPath(pRelsDoc, "/rels:Relationships/rels:Relationship[@Id='rId1']", "Target",
u"itemProps1.xml");
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testTdf94238)
{ // Load document and export it to a temporary file.
createSdImpressDoc("pptx/tdf94238.pptx");
save(u"Impress Office Open XML"_ustr);
uno::Reference<drawing::XDrawPagesSupplier> xDoc(mxComponent, uno::UNO_QUERY);
CPPUNIT_ASSERT(xDoc.is());
// Without the accompanying fix in place, this test would have failed with // the following details: // - aGradient.Style was awt::GradientStyle_ELLIPTICAL // - aGradient.YOffset was 70 // - aGradient.Border was 0
CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_RADIAL, aGradient.Style);
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int16>(100), aGradient.YOffset); // MCGR: 39->0 no border needed anymore with ooxml import
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int16>(0), aGradient.Border);
// MCGR: Use the completely imported gradient to check for correctness const basegfx::BColorStops aColorStops
= model::gradient::getColorStopsFromUno(aGradient.ColorStops);
// Without the accompanying fix in place, this test would have failed with // 'Expected: 0, Actual : 10592673', i.e. the start color of the gradient // was incorrect.
CPPUNIT_ASSERT_EQUAL(size_t(3), aColorStops.size());
CPPUNIT_ASSERT_EQUAL(0.0, aColorStops[0].getStopOffset());
CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(aColorStops[0].getStopColor()));
CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 0.39000000000000001));
CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(aColorStops[1].getStopColor()));
CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[2].getStopOffset(), 1.0));
CPPUNIT_ASSERT_EQUAL(Color(0x8b8b8b), Color(aColorStops[2].getStopColor()));
}
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testPictureTransparency)
{ // Load document and export it to a temporary file.
createSdImpressDoc("odp/image_transparency.odp");
save(u"Impress Office Open XML"_ustr);
uno::Reference<drawing::XDrawPagesSupplier> xDoc(mxComponent, uno::UNO_QUERY);
CPPUNIT_ASSERT(xDoc.is());
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testTdf125554)
{
createSdImpressDoc("pptx/tdf125554.pptx");
saveAndReload(u"Impress Office Open XML"_ustr);
uno::Reference<beans::XPropertySet> xShape = getShapeFromPage(0, 0);
uno::Any aFillTransparenceGradientName
= xShape->getPropertyValue(u"FillTransparenceGradientName"_ustr);
CPPUNIT_ASSERT(aFillTransparenceGradientName.has<OUString>()); // Without the accompanying fix in place, this test would have failed, i.e. the transparency of // the shape has no gradient, so it looked like a solid fill instead of a gradient fill.
CPPUNIT_ASSERT(!aFillTransparenceGradientName.get<OUString>().isEmpty());
}
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testRoundtripOwnLineStyles)
{ // Load odp document and read the LineDash values.
createSdImpressDoc("odp/LineStylesOwn.odp");
uno::Reference<drawing::XDrawPagesSupplier> xDocodp(mxComponent, uno::UNO_QUERY);
CPPUNIT_ASSERT(xDocodp.is());
uno::Reference<drawing::XDrawPage> xPageodp(xDocodp->getDrawPages()->getByIndex(0),
uno::UNO_QUERY);
CPPUNIT_ASSERT(xPageodp.is());
drawing::LineDash aLineDashodp[10]; for (sal_uInt16 i = 0; i < 10; i++)
{
uno::Reference<beans::XPropertySet> xShapeodp(getShape(i, xPageodp));
CPPUNIT_ASSERT(xShapeodp.is());
xShapeodp->getPropertyValue(u"LineDash"_ustr) >>= aLineDashodp[i];
}
// Save to pptx, reload and compare the LineDash values
save(u"Impress Office Open XML"_ustr);
uno::Reference<drawing::XDrawPagesSupplier> xDocpptx(mxComponent, uno::UNO_QUERY);
CPPUNIT_ASSERT(xDocpptx.is());
uno::Reference<drawing::XDrawPage> xPagepptx(xDocpptx->getDrawPages()->getByIndex(0),
uno::UNO_QUERY);
CPPUNIT_ASSERT(xPagepptx.is());
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testRoundtripPrstDash)
{ // load and save document, compare prstDash values in saved document with original.
createSdImpressDoc("pptx/presetDashDot.pptx");
save(u"Impress Office Open XML"_ustr);
// tdf#126746: Make sure that dash-dot pattern starts with the longer dash, as defined in OOXML // Make sure Style is drawing::DashStyle_RECTRELATIVE
uno::Reference<drawing::XDrawPagesSupplier> xDoc(mxComponent, uno::UNO_QUERY);
CPPUNIT_ASSERT(xDoc.is());
uno::Reference<drawing::XDrawPage> xPage(xDoc->getDrawPages()->getByIndex(0), uno::UNO_QUERY);
CPPUNIT_ASSERT(xPage.is()); for (sal_uInt16 i = 0; i < 10; i++)
{
drawing::LineDash aLineDash;
uno::Reference<beans::XPropertySet> xShape(getShape(i, xPage));
CPPUNIT_ASSERT(xShape.is());
xShape->getPropertyValue(u"LineDash"_ustr) >>= aLineDash;
CPPUNIT_ASSERT_MESSAGE("First dash is short", aLineDash.DotLen >= aLineDash.DashLen); bool bIsRectRelative = aLineDash.Style == drawing::DashStyle_RECTRELATIVE;
CPPUNIT_ASSERT_MESSAGE("not RECTRELATIVE", bIsRectRelative);
}
}
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testDashOnHairline)
{ // load and save document, make sure the custDash has 11 child elements.
createSdImpressDoc("odp/tdf127267DashOnHairline.odp");
save(u"Impress Office Open XML"_ustr);
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testNarrationNonMediaShape)
{
createSdImpressDoc("pptx/narration-non-media-shape.pptx"); // Without the accompanying fix in place, this test would have failed, // beans::UnknownPropertyException was thrown.
saveAndReload(u"Impress Office Open XML"_ustr);
}
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testCustomshapeBitmapfillSrcrect)
{
createSdImpressDoc("pptx/customshape-bitmapfill-srcrect.pptx");
save(u"Impress Office Open XML"_ustr);
// tdf#132680 // We are preventing the side effect of DOCX improvement to PPTX case. // Without the accompanying fix in place, this test would have failed with: // - Expected: 1 // - Actual : 0 // - XPath '/p:sld/p:cSld/p:spTree/p:sp/p:spPr/a:blipFill/a:srcRect' number of nodes is incorrect // i.e. <a:srcRect> was exported as <a:fillRect> in <a:stretch>, which made part of the image // invisible.
// tdf#134210 // Original values of attribute of l and r in xml files: <a:srcRect l="4393" r="4393"/> // No core feature for handling this. We add support to import filter. We crop the bitmap // physically during import and shouldn't export the l r t b attributes anymore. In the // future if we add core feature to LibreOffice, we should change the control value with // 4393.
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testTdf100348FontworkBitmapFill)
{
createSdImpressDoc("odp/tdf100348_FontworkBitmapFill.odp");
save(u"Impress Office Open XML"_ustr);
// Make sure the fontwork shape has a blip bitmap fill and a colored outline. // Without the patch, fill and outline were black.
xmlDocUniquePtr pXmlDoc = parseExport(u"ppt/slides/slide1.xml"_ustr); static constexpr OString sPathStart("//p:sld/p:cSld/p:spTree/p:sp/p:txBody/a:p/a:r/a:rPr"_ostr);
assertXPath(pXmlDoc, sPathStart + "/a:blipFill/a:blip", 1);
assertXPath(pXmlDoc, sPathStart + "/a:ln/a:solidFill/a:srgbClr", "val", u"ffbf00");
}
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testTdf100348FontworkGradientGlow)
{
createSdImpressDoc("odp/tdf100348_FontworkGradientGlow.odp");
save(u"Impress Office Open XML"_ustr);
// Make sure the fontwork shape has a gradient fill and a colored glow. // Without the patch, fill was black and no glow applied.
xmlDocUniquePtr pXmlDoc = parseExport(u"ppt/slides/slide1.xml"_ustr); static constexpr OString sPathStart("//p:sld/p:cSld/p:spTree/p:sp/p:txBody/a:p/a:r/a:rPr"_ostr);
assertXPath(pXmlDoc, sPathStart + "/a:gradFill/a:gsLst/a:gs[1]/a:srgbClr", "val", u"8d281e");
assertXPath(pXmlDoc, sPathStart + "/a:effectLst/a:glow", "rad", u"63360");
assertXPath(pXmlDoc, sPathStart + "/a:effectLst/a:glow/a:srgbClr", "val", u"ff4500");
}
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testTdf128345FullTransparentGradient)
{
createSdImpressDoc("odp/tdf128345_FullTransparentGradient.odp");
save(u"Impress Office Open XML"_ustr);
// Make sure the shape has no fill. Without the patch, fill was solid red.
xmlDocUniquePtr pXmlDoc = parseExport(u"ppt/slides/slide1.xml"_ustr);
assertXPath(pXmlDoc, "//p:sld/p:cSld/p:spTree/p:sp/p:spPr/a:noFill");
}
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testTdf128345GradientLinear)
{
createSdImpressDoc("odp/tdf128345_GradientLinear.odp");
save(u"Impress Office Open XML"_ustr);
// Make sure the shape has a lin fill. Without the patch, fill was solid red.
xmlDocUniquePtr pXmlDoc = parseExport(u"ppt/slides/slide1.xml"_ustr); static constexpr OString sPathStart("//p:sld/p:cSld/p:spTree/p:sp/p:spPr/a:gradFill"_ostr);
assertXPath(pXmlDoc, sPathStart + "/a:lin", "ang", u"3600000");
assertXPath(pXmlDoc, sPathStart + "/a:gsLst/a:gs", 2);
assertXPath(pXmlDoc, sPathStart + "/a:gsLst/a:gs[1]", "pos", u"25000");
assertXPath(pXmlDoc, sPathStart + "/a:gsLst/a:gs[1]/a:srgbClr", "val", u"ff0000");
assertXPath(pXmlDoc, sPathStart + "/a:gsLst/a:gs[1]/a:srgbClr/a:alpha", "val", u"20000");
assertXPath(pXmlDoc, sPathStart + "/a:gsLst/a:gs[2]", "pos", u"100000");
assertXPath(pXmlDoc, sPathStart + "/a:gsLst/a:gs[2]/a:srgbClr", "val", u"ff0000");
assertXPath(pXmlDoc, sPathStart + "/a:gsLst/a:gs[2]/a:srgbClr/a:alpha", "val", u"80000");
}
CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testTdf128345GradientRadial)
{
createSdImpressDoc("odp/tdf128345_GradientRadial.odp");
save(u"Impress Office Open XML"_ustr);
// Make sure the shape has transparency. In OOXML alpha means 'opacity' with default // 100000 for full opak, so only the full transparency with val 0 should be written.
xmlDocUniquePtr pXmlDoc = parseExport(u"ppt/slides/slide1.xml"_ustr); static constexpr OString sPathStart("//p:sld/p:cSld/p:spTree/p:sp/p:spPr/a:gradFill"_ostr);
assertXPath(pXmlDoc, sPathStart + "/a:gsLst/a:gs", 2);
assertXPath(pXmlDoc, sPathStart + "/a:gsLst/a:gs[1]/a:srgbClr", "val", u"ff0000");
assertXPath(pXmlDoc, sPathStart + "/a:gsLst/a:gs[1]/a:srgbClr/a:alpha", 0);
assertXPath(pXmlDoc, sPathStart + "/a:gsLst/a:gs[2]/a:srgbClr", "val", u"ffffff");
assertXPath(pXmlDoc, sPathStart + "/a:gsLst/a:gs[2]/a:srgbClr/a:alpha", "val", u"0");
}
--> --------------------
--> maximum size reached
--> --------------------
Messung V0.5
¤ Dauer der Verarbeitung: 0.23 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.