Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/LibreOffice/oox/qa/unit/   (Office von Apache Version 25.8.3.2©)  Datei vom 5.10.2025 mit Größe 6 kB image not shown  

Quelle  mcgr.cxx   Sprache: C

 
/* -*- 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 <test/unoapixml_test.hxx>

using namespace ::com::sun::star;

namespace
{
/// Covers tests for multi-color gradient (MCGR) feature, available since LO 7.6.0.
class TestMCGR : public UnoApiXmlTest
{
public:
    TestMCGR()
        : UnoApiXmlTest(u"/oox/qa/unit/data/"_ustr)
    {
    }
};

CPPUNIT_TEST_FIXTURE(TestMCGR, testFontworkColorGradient)
{
    // Given a document with three-color gradient on a Fontwork.
    loadFromFile(u"MCGR_FontworkColorGradient.fodp");
    // Save it to PPTX
    save(u"Impress Office Open XML"_ustr);
    // And make sure a multi-color gradient fill is exported.
    xmlDocUniquePtr pXmlDoc = parseExport(u"ppt/slides/slide1.xml"_ustr);
    // linear gradient with 30deg angle
    assertXPath(pXmlDoc, "//a:r/a:rPr/a:gradFill/a:lin", "ang", u"3600000");
    // three color stops, no transparency
    static constexpr OString sPath = "//a:r/a:rPr/a:gradFill/a:gsLst/"_ostr;
    assertXPath(pXmlDoc, sPath + "a:gs", 3);
    assertXPath(pXmlDoc, sPath + "a:gs[1]""pos", u"0");
    assertXPath(pXmlDoc, sPath + "a:gs[1]/a:srgbClr""val", u"ff1493");
    assertXPath(pXmlDoc, sPath + "a:gs[2]""pos", u"30000");
    assertXPath(pXmlDoc, sPath + "a:gs[2]/a:srgbClr""val", u"ffff00");
    assertXPath(pXmlDoc, sPath + "a:gs[3]""pos", u"100000");
    assertXPath(pXmlDoc, sPath + "a:gs[3]/a:srgbClr""val", u"00ffff");
}

CPPUNIT_TEST_FIXTURE(TestMCGR, testFontworkColorGradientWord)
{
    // Fontwork is handled different in Word than in PowerPoint documents. So we need a separate
    // test for a text document.
    // Given a document with three-color gradient on a Fontwork.
    loadFromFile(u"MCGR_FontworkColorGradient.fodt");
    // Save it to DOCX
    save(u"Office Open XML Text"_ustr);
    // And make sure a multi-color gradient fill is exported.
    xmlDocUniquePtr pXmlDoc = parseExport(u"word/document.xml"_ustr);
    // linear gradient with 30deg angle
    assertXPath(pXmlDoc, "//w14:lin", "ang", u"3600000");
    // three color stops, no transparency
    static constexpr OString sPath = "//w14:gradFill/w14:gsLst/"_ostr;
    assertXPath(pXmlDoc, sPath + "w14:gs", 3);
    assertXPath(pXmlDoc, sPath + "w14:gs[1]""pos", u"0");
    assertXPath(pXmlDoc, sPath + "w14:gs[1]/w14:srgbClr""val", u"ff1493");
    assertXPath(pXmlDoc, sPath + "w14:gs[2]""pos", u"30000");
    assertXPath(pXmlDoc, sPath + "w14:gs[2]/w14:srgbClr""val", u"ffff00");
    assertXPath(pXmlDoc, sPath + "w14:gs[3]""pos", u"100000");
    assertXPath(pXmlDoc, sPath + "w14:gs[3]/w14:srgbClr""val", u"00ffff");
}

CPPUNIT_TEST_FIXTURE(TestMCGR, testTdf155825_SourcOffsetRangeDifferent)
{
    // Color gradient has offset range [0,0.8] and transparency gradient has offset range [0,1].
    loadFromFile(u"tdf155825_MCGR_SourceOffsetRangeDifferent.fodp");
    // Save it to PPTX
    // Without fix, a debug-build would have crashed in oox/source/export/drawingml.cxx from
    // assert(false && "oox::WriteGradientFill: non-synchronized gradients (!)");
    save(u"Impress Office Open XML"_ustr);
}

CPPUNIT_TEST_FIXTURE(TestMCGR, testStepCount)
{
    // Given a document with two-color gradient with StepCount 4.
    loadFromFile(u"tdf155852_MCGR_StepCount4.fodp");
    // Save it to PPTX
    save(u"Impress Office Open XML"_ustr);
    xmlDocUniquePtr pXmlDoc = parseExport(u"ppt/slides/slide1.xml"_ustr);

    // Without the fix the colors in the sections were wrong. And when opening a file with StepCount
    // and saving it immediately to pptx, a continuous gradient might be produced.

    static constexpr OString sPath = "//a:gradFill/a:gsLst/"_ostr;
    // The default way of load and save would have produced 2 stops, but we need start stop, end stop
    // and 3*2 inner stops.
    assertXPath(pXmlDoc, sPath + "a:gs", 8);
    // A sharp color changes needs a pair of two stops with same offset.
    assertXPath(pXmlDoc, sPath + "a:gs[@pos='25000']", 2);
    assertXPath(pXmlDoc, sPath + "a:gs[@pos='50000']", 2);
    assertXPath(pXmlDoc, sPath + "a:gs[@pos='75000']", 2);
    // Without fix the color was 808080.
    assertXPath(pXmlDoc, sPath + "a:gs[@pos='75000'][1]/a:srgbClr""val", u"55aaaa");
    // Without fix the color was 40bfbf, producing a gradient in the last segment.
    assertXPath(pXmlDoc, sPath + "a:gs[@pos='75000'][2]/a:srgbClr""val", u"00ffff");
}

CPPUNIT_TEST_FIXTURE(TestMCGR, testAxialColorLinearTrans)
{
    // Given a document with a shape with axial color gradient from inside red to outside cyan and
    // two-stop linear transparency gradient from start 80% to end 0%.
    loadFromFile(u"tdf155827_MCGR_AxialColorLinearTrans.fodp");
    // Save it to PPTX
    save(u"Impress Office Open XML"_ustr);
    // OOXML has transparency together with color. Transparency is stored as opacity.
    // Expected: pos 0 #00ffff 20000, pos 50000 #ff0000 60000, pos 100000 #00ffff 100000.
    // Because of conversion through gray color the opacity values are not exact. If rounding
    // method will be changed, the test needs to be adjusted.

    xmlDocUniquePtr pXmlDoc = parseExport(u"ppt/slides/slide1.xml"_ustr);
    static constexpr OString sPath = "//a:gradFill/a:gsLst/"_ostr;
    assertXPath(pXmlDoc, sPath + "a:gs", 3);
    assertXPath(pXmlDoc, sPath + "a:gs[1]""pos", u"0");
    assertXPath(pXmlDoc, sPath + "a:gs[1]/a:srgbClr""val", u"00ffff");
    assertXPath(pXmlDoc, sPath + "a:gs[1]/a:srgbClr/a:alpha""val", u"20000");
    assertXPath(pXmlDoc, sPath + "a:gs[2]""pos", u"50000");
    assertXPath(pXmlDoc, sPath + "a:gs[2]/a:srgbClr""val", u"ff0000");
    assertXPath(pXmlDoc, sPath + "a:gs[2]/a:srgbClr/a:alpha""val", u"60396");
    assertXPath(pXmlDoc, sPath + "a:gs[3]""pos", u"100000");
    assertXPath(pXmlDoc, sPath + "a:gs[3]/a:srgbClr""val", u"00ffff");
    // no <a:alpha> element for default val="100000"
    assertXPath(pXmlDoc, sPath + "a:gs[3]/a:srgbClr/a:alpha", 0);
}
}

CPPUNIT_PLUGIN_IMPLEMENT();

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Messung V0.5
C=94 H=93 G=93

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

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.