/* -*- 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 #include #include #include #include #include #include #include #include #include #include namespace { using namespace css::uno; using namespace css::io; using namespace css::graphic; using drawinglayer::primitive2d::Primitive2DSequence; using drawinglayer::primitive2d::Primitive2DContainer; class Test : public test::BootstrapFixture, public XmlTestTools { void checkRectPrimitive(Primitive2DSequence const & rPrimitive); void testWorking(); void TestDrawString(); void TestDrawStringTransparent(); void TestDrawLine(); Primitive2DSequence parseEmf(const OUString& aSource); public: CPPUNIT_TEST_SUITE(Test); CPPUNIT_TEST(testWorking); CPPUNIT_TEST(TestDrawString); CPPUNIT_TEST(TestDrawStringTransparent); CPPUNIT_TEST(TestDrawLine); CPPUNIT_TEST_SUITE_END(); }; Primitive2DSequence Test::parseEmf(const OUString& aSource) { const Reference xEmfParser = EmfTools::create(m_xContext); OUString aUrl = m_directories.getURLFromSrc(aSource); OUString aPath = m_directories.getPathFromSrc(aSource); SvFileStream aFileStream(aUrl, StreamMode::READ); std::size_t nSize = aFileStream.remainingSize(); std::unique_ptr pBuffer(new sal_Int8[nSize + 1]); aFileStream.ReadBytes(pBuffer.get(), nSize); pBuffer[nSize] = 0; Sequence aData(pBuffer.get(), nSize + 1); Reference aInputStream(new comphelper::SequenceInputStream(aData)); css::uno::Sequence< css::beans::PropertyValue > aEmptyValues; return xEmfParser->getDecomposition(aInputStream, aPath, aEmptyValues); } void Test::checkRectPrimitive(Primitive2DSequence const & rPrimitive) { Primitive2dXmlDump dumper; xmlDocPtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer(rPrimitive)); CPPUNIT_ASSERT (pDocument); // emfio: add examples (later) // assertXPath(pDocument, "/primitive2D/transform/polypolygoncolor", "color", "#00cc00"); // rect background color // assertXPath(pDocument, "/primitive2D/transform/polypolygoncolor", "height", "100"); // rect background height // assertXPath(pDocument, "/primitive2D/transform/polypolygoncolor", "width", "100"); // rect background width } void Test::testWorking() { Primitive2DSequence aSequenceRect = parseEmf("/emfio/qa/cppunit/emf/data/fdo79679-2.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast(aSequenceRect.getLength())); checkRectPrimitive(aSequenceRect); } void Test::TestDrawString() { // This unit checks for a correct import of an EMF+ file with only one DrawString Record // Since the text is undecorated the optimal choice is a simpletextportion primitive // first, get the sequence of primitives and dump it Primitive2DSequence aSequence = parseEmf("/emfio/qa/cppunit/emf/data/TestDrawString.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast(aSequence.getLength())); Primitive2dXmlDump dumper; xmlDocPtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer(aSequence)); CPPUNIT_ASSERT (pDocument); // check correct import of the DrawString: height, position, text, color and font assertXPath(pDocument, "/primitive2D/metafile/transform/transform/textsimpleportion", "height", "120"); assertXPath(pDocument, "/primitive2D/metafile/transform/transform/textsimpleportion", "x", "817"); assertXPath(pDocument, "/primitive2D/metafile/transform/transform/textsimpleportion", "y", "1137"); assertXPath(pDocument, "/primitive2D/metafile/transform/transform/textsimpleportion", "text", "TEST"); assertXPath(pDocument, "/primitive2D/metafile/transform/transform/textsimpleportion", "fontcolor", "#000000"); assertXPath(pDocument, "/primitive2D/metafile/transform/transform/textsimpleportion", "familyname", "CALIBRI"); } void Test::TestDrawStringTransparent() { // This unit checks for a correct import of an EMF+ file with one DrawString Record with transparency // first, get the sequence of primitives and dump it Primitive2DSequence aSequence = parseEmf("/emfio/qa/cppunit/emf/data/TestDrawStringTransparent.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast(aSequence.getLength())); Primitive2dXmlDump dumper; xmlDocPtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer(aSequence)); CPPUNIT_ASSERT (pDocument); //TODO Strange that transparency is set to 0 even if it is not fully transparent // check correct import of the DrawString: transparency, height, position, text, color and font assertXPath(pDocument, "/primitive2D/metafile/transform/transform/unifiedtransparence", "transparence", "0"); //TODO Where was textsimpleportion gone? //assertXPath(pDocument, "/primitive2D/metafile/transform/transform/textsimpleportion", "height", "276"); //assertXPath(pDocument, "/primitive2D/metafile/transform/transform/textsimpleportion", "x", "25"); //assertXPath(pDocument, "/primitive2D/metafile/transform/transform/textsimpleportion", "y", "323"); //assertXPath(pDocument, "/primitive2D/metafile/transform/transform/textsimpleportion", "text", "Transparent Text"); //assertXPath(pDocument, "/primitive2D/metafile/transform/transform/textsimpleportion", "fontcolor", "#000000"); //assertXPath(pDocument, "/primitive2D/metafile/transform/transform/textsimpleportion", "familyname", "CALIBRI"); } void Test::TestDrawLine() { // This unit checks for a correct import of an EMF+ file with only one DrawLine Record // The line is colored and has a specified width, therefore a polypolygonstroke primitive is the optimal choice // first, get the sequence of primitives and dump it Primitive2DSequence aSequence = parseEmf("/emfio/qa/cppunit/emf/data/TestDrawLine.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast(aSequence.getLength())); Primitive2dXmlDump dumper; xmlDocPtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer(aSequence)); CPPUNIT_ASSERT (pDocument); // check correct import of the DrawLine: color and width of the line assertXPath(pDocument, "/primitive2D/metafile/transform/polypolygonstroke/line", "color", "#000000"); assertXPath(pDocument, "/primitive2D/metafile/transform/polypolygonstroke/line", "width", "33"); } CPPUNIT_TEST_SUITE_REGISTRATION(Test); } CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */