From d833ab988bab6ca1a239c045eb236cafddda0e73 Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Fri, 20 Mar 2020 10:48:44 +0100 Subject: [PATCH] Extract testDisposedByDesktopTerminate from CppunitTest_sw_apitests It is not guaranteed that SwXTextTable runs last during CppunitTest_sw_apitests, and e.g. building with --enable-lto on Linux caused SwXTextField to be run after SwXTextTable. But then testDisposedByDesktopTerminate had already shut down all the relevant global state, so the SwXTextField tests would fail. TerminateTest is a faithful copy of the original SwXTextTable testDisposedByDesktopTerminate behavior, but I do not know how much of that (if anything at all) is actually test-worthy. (For example, parts of TerminateTest::init may not be relevant, or the original SwXTextTable testDisposedByDesktopTerminate may even only have been there to clean up after other tests and not to actually test anything by itself, cf. 20ed81fd42cf8079c11c2b18973b9504a679e49c "Make individual tests clean up after themselves".) Change-Id: Ib95b7fa6888f55a27236a779c453a6d04122a527 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/90774 Tested-by: Jenkins Reviewed-by: Stephan Bergmann --- sw/CppunitTest_sw_apiterminate.mk | 44 ++++++++++++++++++ sw/Module_sw.mk | 1 + sw/qa/api/SwXTextTable.cxx | 9 +--- sw/qa/api/terminate.cxx | 76 +++++++++++++++++++++++++++++++ 4 files changed, 122 insertions(+), 8 deletions(-) create mode 100644 sw/CppunitTest_sw_apiterminate.mk create mode 100644 sw/qa/api/terminate.cxx diff --git a/sw/CppunitTest_sw_apiterminate.mk b/sw/CppunitTest_sw_apiterminate.mk new file mode 100644 index 000000000000..c6228cf72d88 --- /dev/null +++ b/sw/CppunitTest_sw_apiterminate.mk @@ -0,0 +1,44 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 100 -*- +# +# 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_apiterminate)) + +$(eval $(call gb_CppunitTest_add_exception_objects,sw_apiterminate, \ + sw/qa/api/terminate \ +)) + +$(eval $(call gb_CppunitTest_use_api,sw_apiterminate, \ + offapi \ + udkapi \ +)) + +$(eval $(call gb_CppunitTest_use_common_precompiled_header,sw_apiterminate)) + +$(eval $(call gb_CppunitTest_use_configuration,sw_apiterminate)) + +$(eval $(call gb_CppunitTest_use_libraries,sw_apiterminate, \ + comphelper \ + cppu \ + sal \ + subsequenttest \ + test \ + unotest \ +)) + +$(eval $(call gb_CppunitTest_use_rdb,sw_apiterminate,services)) + +$(eval $(call gb_CppunitTest_use_vcl,sw_apiterminate)) + +$(eval $(call gb_CppunitTest_use_uiconfigs,sw_apiterminate, \ + svx \ +)) + +$(eval $(call gb_CppunitTest_use_ure,sw_apiterminate)) + +# vim: set noet sw=4 ts=4: diff --git a/sw/Module_sw.mk b/sw/Module_sw.mk index 139dee1be4a1..88c14c2fa51b 100644 --- a/sw/Module_sw.mk +++ b/sw/Module_sw.mk @@ -102,6 +102,7 @@ $(eval $(call gb_Module_add_slowcheck_targets,sw,\ CppunitTest_sw_mailmerge \ CppunitTest_sw_globalfilter \ CppunitTest_sw_accessible_relation_set \ + CppunitTest_sw_apiterminate \ CppunitTest_sw_apitests \ CppunitTest_sw_unowriter \ CppunitTest_sw_core_text \ diff --git a/sw/qa/api/SwXTextTable.cxx b/sw/qa/api/SwXTextTable.cxx index ed1bc0670251..37c8600653a4 100644 --- a/sw/qa/api/SwXTextTable.cxx +++ b/sw/qa/api/SwXTextTable.cxx @@ -44,7 +44,6 @@ struct SwXTextTable final : public test::BootstrapFixture, CPPUNIT_TEST_SUITE(SwXTextTable); CPPUNIT_TEST(testAddEventListener); CPPUNIT_TEST(testRemoveEventListener); - CPPUNIT_TEST(testDisposedByDesktopTerminate); CPPUNIT_TEST_SUITE_END(); private: @@ -62,13 +61,7 @@ void SwXTextTable::tearDown() { if (component_.is()) { - try - { - component_->dispose(); - } - catch (css::lang::DisposedException&) // thrown by testDisposedByDesktopTerminate - { - } + component_->dispose(); } } diff --git a/sw/qa/api/terminate.cxx b/sw/qa/api/terminate.cxx new file mode 100644 index 000000000000..5f077d0aa1f8 --- /dev/null +++ b/sw/qa/api/terminate.cxx @@ -0,0 +1,76 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * 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 +#include +#include +#include +#include +#include +#include +#include + +class TerminateTest final : public test::BootstrapFixture, + public unotest::MacrosTest, + public apitest::XComponent +{ +public: + void setUp() override; + + css::uno::Reference init() override; + + void triggerDesktopTerminate() override; + + CPPUNIT_TEST_SUITE(TerminateTest); + CPPUNIT_TEST(testDisposedByDesktopTerminate); + CPPUNIT_TEST_SUITE_END(); +}; + +void TerminateTest::setUp() +{ + test::BootstrapFixture::setUp(); + mxDesktop.set( + css::frame::Desktop::create(comphelper::getComponentContext(getMultiServiceFactory()))); +} + +css::uno::Reference TerminateTest::init() +{ + auto const component + = loadFromDesktop("private:factory/swriter", "com.sun.star.text.TextDocument"); + CPPUNIT_ASSERT(component.is()); + css::uno::Reference xTextDocument(component, + css::uno::UNO_QUERY_THROW); + css::uno::Reference xMSF(component, css::uno::UNO_QUERY_THROW); + css::uno::Reference xText = xTextDocument->getText(); + css::uno::Reference xCursor = xText->createTextCursor(); + css::uno::Reference xTable( + xMSF->createInstance("com.sun.star.text.TextTable"), css::uno::UNO_QUERY_THROW); + xTable->initialize(4, 3); + xText->insertTextContent(xCursor, xTable, false); + CPPUNIT_ASSERT(xCursor.is()); + return css::uno::Reference(xTable, css::uno::UNO_QUERY_THROW); +} + +void TerminateTest::triggerDesktopTerminate() { mxDesktop->terminate(); } + +CPPUNIT_TEST_SUITE_REGISTRATION(TerminateTest); + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */