diff options
author | Katarina Behrens <Katarina.Behrens@cib.de> | 2016-06-30 22:39:28 +0200 |
---|---|---|
committer | Thorsten Behrens <Thorsten.Behrens@CIB.de> | 2016-08-18 02:39:11 +0200 |
commit | 13184da2a39bc162b1912affd099daae74eb3a88 (patch) | |
tree | 4f6ddda873640294c4d34ca16d7d4c860251b3a9 /test/source/screenshot_test.cxx | |
parent | 2e288225568077df79703da086668b0d533449c8 (diff) |
screenshots: move shared code to separate class
Change-Id: I1760de221bc53d345c2bbfb4fe878c120073ea45
Diffstat (limited to 'test/source/screenshot_test.cxx')
-rw-r--r-- | test/source/screenshot_test.cxx | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/test/source/screenshot_test.cxx b/test/source/screenshot_test.cxx new file mode 100644 index 000000000000..d02e73841827 --- /dev/null +++ b/test/source/screenshot_test.cxx @@ -0,0 +1,102 @@ +/* -*- 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/screenshot_test.hxx" + +#include <com/sun/star/util/XCloseable.hpp> +#include <com/sun/star/frame/Desktop.hpp> +#include <comphelper/processfactory.hxx> +#include <vcl/abstdlg.hxx> +#include <vcl/pngwrite.hxx> + +namespace { + void splitHelpId( OString& rHelpId, OUString& rDirname, OUString &rBasename ) + { + sal_Int32 nIndex = rHelpId.lastIndexOf( '/' ); + + if( nIndex > 0 ) + rDirname = OStringToOUString( rHelpId.copy( 0, nIndex ), RTL_TEXTENCODING_UTF8 ); + + if( rHelpId.getLength() > nIndex+1 ) + rBasename= OStringToOUString( rHelpId.copy( nIndex+1 ), RTL_TEXTENCODING_UTF8 ); + } +} + +using namespace css; +using namespace css::uno; + +ScreenshotTest::ScreenshotTest() + : m_aScreenshotDirectory("/workdir/screenshots/") +{ +} + +void ScreenshotTest::setUp() +{ + test::BootstrapFixture::setUp(); + + mxDesktop = css::frame::Desktop::create( comphelper::getComponentContext(getMultiServiceFactory()) ); + CPPUNIT_ASSERT_MESSAGE("no desktop!", mxDesktop.is()); + + osl::FileBase::RC err = osl::Directory::create( m_directories.getURLFromSrc( m_aScreenshotDirectory ) ); + CPPUNIT_ASSERT_MESSAGE( "Failed to create screenshot directory", (err == osl::FileBase::E_None || err == osl::FileBase::E_EXIST) ); +} + +void ScreenshotTest::tearDown() +{ + test::BootstrapFixture::tearDown(); +} + +void ScreenshotTest::saveScreenshot( VclAbstractDialog& rDialog ) +{ + const Bitmap aScreenshot(rDialog.createScreenshot()); + + if (!aScreenshot.IsEmpty()) + { + OString aScreenshotId = rDialog.GetScreenshotId(); + OUString aDirname, aBasename; + splitHelpId( aScreenshotId, aDirname, aBasename ); + aDirname = m_aScreenshotDirectory + aDirname; + + osl::FileBase::RC err = osl::Directory::createPath( m_directories.getURLFromSrc( aDirname )); + CPPUNIT_ASSERT_MESSAGE( OUStringToOString( "Failed to create " + aDirname, RTL_TEXTENCODING_UTF8).getStr(), + (err == osl::FileBase::E_None || err == osl::FileBase::E_EXIST) ); + + OUString aFullPath = m_directories.getSrcRootPath() + aDirname + "/" + aBasename + ".png"; + SvFileStream aNew(aFullPath, StreamMode::WRITE | StreamMode::TRUNC); + CPPUNIT_ASSERT_MESSAGE( OUStringToOString( "Failed to open " + OUString::number(aNew.GetErrorCode()), RTL_TEXTENCODING_UTF8).getStr(), aNew.IsOpen() ); + + vcl::PNGWriter aPNGWriter(aScreenshot); + aPNGWriter.Write(aNew); + } +} + +void ScreenshotTest::dumpDialogToPath( VclAbstractDialog& rDialog ) +{ + const std::vector<OString> aPageDescriptions(rDialog.getAllPageUIXMLDescriptions()); + + if (aPageDescriptions.size()) + { + for (sal_uInt32 a(0); a < aPageDescriptions.size(); a++) + { + if (rDialog.selectPageByUIXMLDescription(aPageDescriptions[a])) + { + saveScreenshot( rDialog ); + } + else + { + CPPUNIT_ASSERT(false); + } + } + } + else + { + saveScreenshot( rDialog ); + } +} +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |