Kaydet (Commit) b8d86729 authored tarafından Markus Mohrhard's avatar Markus Mohrhard

add regression test for writer

use the hidden layout dump export filter to export the state of the
layout and compare it against a reference file

Still a work in progress.
üst 1390a2ce
# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
#*************************************************************************
# 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 or as specified alternatively below. 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.
#
# Major Contributor(s):
# Copyright (C) 2011 Red Hat, Inc., Caolán McNamara <caolanm@redhat.com>
# (initial developer)
#
# All Rights Reserved.
#
# For minor contributions see the git repository.
#
# 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.
#*************************************************************************
$(eval $(call gb_CppunitTest_CppunitTest,sw_regression_test))
$(eval $(call gb_CppunitTest_add_exception_objects,sw_regression_test, \
sw/qa/extras/regression-test \
))
$(eval $(call gb_CppunitTest_add_linked_libs,sw_regression_test, \
avmedia \
basegfx \
comphelper \
cppu \
cppuhelper \
drawinglayer \
editeng \
fileacc \
for \
forui \
i18nisolang1 \
msfilter \
oox \
sal \
salhelper \
sax \
sb \
sw \
sfx \
sot \
svl \
svt \
svx \
svxcore \
test \
tl \
tk \
ucbhelper \
unotest \
utl \
vbahelper \
vcl \
xo \
$(gb_STDLIBS) \
))
$(eval $(call gb_CppunitTest_set_include,sw_regression_test,\
-I$(realpath $(SRCDIR)/sw/source/ui/inc) \
-I$(realpath $(SRCDIR)/sw/inc) \
$$(INCLUDE) \
))
$(eval $(call gb_CppunitTest_add_api,sw_regression_test,\
offapi \
oovbaapi \
udkapi \
))
$(eval $(call gb_CppunitTest_uses_ure,sw_regression_test))
$(eval $(call gb_CppunitTest_add_type_rdbs,sw_regression_test,\
oovbaapi \
types \
))
$(eval $(call gb_CppunitTest_add_components,sw_regression_test,\
basic/util/sb \
comphelper/util/comphelp \
configmgr/source/configmgr \
dbaccess/util/dba \
fileaccess/source/fileacc \
filter/source/config/cache/filterconfig1 \
forms/util/frm \
framework/util/fwk \
i18npool/util/i18npool \
oox/util/oox \
package/source/xstor/xstor \
package/util/package2 \
sax/source/expatwrap/expwrap \
sax/source/fastparser/fastsax \
sw/util/sw \
sw/util/swd \
sw/util/msword \
sw/util/vbaswobj \
scripting/source/basprov/basprov \
scripting/util/scriptframe \
sfx2/util/sfx \
sot/util/sot \
svl/source/fsstor/fsstorage \
toolkit/util/tk \
ucb/source/core/ucb1 \
ucb/source/ucp/file/ucpfile1 \
ucb/source/ucp/tdoc/ucptdoc1 \
unotools/util/utl \
unoxml/source/rdf/unordf \
unoxml/source/service/unoxml \
))
$(eval $(call gb_CppunitTest_set_args,sw_regression_test,\
--headless \
--protector unoexceptionprotector$(gb_Library_DLLEXT) unoexceptionprotector \
"-env:CONFIGURATION_LAYERS=xcsxcu:$(call gb_CppunitTarget__make_url,$(OUTDIR)/xml/registry) module:$(call gb_CppunitTarget__make_url,$(OUTDIR)/xml/registry/spool) xcsxcu:$(call gb_CppunitTarget__make_url,$(OUTDIR)/unittest/registry)" \
))
# .../spool is required for the (somewhat strange) filter configuration
# we need to
# a) explicitly depend on library msword because it is not implied by a link
# relation
# b) explicitly depend on the sw resource files needed at unit-test runtime
$(call gb_CppunitTest_get_target,sw_regression_test) : \
$(call gb_Library_get_target,localedata_en) \
$(call gb_Library_get_target,msword) \
$(if $(filter-out $(OS),IOS),$(call gb_Library_get_target,vbaswobj)) \
# vim: set noet sw=4 ts=4:
/* -*- 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 or as specified alternatively below. 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.
*
* Major Contributor(s):
* Copyright (C) 2012 Markus Mohrhard <markus.mohrhard@googlemail.com> (initial developer)
*
* All Rights Reserved.
*
* For minor contributions see the git repository.
*
* 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 <sal/config.h>
#include <test/bootstrapfixture.hxx>
#include <unotest/macros_test.hxx>
#include <com/sun/star/lang/XComponent.hpp>
#include <com/sun/star/document/XFilter.hpp>
#include <com/sun/star/frame/XStorable.hpp>
#include <sfx2/app.hxx>
#include <sfx2/docfilt.hxx>
#include <sfx2/docfile.hxx>
#include <sfx2/sfxmodelfactory.hxx>
#include <svl/stritem.hxx>
#include <test/bootstrapfixture.hxx>
#include <rtl/strbuf.hxx>
#include <osl/file.hxx>
#include <com/sun/star/frame/XDesktop.hpp>
#include <com/sun/star/lang/XComponent.hpp>
#include <string>
#include <iostream>
#include <rtl/oustringostreaminserter.hxx>
using namespace com::sun::star;
using namespace com::sun::star::uno;
namespace {
bool compareFiles( const rtl::OUString& aFileNameOne, const rtl::OUString& aFileNameTwo)
{
rtl::OString aOFileNameOne = rtl::OUStringToOString(aFileNameOne, RTL_TEXTENCODING_UTF8);
std::ifstream aFileOne(aOFileNameOne.getStr());
rtl::OString aOFileNameTwo = rtl::OUStringToOString(aFileNameTwo, RTL_TEXTENCODING_UTF8);
std::ifstream aFileTwo(aOFileNameTwo.getStr());
CPPUNIT_ASSERT_MESSAGE("files not open", aFileOne.is_open() && aFileTwo.is_open());
sal_Int32 nLine = 1;
while(!aFileOne.eof() && !aFileTwo.eof())
{
std::string aLineFileOne;
std::string aLineFileTwo;
std::getline(aFileOne, aLineFileOne);
std::getline(aFileTwo, aLineFileTwo);
if( aLineFileOne != aLineFileTwo)
{
rtl::OStringBuffer aErrorMessage("Mismatch between reference file and exported file in line ");
aErrorMessage.append(nLine).append(".\nExpected: ");
aErrorMessage.append(aLineFileOne.c_str()).append("\nFound : ").append(aLineFileTwo.c_str());
CPPUNIT_ASSERT_MESSAGE(aErrorMessage.getStr(), false);
}
nLine++;
}
return true;
}
}
class SwRegressionTest : public test::BootstrapFixture, unotest::MacrosTest
{
public:
SwRegressionTest();
virtual void setUp();
virtual void tearDown();
void test();
CPPUNIT_TEST_SUITE(SwRegressionTest);
CPPUNIT_TEST(test);
CPPUNIT_TEST_SUITE_END();
private:
uno::Reference<uno::XInterface> m_xWriterComponent;
::rtl::OUString m_aBaseString;
};
void SwRegressionTest::test()
{
uno::Reference< lang::XComponent > xComponent = loadFromDesktop(getURLFromSrc("/sw/qa/extras/data/odt/test.odt"));
CPPUNIT_ASSERT(xComponent.is());
uno::Reference< frame::XStorable > xStorable(xComponent, UNO_QUERY_THROW);
CPPUNIT_ASSERT(xStorable.is());
uno::Sequence< beans::PropertyValue > aArgs(2);
beans::PropertyValue aValue;
uno::Any aAny;
aAny <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("writer_layout_dump"));
aValue.Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FilterName"));
aValue.Value = aAny;
aValue.State = beans::PropertyState_DIRECT_VALUE;
aArgs[0] = aValue;
beans::PropertyValue aValue2;
uno::Any aAny2;
aAny2 <<= (sal_Bool)sal_True;
aValue2.Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Overwrite"));
aValue2.Value = aAny2;
aValue2.State = beans::PropertyState_DIRECT_VALUE;
aArgs[1] = aValue2;
xStorable->storeToURL(getURLFromSolver("/unittest/sw/test.xml"), aArgs);
}
SwRegressionTest::SwRegressionTest()
: m_aBaseString(RTL_CONSTASCII_USTRINGPARAM("/sw/qa/core/data"))
{
}
void SwRegressionTest::setUp()
{
test::BootstrapFixture::setUp();
// This is a bit of a fudge, we do this to ensure that SwGlobals::ensure,
// which is a private symbol to us, gets called
m_xWriterComponent =
getMultiServiceFactory()->createInstance(rtl::OUString(
RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.Writer.TextDocument")));
CPPUNIT_ASSERT_MESSAGE("no calc component!", m_xWriterComponent.is());
mxDesktop = Reference<com::sun::star::frame::XDesktop>( getMultiServiceFactory()->createInstance(
rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.Desktop" ))), UNO_QUERY );
CPPUNIT_ASSERT_MESSAGE("", mxDesktop.is());
}
void SwRegressionTest::tearDown()
{
uno::Reference< lang::XComponent >( m_xWriterComponent, UNO_QUERY_THROW )->dispose();
test::BootstrapFixture::tearDown();
}
CPPUNIT_TEST_SUITE_REGISTRATION(SwRegressionTest);
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -81,6 +81,9 @@ public:
// return a Path to a given c-str path from the source directory
::rtl::OUString getPathFromSrc( const char *pPath );
// return a URL to a given c-str path from the solver directory
::rtl::OUString getURLFromSolver( const char *pPath );
// return a Path to a given c-str path from the solver directory
::rtl::OUString getPathFromSolver( const char *pPath );
......
......@@ -82,6 +82,11 @@ test::BootstrapFixtureBase::~BootstrapFixtureBase()
return m_aSrcRootPath + rtl::OUString::createFromAscii( pPath );
}
::rtl::OUString test::BootstrapFixtureBase::getURLFromSolver( const char *pPath )
{
return m_aSolverRootURL + rtl::OUString::createFromAscii( pPath );
}
::rtl::OUString test::BootstrapFixtureBase::getPathFromSolver( const char *pPath )
{
return m_aSolverRootPath + rtl::OUString::createFromAscii( pPath );
......
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