From 1b45e8a86ad46a25b4b47a88d7f42a44bc5d7bdc Mon Sep 17 00:00:00 2001 From: Arnaud Versini Date: Thu, 10 Oct 2013 12:08:22 +0200 Subject: [PATCH] Introduce unit test in replace functionnality in Writer Change-Id: I5ee33965a511c7730610377a2e41f4728a0fe4d2 Reviewed-on: https://gerrit.libreoffice.org/6184 Tested-by: Arnaud Versini Reviewed-by: Arnaud Versini --- sw/CppunitTest_sw_uiwriter.mk | 87 +++++++++++++++++++++++ sw/Module_sw.mk | 1 + sw/qa/extras/uiwriter/data/empty.odt | Bin 0 -> 7241 bytes sw/qa/extras/uiwriter/uiwriter.cxx | 101 +++++++++++++++++++++++++++ 4 files changed, 189 insertions(+) create mode 100644 sw/CppunitTest_sw_uiwriter.mk create mode 100644 sw/qa/extras/uiwriter/data/empty.odt create mode 100644 sw/qa/extras/uiwriter/uiwriter.cxx diff --git a/sw/CppunitTest_sw_uiwriter.mk b/sw/CppunitTest_sw_uiwriter.mk new file mode 100644 index 000000000000..b14d6c9385d6 --- /dev/null +++ b/sw/CppunitTest_sw_uiwriter.mk @@ -0,0 +1,87 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +#************************************************************************* +# +# 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/. +# +#************************************************************************* + +$(eval $(call gb_CppunitTest_CppunitTest,sw_uiwriter)) + +$(eval $(call gb_CppunitTest_add_exception_objects,sw_uiwriter, \ + sw/qa/extras/uiwriter/uiwriter \ +)) + +$(eval $(call gb_CppunitTest_use_libraries,sw_uiwriter, \ + comphelper \ + cppu \ + cppuhelper \ + sal \ + svt \ + sw \ + test \ + unotest \ + vcl \ + tl \ + $(gb_UWINAPI) \ +)) + +$(eval $(call gb_CppunitTest_use_externals,sw_uiwriter,\ + boost_headers \ + libxml2 \ +)) + +$(eval $(call gb_CppunitTest_set_include,sw_uiwriter,\ + -I$(SRCDIR)/sw/inc \ + -I$(SRCDIR)/sw/source/core/inc \ + -I$(SRCDIR)/sw/source/ui/inc \ + -I$(SRCDIR)/sw/qa/extras/inc \ + $$(INCLUDE) \ +)) + +$(eval $(call gb_CppunitTest_use_api,sw_uiwriter,\ + offapi \ + udkapi \ +)) + +$(eval $(call gb_CppunitTest_use_ure,sw_uiwriter)) + +$(eval $(call gb_CppunitTest_use_components,sw_uiwriter,\ + basic/util/sb \ + comphelper/util/comphelp \ + configmgr/source/configmgr \ + embeddedobj/util/embobj \ + fileaccess/source/fileacc \ + filter/source/config/cache/filterconfig1 \ + framework/util/fwk \ + i18npool/util/i18npool \ + linguistic/source/lng \ + package/util/package2 \ + package/source/xstor/xstor \ + sw/util/sw \ + sw/util/swd \ + sax/source/expatwrap/expwrap \ + sfx2/util/sfx \ + svl/source/fsstor/fsstorage \ + svtools/util/svt \ + toolkit/util/tk \ + ucb/source/core/ucb1 \ + ucb/source/ucp/file/ucpfile1 \ + unotools/util/utl \ + unoxml/source/service/unoxml \ + uui/util/uui \ + $(if $(filter-out MACOSX WNT,$(OS)), \ + vcl/vcl.unx \ + ) \ + $(if $(filter DESKTOP,$(BUILD_TYPE)),xmlhelp/util/ucpchelp1) \ + xmloff/util/xo \ +)) + +$(eval $(call gb_CppunitTest_use_configuration,sw_uiwriter)) + +$(eval $(call gb_CppunitTest_use_unittest_configuration,sw_uiwriter)) + +# vim: set noet sw=4 ts=4: diff --git a/sw/Module_sw.mk b/sw/Module_sw.mk index 7048d8ec6ff1..fe83466d22ec 100644 --- a/sw/Module_sw.mk +++ b/sw/Module_sw.mk @@ -43,6 +43,7 @@ endif $(eval $(call gb_Module_add_check_targets,sw,\ CppunitTest_sw_uwriter \ + CppunitTest_sw_uiwriter \ )) $(eval $(call gb_Module_add_slowcheck_targets,sw,\ diff --git a/sw/qa/extras/uiwriter/data/empty.odt b/sw/qa/extras/uiwriter/data/empty.odt new file mode 100644 index 0000000000000000000000000000000000000000..311cb06e575e80617bac3cfb91fd71580662d89a GIT binary patch literal 7241 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 literal 0 HcmV?d00001 diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx new file mode 100644 index 000000000000..f9e37f62578e --- /dev/null +++ b/sw/qa/extras/uiwriter/uiwriter.cxx @@ -0,0 +1,101 @@ +/* + * 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 +#include + +#include "UndoManager.hxx" + +static const char* DATA_DIRECTORY = "/sw/qa/extras/uiwriter/data/"; + +class SwUiWriterTest : public SwModelTestBase +{ + +public: + void testReplaceForward(); + //Regression test of fdo#70143 + //EDITING: undo search&replace corrupt text when searching backward + void testReplaceBackward(); + + CPPUNIT_TEST_SUITE(SwUiWriterTest); + CPPUNIT_TEST(testReplaceForward); + CPPUNIT_TEST(testReplaceBackward); + CPPUNIT_TEST_SUITE_END(); + +private: + SwDoc* createEmptyDoc(); +}; + +SwDoc* SwUiWriterTest::createEmptyDoc() +{ + load(DATA_DIRECTORY, "empty.odt"); + + SwXTextDocument* pTxtDoc = dynamic_cast(mxComponent.get()); + return pTxtDoc->GetDocShell()->GetDoc(); +} + +//Replacement tests + +static void lcl_selectCharacters(SwPaM& rPaM, int first, int end) +{ + rPaM.GetPoint()->nContent.Assign(rPaM.GetCntntNode(), first); + rPaM.SetMark(); + rPaM.GetPoint()->nContent.Assign(rPaM.GetCntntNode(), end); +} + +static const OUString ORIGINAL_REPLACE_CONTENT("toto titi tutu"); +static const OUString EXPECTED_REPLACE_CONTENT("toto toto tutu"); + +void SwUiWriterTest::testReplaceForward() +{ + SwDoc* pDoc = createEmptyDoc(); + + sw::UndoManager& rUndoManager = pDoc->GetUndoManager(); + + SwNodeIndex aIdx(pDoc->GetNodes().GetEndOfContent(), -1); + SwPaM aPaM(aIdx); + + pDoc->InsertString(aPaM, ORIGINAL_REPLACE_CONTENT); + + SwTxtNode* pTxtNode = aPaM.GetNode()->GetTxtNode(); + lcl_selectCharacters(aPaM, 5, 9); + pDoc->ReplaceRange(aPaM, OUString("toto"), false); + + CPPUNIT_ASSERT_EQUAL(EXPECTED_REPLACE_CONTENT, pTxtNode->GetTxt()); + + rUndoManager.Undo(); + + CPPUNIT_ASSERT_EQUAL(ORIGINAL_REPLACE_CONTENT, pTxtNode->GetTxt()); +} + +void SwUiWriterTest::testReplaceBackward() +{ + SwDoc* pDoc = createEmptyDoc(); + + sw::UndoManager& rUndoManager = pDoc->GetUndoManager(); + + SwNodeIndex aIdx(pDoc->GetNodes().GetEndOfContent(), -1); + SwPaM aPaM(aIdx); + + pDoc->InsertString(aPaM, OUString("toto titi tutu")); + SwTxtNode* pTxtNode = aPaM.GetNode()->GetTxtNode(); + lcl_selectCharacters(aPaM, 9, 5); + + pDoc->ReplaceRange(aPaM, OUString("toto"), false); + + CPPUNIT_ASSERT_EQUAL(EXPECTED_REPLACE_CONTENT, pTxtNode->GetTxt()); + + rUndoManager.Undo(); + + CPPUNIT_ASSERT_EQUAL(ORIGINAL_REPLACE_CONTENT, pTxtNode->GetTxt()); +} + +CPPUNIT_TEST_SUITE_REGISTRATION(SwUiWriterTest); +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */