From 14bc758fa1d275ef54499085bfdc72d372128ede Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Fri, 22 Mar 2024 14:23:28 +0100 Subject: [PATCH] CppunitTest_sd_tiledrendering2: extract one test from the old, large suite Not a split, to avoid too many conflicts while cherry-picking, but at least create a new suite where next tests can be added without too much build time after source code edits. Change-Id: Idb421db0a63dccee205a4092d368f6d48a093a10 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165163 Reviewed-by: Miklos Vajna Tested-by: Jenkins --- sd/CppunitTest_sd_tiledrendering2.mk | 71 ++++++++ sd/Module_sd.mk | 1 + sd/qa/unit/tiledrendering/tiledrendering.cxx | 24 --- sd/qa/unit/tiledrendering2/data/dummy.odp | Bin 0 -> 10763 bytes .../unit/tiledrendering2/tiledrendering2.cxx | 159 ++++++++++++++++++ 5 files changed, 231 insertions(+), 24 deletions(-) create mode 100644 sd/CppunitTest_sd_tiledrendering2.mk create mode 100644 sd/qa/unit/tiledrendering2/data/dummy.odp create mode 100644 sd/qa/unit/tiledrendering2/tiledrendering2.cxx diff --git a/sd/CppunitTest_sd_tiledrendering2.mk b/sd/CppunitTest_sd_tiledrendering2.mk new file mode 100644 index 000000000000..838f13fc3ece --- /dev/null +++ b/sd/CppunitTest_sd_tiledrendering2.mk @@ -0,0 +1,71 @@ +# -*- 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,sd_tiledrendering2)) + +$(eval $(call gb_CppunitTest_use_common_precompiled_header,sd_tiledrendering2)) + +$(eval $(call gb_CppunitTest_add_exception_objects,sd_tiledrendering2, \ + sd/qa/unit/tiledrendering2/tiledrendering2 \ +)) + +$(eval $(call gb_CppunitTest_use_libraries,sd_tiledrendering2, \ + comphelper \ + cppu \ + cppuhelper \ + drawinglayer \ + editeng \ + sal \ + sfx \ + subsequenttest \ + svl \ + svt \ + svxcore \ + sd \ + test \ + unotest \ + vcl \ + tl \ + utl \ +)) + +$(eval $(call gb_CppunitTest_use_externals,sd_tiledrendering2,\ + boost_headers \ + libxml2 \ +)) + +$(eval $(call gb_CppunitTest_set_include,sd_tiledrendering2,\ + -I$(SRCDIR)/sd/inc \ + -I$(SRCDIR)/sd/source/ui/inc \ + -I$(SRCDIR)/sd/qa/unit \ + $$(INCLUDE) \ +)) + +$(eval $(call gb_CppunitTest_use_sdk_api,sd_tiledrendering2)) + +$(eval $(call gb_CppunitTest_use_ure,sd_tiledrendering2)) +$(eval $(call gb_CppunitTest_use_vcl,sd_tiledrendering2)) + +$(eval $(call gb_CppunitTest_use_rdb,sd_tiledrendering2,services)) + +$(eval $(call gb_CppunitTest_use_configuration,sd_tiledrendering2)) + +$(eval $(call gb_CppunitTest_use_uiconfigs,sd_tiledrendering2, \ + modules/simpress \ + svx \ +)) + + +$(eval $(call gb_CppunitTest_add_arguments,sd_tiledrendering2, \ + -env:arg-env=$(gb_Helper_LIBRARY_PATH_VAR)"$$$${$(gb_Helper_LIBRARY_PATH_VAR)+=$$$$$(gb_Helper_LIBRARY_PATH_VAR)}" \ +)) + +# vim: set noet sw=4 ts=4: diff --git a/sd/Module_sd.mk b/sd/Module_sd.mk index b3a825254652..b606b8a56a9e 100644 --- a/sd/Module_sd.mk +++ b/sd/Module_sd.mk @@ -60,6 +60,7 @@ ifeq ($(OS),LINUX) $(eval $(call gb_Module_add_slowcheck_targets,sd,\ CppunitTest_sd_svg_export_tests \ CppunitTest_sd_tiledrendering \ + CppunitTest_sd_tiledrendering2 \ )) endif endif diff --git a/sd/qa/unit/tiledrendering/tiledrendering.cxx b/sd/qa/unit/tiledrendering/tiledrendering.cxx index d270579e6c07..8f0fd9cfc4ae 100644 --- a/sd/qa/unit/tiledrendering/tiledrendering.cxx +++ b/sd/qa/unit/tiledrendering/tiledrendering.cxx @@ -2983,30 +2983,6 @@ CPPUNIT_TEST_FIXTURE(SdTiledRenderingTest, testSidebarHide) CPPUNIT_ASSERT(it != aView.m_aStateChanges.end()); } -CPPUNIT_TEST_FIXTURE(SdTiledRenderingTest, testSidebarSwitchDeck) -{ - // Given an impress document, with a visible sidebar (ModifyPage deck): - createDoc("dummy.odp"); - ViewCallback aView; - sfx2::sidebar::Sidebar::Setup(u""); - Scheduler::ProcessEventsToIdle(); - aView.m_aStateChanges.clear(); - - // When switching to the MasterSlidesPanel deck: - dispatchCommand(mxComponent, ".uno:MasterSlidesPanel", {}); - - // Then make sure notifications are sent for both the old and the new decks: - auto it = aView.m_aStateChanges.find(".uno:ModifyPage"); - // Without the accompanying fix in place, this test would have failed, the notification for the - // old deck was missing. - CPPUNIT_ASSERT(it != aView.m_aStateChanges.end()); - boost::property_tree::ptree aTree = it->second; - CPPUNIT_ASSERT(aTree.get_child_optional("state").has_value()); - CPPUNIT_ASSERT_EQUAL(std::string("false"), aTree.get_child("state").get_value()); - it = aView.m_aStateChanges.find(".uno:MasterSlidesPanel"); - CPPUNIT_ASSERT(it != aView.m_aStateChanges.end()); -} - CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sd/qa/unit/tiledrendering2/data/dummy.odp b/sd/qa/unit/tiledrendering2/data/dummy.odp new file mode 100644 index 0000000000000000000000000000000000000000..83dee413c5ed44d0b45d3ab6a956fdb109ec9fec GIT binary patch literal 10763 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 literal 0 HcmV?d00001 diff --git a/sd/qa/unit/tiledrendering2/tiledrendering2.cxx b/sd/qa/unit/tiledrendering2/tiledrendering2.cxx new file mode 100644 index 000000000000..193bc01e4426 --- /dev/null +++ b/sd/qa/unit/tiledrendering2/tiledrendering2.cxx @@ -0,0 +1,159 @@ +/* -*- 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 + +#include + +#include +#include +#include +#include +#include +#include + +#include + +using namespace css; + +namespace +{ +/// Impress tests with comphelper::LibreOfficeKit::isActive() enabled, part 2. +class Test : public UnoApiXmlTest +{ +public: + Test(); + virtual void setUp() override; + virtual void tearDown() override; + +protected: + SdXImpressDocument* createDoc(const char* pName, + const uno::Sequence& rArguments = {}); +}; + +Test::Test() + : UnoApiXmlTest("/sd/qa/unit/tiledrendering2/data/") +{ +} + +void Test::setUp() +{ + UnoApiXmlTest::setUp(); + + comphelper::LibreOfficeKit::setActive(true); +} + +void Test::tearDown() +{ + if (mxComponent.is()) + { + mxComponent->dispose(); + mxComponent.clear(); + } + + comphelper::LibreOfficeKit::setActive(false); + + UnoApiXmlTest::tearDown(); +} + +SdXImpressDocument* Test::createDoc(const char* pName, + const uno::Sequence& rArguments) +{ + loadFromFile(OUString::createFromAscii(pName)); + SdXImpressDocument* pImpressDocument = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pImpressDocument); + pImpressDocument->initializeForTiledRendering(rArguments); + return pImpressDocument; +} + +/// A view callback tracks callbacks invoked on one specific view. +class ViewCallback final +{ + SfxViewShell* mpViewShell; + int mnView; + +public: + std::map m_aStateChanges; + TestLokCallbackWrapper m_callbackWrapper; + + ViewCallback() + : m_callbackWrapper(&callback, this) + { + mpViewShell = SfxViewShell::Current(); + mpViewShell->setLibreOfficeKitViewCallback(&m_callbackWrapper); + mnView = SfxLokHelper::getView(); + m_callbackWrapper.setLOKViewId(mnView); + } + + ~ViewCallback() + { + SfxLokHelper::setView(mnView); + mpViewShell->setLibreOfficeKitViewCallback(nullptr); + } + + static void callback(int nType, const char* pPayload, void* pData) + { + static_cast(pData)->callbackImpl(nType, pPayload); + } + + void callbackImpl(int nType, const char* pPayload) + { + switch (nType) + { + case LOK_CALLBACK_STATE_CHANGED: + { + std::stringstream aStream(pPayload); + if (!aStream.str().starts_with("{")) + { + break; + } + + boost::property_tree::ptree aTree; + boost::property_tree::read_json(aStream, aTree); + auto it = aTree.find("commandName"); + if (it == aTree.not_found()) + { + break; + } + + std::string aCommandName = it->second.get_value(); + m_aStateChanges[aCommandName] = aTree; + } + break; + } + } +}; + +CPPUNIT_TEST_FIXTURE(Test, testSidebarSwitchDeck) +{ + // Given an impress document, with a visible sidebar (ModifyPage deck): + createDoc("dummy.odp"); + ViewCallback aView; + sfx2::sidebar::Sidebar::Setup(u""); + Scheduler::ProcessEventsToIdle(); + aView.m_aStateChanges.clear(); + + // When switching to the MasterSlidesPanel deck: + dispatchCommand(mxComponent, ".uno:MasterSlidesPanel", {}); + + // Then make sure notifications are sent for both the old and the new decks: + auto it = aView.m_aStateChanges.find(".uno:ModifyPage"); + // Without the accompanying fix in place, this test would have failed, the notification for the + // old deck was missing. + CPPUNIT_ASSERT(it != aView.m_aStateChanges.end()); + boost::property_tree::ptree aTree = it->second; + CPPUNIT_ASSERT(aTree.get_child_optional("state").has_value()); + CPPUNIT_ASSERT_EQUAL(std::string("false"), aTree.get_child("state").get_value()); + it = aView.m_aStateChanges.find(".uno:MasterSlidesPanel"); + CPPUNIT_ASSERT(it != aView.m_aStateChanges.end()); +} +} +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */