svl/qa/unit/notify/test_SfxBroadcaster.cxx | 25 +++++++++++++++++++++++++ svl/source/notify/lstner.cxx | 5 ++++- 2 files changed, 29 insertions(+), 1 deletion(-)
New commits: commit b014150e64cdc23dfd999061bc210f0ad701f0a2 Author: Tobias Lippert <d...@fastmail.fm> Date: Tue Jun 9 21:25:40 2015 +0200 tdf#68016 Write fixture for current behaviour of SfxListener Also: Make destructor of SfxListener more robust, so that it can be used in tests. Change-Id: I02b273ca8e527705c2d3ea3295ed0dec1c4f83ae Reviewed-on: https://gerrit.libreoffice.org/16483 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> Tested-by: Markus Mohrhard <markus.mohrh...@googlemail.com> diff --git a/svl/qa/unit/notify/test_SfxBroadcaster.cxx b/svl/qa/unit/notify/test_SfxBroadcaster.cxx index 6096029..292cd9d 100644 --- a/svl/qa/unit/notify/test_SfxBroadcaster.cxx +++ b/svl/qa/unit/notify/test_SfxBroadcaster.cxx @@ -22,12 +22,16 @@ class SfxBroadcasterTest : public CppUnit::TestFixture void AddingListenersIncreasesCount(); void RemovingListenersDecreasesCount(); void HintsAreNotForwardedToRemovedListeners(); + void SameListenerCanBeAddedMoreThanOnce(); + void StoppingListeningAffectsOnlyFirstOfIdenticalListeners(); // Adds code needed to register the test suite CPPUNIT_TEST_SUITE(SfxBroadcasterTest); CPPUNIT_TEST(AddingListenersIncreasesCount); CPPUNIT_TEST(RemovingListenersDecreasesCount); CPPUNIT_TEST(HintsAreNotForwardedToRemovedListeners); + CPPUNIT_TEST(SameListenerCanBeAddedMoreThanOnce); + CPPUNIT_TEST(StoppingListeningAffectsOnlyFirstOfIdenticalListeners); CPPUNIT_TEST_SUITE_END(); }; @@ -93,6 +97,27 @@ SfxBroadcasterTest::HintsAreNotForwardedToRemovedListeners() CPPUNIT_ASSERT_EQUAL(false, sl1.NotifyWasCalled()); } +void +SfxBroadcasterTest::SameListenerCanBeAddedMoreThanOnce() +{ + MockedSfxListener sl; + SfxBroadcaster sb; + sb.AddListener(sl); + sb.AddListener(sl); + CPPUNIT_ASSERT_EQUAL((size_t)2, sb.GetListenerCount()); +} + +void +SfxBroadcasterTest::StoppingListeningAffectsOnlyFirstOfIdenticalListeners() +{ + MockedSfxListener sl; + SfxBroadcaster sb; + sb.AddListener(sl); + sb.AddListener(sl); + sb.RemoveListener(sl); + CPPUNIT_ASSERT_EQUAL((size_t)1, sb.GetListenerCount()); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SfxBroadcasterTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/svl/source/notify/lstner.cxx b/svl/source/notify/lstner.cxx index ee0809c..4fc3426 100644 --- a/svl/source/notify/lstner.cxx +++ b/svl/source/notify/lstner.cxx @@ -68,7 +68,10 @@ SfxListener::~SfxListener() void SfxListener::RemoveBroadcaster_Impl( SfxBroadcaster& rBroadcaster ) { - mpImpl->maBCs.erase( std::find( mpImpl->maBCs.begin(), mpImpl->maBCs.end(), &rBroadcaster ) ); + auto it = std::find( mpImpl->maBCs.begin(), mpImpl->maBCs.end(), &rBroadcaster ); + if (it != mpImpl->maBCs.end()) { + mpImpl->maBCs.erase( it ); + } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits