Kaydet (Commit) 13184da2 authored tarafından Katarina Behrens's avatar Katarina Behrens Kaydeden (comit) Thorsten Behrens

screenshots: move shared code to separate class

Change-Id: I1760de221bc53d345c2bbfb4fe878c120073ea45
üst 2e288225
/* -*- 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 <sal/config.h>
#include <test/bootstrapfixture.hxx>
#include <unotest/macros_test.hxx>
#include <com/sun/star/lang/XComponent.hpp>
#include <osl/file.hxx>
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: */
......@@ -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:
/* -*- 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: */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment