#8580 cafSignal : Assert if signal is connected twice to the same object

This commit is contained in:
Magne Sjaastad 2022-02-25 13:46:02 +01:00
parent 4693dc44ef
commit 5706c433d0
2 changed files with 22 additions and 0 deletions

View File

@ -72,6 +72,12 @@ public:
emitter->structSignal.connect( this, &TestObserver::setSimpleStruct );
}
void connectSignalsTwice( TestEmitter* emitter )
{
emitter->basicSignal.connect( this, &TestObserver::setBasicSignalReceived );
emitter->basicSignal.connect( this, &TestObserver::setBasicSignalReceived );
}
void setBasicSignalReceived( const caf::SignalEmitter* emitter ) { m_receivedBasicSignal = true; }
void setBoolValue( const caf::SignalEmitter*, bool test ) { m_boolValue = test; }
void setStringValue( const caf::SignalEmitter*, std::string test ) { m_stringValue = test; }
@ -149,3 +155,15 @@ TEST( SignalTest, ObserverDeletion )
ASSERT_EQ( (size_t)0, emitter.basicSignal.observerCount() );
emitter.triggerBasicSignal();
}
TEST( SignalTest, ConnectSignalTwiceAssert )
{
ASSERT_DEATH(
{
TestEmitter emitter;
TestObserver observer;
observer.connectSignalsTwice( &emitter );
},
"" );
}

View File

@ -135,6 +135,10 @@ public:
{
static_assert( std::is_convertible<ClassType*, SignalObserver*>::value,
"Only classes that inherit SignalObserver can connect as an observer of a Signal." );
// Connecting a signal twice is not supported
CAF_ASSERT( m_observerCallbacks.find( observer ) == m_observerCallbacks.end() );
m_observerCallbacks[observer] = std::make_pair( callback, true );
observer->addObservedSignal( this );
}