From 13184da2a39bc162b1912affd099daae74eb3a88 Mon Sep 17 00:00:00 2001 From: Katarina Behrens Date: Thu, 30 Jun 2016 22:39:28 +0200 Subject: screenshots: move shared code to separate class Change-Id: I1760de221bc53d345c2bbfb4fe878c120073ea45 --- include/test/screenshot_test.hxx | 39 +++++++++++++++ test/Library_test.mk | 1 + test/source/screenshot_test.cxx | 102 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 142 insertions(+) create mode 100644 include/test/screenshot_test.hxx create mode 100644 test/source/screenshot_test.cxx diff --git a/include/test/screenshot_test.hxx b/include/test/screenshot_test.hxx new file mode 100644 index 000000000000..f07c29a9e65b --- /dev/null +++ b/include/test/screenshot_test.hxx @@ -0,0 +1,39 @@ +/* -*- 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/. + */ + +#ifndef INCLUDED_TEST_SCREENSHOT_TEST_HXX +#define INCLUDED_TEST_SCREENSHOT_TEST_HXX + +#include +#include +#include +#include +#include + +class VclAbstractDialog; + + +class OOO_DLLPUBLIC_TEST ScreenshotTest : public test::BootstrapFixture, public unotest::MacrosTest +{ +public: + ScreenshotTest(); + + virtual void setUp() override; + virtual void tearDown() override; + + void dumpDialogToPath( VclAbstractDialog& rDialog ); + +private: + void saveScreenshot( VclAbstractDialog& rDialog ); + OUString m_aScreenshotDirectory; +}; + +#endif // INCLUDED_TEST_SCREENSHOT_TEST_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/test/Library_test.mk b/test/Library_test.mk index df7bfd210a0a..2e34b219ac94 100644 --- a/test/Library_test.mk +++ b/test/Library_test.mk @@ -47,6 +47,7 @@ $(eval $(call gb_Library_add_exception_objects,test,\ test/source/mtfxmldump \ test/source/xmlwriter \ test/source/primitive2dxmldump \ + test/source/screenshot_test \ )) # vim: set noet sw=4 ts=4: 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 +#include +#include +#include +#include + +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 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: */ -- cgit v1.2.3