/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * Version: MPL 1.1 / GPLv3+ / LGPLv3+ * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Initial Developer of the Original Code is * Thorsten Behrens * Portions created by the Initial Developer are Copyright (C) 2011 the * Initial Developer. All Rights Reserved. * * Contributor(s): * Thorsten Behrens * Caolán McNamara * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 3 or later (the "GPLv3+"), or * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"), * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable * instead of those above. */ #include "precompiled_sw.hxx" #ifdef WNT #include #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "init.hxx" #include "swtypes.hxx" #include "doc.hxx" #include "docsh.hxx" #include "shellres.hxx" #include "docufld.hxx" SO2_DECL_REF(SwDocShell) SO2_IMPL_REF(SwDocShell) using namespace ::com::sun::star; static USHORT aWndFunc(Window *, USHORT, const String &, const String &) { return ERRCODE_BUTTON_OK; } /* Implementation of Swdoc-Test class */ class SwDocTest : public CppUnit::TestFixture { public: SwDocTest(); ~SwDocTest(); virtual void setUp(); virtual void tearDown(); void randomTest(); void testPageDescName(); void testFileNameFields(); CPPUNIT_TEST_SUITE(SwDocTest); CPPUNIT_TEST(randomTest); CPPUNIT_TEST(testPageDescName); CPPUNIT_TEST(testFileNameFields); CPPUNIT_TEST_SUITE_END(); private: uno::Reference m_xContext; uno::Reference m_xFactory; SwDoc *m_pDoc; SwDocShellRef m_xDocShRef; }; void SwDocTest::testPageDescName() { ShellResource aShellResources; std::vector aResults; //These names must be unique for each different combination, otherwise //duplicate page description names may exist, which will causes lookup //by name to be incorrect, and so the corresponding export to .odt aResults.push_back(aShellResources.GetPageDescName(1, ShellResource::NORMAL_PAGE)); aResults.push_back(aShellResources.GetPageDescName(1, ShellResource::FIRST_PAGE)); aResults.push_back(aShellResources.GetPageDescName(1, ShellResource::FOLLOW_PAGE)); std::sort(aResults.begin(), aResults.end()); aResults.erase(std::unique(aResults.begin(), aResults.end()), aResults.end()); CPPUNIT_ASSERT_MESSAGE("GetPageDescName results must be unique", aResults.size() == 3); } //See https://bugs.freedesktop.org/show_bug.cgi?id=32463 for motivation void SwDocTest::testFileNameFields() { //Here's a file name with some chars in it that will be %% encoded, when expanding //SwFileNameFields we want to restore the original readable filename utl::TempFile aTempFile(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("demo [name]"))); aTempFile.EnableKillingFile(); INetURLObject aTempFileURL(aTempFile.GetURL()); String sFileURL = aTempFileURL.GetMainURL(INetURLObject::NO_DECODE); SfxMedium aDstMed(sFileURL, STREAM_STD_READWRITE, true); SfxFilter aFilter( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Text")), rtl::OUString(), 0, 0, rtl::OUString(), 0, rtl::OUString(), rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TEXT")), rtl::OUString() ); aDstMed.SetFilter(&aFilter); m_xDocShRef->DoSaveAs(aDstMed); m_xDocShRef->DoSaveCompleted(&aDstMed); const INetURLObject &rUrlObj = m_xDocShRef->GetMedium()->GetURLObject(); SwFileNameFieldType aNameField(m_pDoc); { rtl::OUString sResult(aNameField.Expand(FF_NAME)); rtl::OUString sExpected(rUrlObj.getName(INetURLObject::LAST_SEGMENT, true,INetURLObject::DECODE_WITH_CHARSET)); CPPUNIT_ASSERT_MESSAGE("Expected Readable FileName", sResult == sExpected); } { rtl::OUString sResult(aNameField.Expand(FF_PATHNAME)); rtl::OUString sExpected(rUrlObj.GetFull()); CPPUNIT_ASSERT_MESSAGE("Expected Readable FileName", sResult == sExpected); } { rtl::OUString sResult(aNameField.Expand(FF_PATH)); INetURLObject aTemp(rUrlObj); aTemp.removeSegment(); rtl::OUString sExpected(aTemp.PathToFileName()); CPPUNIT_ASSERT_MESSAGE("Expected Readable FileName", sResult == sExpected); } { rtl::OUString sResult(aNameField.Expand(FF_NAME_NOEXT)); rtl::OUString sExpected(rUrlObj.getName(INetURLObject::LAST_SEGMENT, true,INetURLObject::DECODE_WITH_CHARSET)); //Chop off .tmp sExpected = sExpected.copy(0, sExpected.getLength() - 4); CPPUNIT_ASSERT_MESSAGE("Expected Readable FileName", sResult == sExpected); } m_xDocShRef->DoInitNew(0); } void SwDocTest::randomTest() { CPPUNIT_ASSERT_MESSAGE("SwDoc::IsRedlineOn()", !m_pDoc->IsRedlineOn()); } SwDocTest::SwDocTest() { m_xContext = cppu::defaultBootstrap_InitialComponentContext(); m_xFactory = m_xContext->getServiceManager(); uno::Reference xSM(m_xFactory, uno::UNO_QUERY_THROW); //Without this we're crashing because callees are using //getProcessServiceFactory. In general those should be removed in favour //of retaining references to the root ServiceFactory as its passed around comphelper::setProcessServiceFactory(xSM); // initialise UCB-Broker uno::Sequence aUcbInitSequence(2); aUcbInitSequence[0] <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Local")); aUcbInitSequence[1] <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Office")); bool bInitUcb = ucbhelper::ContentBroker::initialize(xSM, aUcbInitSequence); CPPUNIT_ASSERT_MESSAGE("Should be able to initialize UCB", bInitUcb); uno::Reference xUcb = ucbhelper::ContentBroker::get()->getContentProviderManagerInterface(); uno::Reference xFileProvider(xSM->createInstance( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.ucb.FileContentProvider"))), uno::UNO_QUERY); xUcb->registerContentProvider(xFileProvider, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("file")), sal_True); InitVCL(xSM); SwDLL::Init(); ErrorHandler::RegisterDisplay(&aWndFunc); } void SwDocTest::setUp() { m_pDoc = new SwDoc; m_xDocShRef = new SwDocShell(m_pDoc, SFX_CREATE_MODE_EMBEDDED); m_xDocShRef->DoInitNew(0); } SwDocTest::~SwDocTest() { } void SwDocTest::tearDown() { m_xDocShRef.Clear(); delete m_pDoc; } CPPUNIT_TEST_SUITE_REGISTRATION(SwDocTest); CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */