/* -*- 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 "WpftFilterFixture.hxx" #include "WpftLoader.hxx" #include "wpftimport.hxx" namespace { namespace uno = css::uno; class TextImportFilter : public writerperfect::ImportFilter { public: explicit TextImportFilter(const uno::Reference& rxContext) : writerperfect::ImportFilter(rxContext) { } // XServiceInfo virtual OUString SAL_CALL getImplementationName() override; virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override; virtual uno::Sequence SAL_CALL getSupportedServiceNames() override; private: virtual bool doDetectFormat(librevenge::RVNGInputStream& rInput, OUString& rTypeName) override; virtual bool doImportDocument(weld::Window* pWindow, librevenge::RVNGInputStream& rInput, OdtGenerator& rGenerator, utl::MediaDescriptor& rDescriptor) override; static void generate(librevenge::RVNGTextInterface& rDocument); }; bool TextImportFilter::doImportDocument(weld::Window*, librevenge::RVNGInputStream&, OdtGenerator& rGenerator, utl::MediaDescriptor&) { TextImportFilter::generate(rGenerator); return true; } bool TextImportFilter::doDetectFormat(librevenge::RVNGInputStream&, OUString& rTypeName) { rTypeName = "WpftDummyText"; return true; } // XServiceInfo OUString SAL_CALL TextImportFilter::getImplementationName() { return "org.libreoffice.comp.Wpft.QA.TextImportFilter"; } sal_Bool SAL_CALL TextImportFilter::supportsService(const OUString& rServiceName) { return cppu::supportsService(this, rServiceName); } uno::Sequence SAL_CALL TextImportFilter::getSupportedServiceNames() { return { "com.sun.star.document.ImportFilter", "com.sun.star.document.ExtendedTypeDetection" }; } void TextImportFilter::generate(librevenge::RVNGTextInterface& rDocument) { using namespace librevenge; rDocument.startDocument(RVNGPropertyList()); rDocument.openPageSpan(RVNGPropertyList()); rDocument.openParagraph(RVNGPropertyList()); rDocument.openSpan(RVNGPropertyList()); rDocument.insertText("My hovercraft is full of eels."); rDocument.closeSpan(); rDocument.closeParagraph(); rDocument.closePageSpan(); rDocument.endDocument(); } } namespace { class TextImportTest : public writerperfect::test::WpftFilterFixture { public: void test(); CPPUNIT_TEST_SUITE(TextImportTest); CPPUNIT_TEST(test); CPPUNIT_TEST_SUITE_END(); }; void TextImportTest::test() { using namespace css; rtl::Reference xFilter{ new TextImportFilter(m_xContext) }; writerperfect::test::WpftLoader aLoader(createDummyInput(), xFilter, "private:factory/swriter", m_xDesktop, m_xContext); uno::Reference xDoc(aLoader.getDocument(), uno::UNO_QUERY); CPPUNIT_ASSERT(xDoc.is()); uno::Reference xParaAccess(xDoc->getText(), uno::UNO_QUERY); CPPUNIT_ASSERT(xParaAccess.is()); uno::Reference xParas = xParaAccess->createEnumeration(); CPPUNIT_ASSERT(xParas.is()); CPPUNIT_ASSERT(xParas->hasMoreElements()); uno::Reference xPortionsAccess(xParas->nextElement(), uno::UNO_QUERY); CPPUNIT_ASSERT(xPortionsAccess.is()); uno::Reference xPortions = xPortionsAccess->createEnumeration(); CPPUNIT_ASSERT(xPortions.is()); CPPUNIT_ASSERT(xPortions->hasMoreElements()); uno::Reference xPortionProps(xPortions->nextElement(), uno::UNO_QUERY); CPPUNIT_ASSERT(xPortionProps.is()); OUString aPortionType; CPPUNIT_ASSERT(xPortionProps->getPropertyValue("TextPortionType") >>= aPortionType); CPPUNIT_ASSERT_EQUAL(OUString("Text"), aPortionType); uno::Reference xPortion(xPortionProps, uno::UNO_QUERY); CPPUNIT_ASSERT(xPortion.is()); CPPUNIT_ASSERT_EQUAL(OUString("My hovercraft is full of eels."), xPortion->getString()); CPPUNIT_ASSERT(!xPortions->hasMoreElements()); CPPUNIT_ASSERT(!xParas->hasMoreElements()); } CPPUNIT_TEST_SUITE_REGISTRATION(TextImportTest); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */