using namespace Dali;
+bool StaticFunctionHandlers::staticFunctionHandled;
+
void utc_dali_signal_templates_startup(void)
{
test_return_value = TET_UNDEF;
// test function object using FunctorDelegate.
// :Connect( ConnectionTrackerInterface* connectionTracker, FunctorDelegate* delegate )
- TestSlotHandler handler;
- TestSignals::VoidRetNoParamSignal signal;
- bool functorDelegateCalled(false);
- signal.Connect( &handler, FunctorDelegate::New( VoidFunctorVoid(functorDelegateCalled) ));
- DALI_TEST_CHECK( ! signal.Empty() );
- signal.Emit();
- DALI_TEST_CHECK( functorDelegateCalled == true );
-
+ {
+ TestSlotHandler handler;
+ TestSignals::VoidRetNoParamSignal signal;
+ bool functorDelegateCalled(false);
+ signal.Connect( &handler, FunctorDelegate::New( VoidFunctorVoid(functorDelegateCalled) ));
+ DALI_TEST_CHECK( ! signal.Empty() );
+ signal.Emit();
+ DALI_TEST_CHECK( functorDelegateCalled == true );
+ }
+ {
+ TestSlotHandler handler;
+ TestSignals::VoidRet1ValueParamSignal signal;
+ bool functorDelegateCalled(false);
+ signal.Connect( &handler, FunctorDelegate::New( VoidFunctorVoid(functorDelegateCalled) ));
+ DALI_TEST_CHECK( ! signal.Empty() );
+ signal.Emit(1);
+ }
END_TEST;
}
}
// Positive test case for a method
-int UtcDaliSignalConnectAndEmit(void)
+int UtcDaliSignalConnectAndEmit01P(void)
{
// Test basic signal emission for each slot type
TestSlotHandler handlers;
signals.SignalVoid1Value().Connect(&handlers, &TestSlotHandler::VoidSlotIntValue);
DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
- signals.EmitVoidSignalIntValue(5);
+ signals.EmitVoidSignal1IntValue(5);
DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
DALI_TEST_EQUALS( handlers.mIntParam1, 5, TEST_LOCATION );
}
TestSlotHandler handlers;
signals.SignalVoid2Value().Connect(&handlers, &TestSlotHandler::VoidSlotIntValueIntValue);
DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
- signals.EmitVoidSignalIntValueIntValue(6, 7);
+ signals.EmitVoidSignal2IntValue(6, 7);
DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
DALI_TEST_EQUALS( handlers.mIntParam1, 6, TEST_LOCATION );
DALI_TEST_EQUALS( handlers.mIntParam2, 7, TEST_LOCATION );
{
TestSlotHandler handlers;
- signals.FloatSignalFloatValue3().Connect(&handlers, &TestSlotHandler::FloatSlotFloatValue3);
+ signals.SignalFloat3Value().Connect(&handlers, &TestSlotHandler::FloatSlotFloatValue3);
DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
handlers.mFloatReturn = 27.0f;
- float returnValue = signals.EmitFloatSignalFloatValue3(5, 33.0f, 100.0f);
+ float returnValue = signals.EmitFloat3VSignal(5, 33.0f, 100.0f);
DALI_TEST_EQUALS( returnValue, 27.0f, TEST_LOCATION );
DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
DALI_TEST_EQUALS( handlers.mFloatParam1, 5.0f, TEST_LOCATION );
END_TEST;
}
+int UtcDaliSignalConnectAndEmit02P(void)
+{
+ // testing connection of static functions
+ TestSignals signals;
+ StaticFunctionHandlers handlers;
+
+ // void ( void )
+ signals.SignalVoidNone().Connect( &StaticFunctionHandlers::VoidSlotVoid );
+ DALI_TEST_EQUALS( handlers.staticFunctionHandled, false, TEST_LOCATION );
+ signals.EmitVoidSignalVoid();
+ DALI_TEST_EQUALS( handlers.staticFunctionHandled, true, TEST_LOCATION );
+
+
+ // void ( p1 )
+ handlers.Reset();
+ signals.SignalVoid1Value().Connect( &StaticFunctionHandlers::VoidSlot1Param );
+ DALI_TEST_EQUALS( handlers.staticFunctionHandled, false, TEST_LOCATION );
+ signals.EmitVoidSignal1IntValue( 1 );
+ DALI_TEST_EQUALS( handlers.staticFunctionHandled, true, TEST_LOCATION );
+
+ // void ( p1, p2 )
+ handlers.Reset();
+ signals.SignalVoid2Value().Connect( &StaticFunctionHandlers::VoidSlot2Param );
+ DALI_TEST_EQUALS( handlers.staticFunctionHandled, false, TEST_LOCATION );
+ signals.EmitVoidSignal2IntValue( 1, 2 );
+ DALI_TEST_EQUALS( handlers.staticFunctionHandled, true, TEST_LOCATION );
+
+
+ // void ( p1, p2, p3 )
+ handlers.Reset();
+ signals.SignalVoid3Value().Connect( &StaticFunctionHandlers::VoidSlot3Param );
+ DALI_TEST_EQUALS( handlers.staticFunctionHandled, false, TEST_LOCATION );
+ signals.EmitVoidSignal3IntValue( 1, 2, 3 );
+ DALI_TEST_EQUALS( handlers.staticFunctionHandled, true, TEST_LOCATION );
+
+ // ret ( )
+ handlers.Reset();
+ signals.SignalFloat0().Connect( &StaticFunctionHandlers::RetSlot0Param );
+ DALI_TEST_EQUALS( handlers.staticFunctionHandled, false, TEST_LOCATION );
+ signals.EmitFloat0Signal();
+ DALI_TEST_EQUALS( handlers.staticFunctionHandled, true, TEST_LOCATION );
+
+ // ret ( p1 )
+ handlers.Reset();
+ signals.SignalFloat1Value().Connect( &StaticFunctionHandlers::RetSlot1Param );
+ DALI_TEST_EQUALS( handlers.staticFunctionHandled, false, TEST_LOCATION );
+ signals.EmitFloat1VSignal( 1.f );
+ DALI_TEST_EQUALS( handlers.staticFunctionHandled, true, TEST_LOCATION );
+
+ // ret ( p1, p2 )
+ handlers.Reset();
+ signals.SignalFloat2Value().Connect( &StaticFunctionHandlers::RetSlot2Param );
+ DALI_TEST_EQUALS( handlers.staticFunctionHandled, false, TEST_LOCATION );
+ signals.EmitFloat2VSignal( 1.f, 2.f );
+ DALI_TEST_EQUALS( handlers.staticFunctionHandled, true, TEST_LOCATION );
+
+
+ // ret ( p1, p2, p3 )
+ handlers.Reset();
+ signals.SignalFloat3Value().Connect( &StaticFunctionHandlers::RetSlot3Param );
+ DALI_TEST_EQUALS( handlers.staticFunctionHandled, false, TEST_LOCATION );
+ signals.EmitFloat3VSignal( 1.f, 2.f, 3.f );
+ DALI_TEST_EQUALS( handlers.staticFunctionHandled, true, TEST_LOCATION );
+
+ END_TEST;
+
+}
+
+
int UtcDaliSignalDisconnect(void)
{
// Test that callbacks don't occur if a signal is disconnected before emission
signals.SignalVoid1Value().Connect(&handlers, &TestSlotHandler::VoidSlotIntValue);
DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
signals.SignalVoid1Value().Disconnect(&handlers, &TestSlotHandler::VoidSlotIntValue);
- signals.EmitVoidSignalIntValue(5);
+ signals.EmitVoidSignal1IntValue(5);
DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
DALI_TEST_EQUALS( handlers.mIntParam1, 0, TEST_LOCATION );
}
signals.SignalVoid2Value().Connect(&handlers, &TestSlotHandler::VoidSlotIntValueIntValue);
DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
signals.SignalVoid2Value().Disconnect(&handlers, &TestSlotHandler::VoidSlotIntValueIntValue);
- signals.EmitVoidSignalIntValueIntValue(5, 10);
+ signals.EmitVoidSignal2IntValue(5, 10);
DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
DALI_TEST_EQUALS( handlers.mIntParam1, 0, TEST_LOCATION );
DALI_TEST_EQUALS( handlers.mIntParam2, 0, TEST_LOCATION );
{
TestSlotHandler handlers;
signals.SignalVoid1Value().Disconnect(&handlers, &TestSlotHandler::VoidSlotIntValue);
- signals.EmitVoidSignalIntValue(5);
+ signals.EmitVoidSignal1IntValue(5);
DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
DALI_TEST_EQUALS( handlers.mIntParam1, 0, TEST_LOCATION );
}
{
TestSlotHandler handlers;
signals.SignalVoid2Value().Disconnect(&handlers, &TestSlotHandler::VoidSlotIntValueIntValue);
- signals.EmitVoidSignalIntValueIntValue(5, 10);
+ signals.EmitVoidSignal2IntValue(5, 10);
DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
DALI_TEST_EQUALS( handlers.mIntParam1, 0, TEST_LOCATION );
DALI_TEST_EQUALS( handlers.mIntParam2, 0, TEST_LOCATION );
DALI_TEST_EQUALS( customTracker2.mCallbackHandled, true, TEST_LOCATION );
}
DALI_TEST_EQUALS( 0u, customTracker2.GetConnectionCount(), TEST_LOCATION );
+
+ // Test for removing a null callback
+ {
+ TestBasicConnectionTrackerInterface customTracker3;
+
+ TestSignals::VoidRetNoParamSignal signal;
+ DALI_TEST_CHECK( signal.Empty() );
+ DALI_TEST_EQUALS( 0u, customTracker3.GetConnectionCount(), TEST_LOCATION );
+
+ signal.Connect( &customTracker3, &TestBasicConnectionTrackerInterface::VoidSlotVoid );
+ DALI_TEST_CHECK( ! signal.Empty() );
+ DALI_TEST_EQUALS( 1u, customTracker3.GetConnectionCount(), TEST_LOCATION );
+ try
+ {
+ // should assert
+ customTracker3.RemoveNullCallback();
+ tet_result( TET_FAIL );
+ }
+ catch (Dali::DaliException& e)
+ {
+ tet_result( TET_PASS );
+ }
+ }
+
END_TEST;
}
signals.SignalVoid1Value().Connect( &handler3, &TestSlotHandler::VoidSlotIntValue );
DALI_TEST_EQUALS( handler3.mHandled, false, TEST_LOCATION );
- signals.EmitVoidSignalIntValue( 5 );
+ signals.EmitVoidSignal1IntValue( 5 );
DALI_TEST_EQUALS( handler1.mHandled, true, TEST_LOCATION );
DALI_TEST_EQUALS( handler1.mIntParam1, 5, TEST_LOCATION );
DALI_TEST_EQUALS( handler2.mHandled, true, TEST_LOCATION );
handler3.Reset();
signals.SignalVoid1Value().Disconnect( &handler2, &TestSlotHandler::VoidSlotIntValue );
- signals.EmitVoidSignalIntValue( 6 );
+ signals.EmitVoidSignal1IntValue( 6 );
DALI_TEST_EQUALS( handler1.mHandled, true, TEST_LOCATION );
DALI_TEST_EQUALS( handler1.mIntParam1, 6, TEST_LOCATION );
DALI_TEST_EQUALS( handler2.mHandled, false, TEST_LOCATION );
signals.SignalVoid1Value().Connect( &handler1, &TestSlotHandler::VoidSlotIntValue );
DALI_TEST_EQUALS( handler1.mHandledCount, 0, TEST_LOCATION );
- signals.EmitVoidSignalIntValue( 6 );
+ signals.EmitVoidSignal1IntValue( 6 );
DALI_TEST_EQUALS( handler1.mHandledCount, 1, TEST_LOCATION );
DALI_TEST_EQUALS( handler1.mIntParam1, 6, TEST_LOCATION );
DALI_TEST_CHECK( signals.SignalVoid1Value().Empty() );
handler1.mIntParam1 = 0;
- signals.EmitVoidSignalIntValue( 7 );
+ signals.EmitVoidSignal1IntValue( 7 );
DALI_TEST_EQUALS( handler1.mHandledCount, 1/*not incremented since last check*/, TEST_LOCATION );
DALI_TEST_EQUALS( handler1.mIntParam1, 0, TEST_LOCATION );
}
DALI_TEST_CHECK( signals.SignalBool1Value().Empty() );
// Should be NOOP
- signals.EmitVoidSignalIntValue( 1 );
+ signals.EmitVoidSignal1IntValue( 1 );
signals.EmitBoolSignalFloatValue( 1.0f );
// Test that connecting the same callback 10 times is a NOOP
{
TestApplication app; // Create core for debug logging
- TestSignals::VoidRetNoParamSignal signal;
- DALI_TEST_CHECK( signal.Empty() );
+ // for coverage purposes we test the emit guard for each signal type (0,1,2,3 params) void / return value
+ {
+ TestSignals::VoidRetNoParamSignal signal;
+ DALI_TEST_CHECK( signal.Empty() );
+
+ TestEmitDuringCallback handler1;
+ handler1.VoidConnectVoid( signal );
+
+ // Test that this does not result in an infinite loop!
+ signal.Emit();
+ }
+ {
+ TestSignals::FloatRet0ParamSignal signal;
+
+ DALI_TEST_CHECK( signal.Empty() );
+
+ TestEmitDuringCallback handler1;
+ handler1.FloatRet0ParamConnect( signal );
+
+ // Test that this does not result in an infinite loop!
+ signal.Emit();
+ }
+ {
+ TestSignals::FloatRet1ParamSignal signal;
+
+ DALI_TEST_CHECK( signal.Empty() );
+
+ TestEmitDuringCallback handler1;
+ handler1.FloatRet1ParamConnect( signal );
+
+ // Test that this does not result in an infinite loop!
+ signal.Emit( 1.f );
+ }
+ {
+ TestSignals::FloatRet2ValueParamSignal signal;
+
+ DALI_TEST_CHECK( signal.Empty() );
+
+ TestEmitDuringCallback handler1;
+ handler1.FloatRet2ParamConnect( signal );
+
+ // Test that this does not result in an infinite loop!
+ signal.Emit( 1.f, 1.f );
+ }
+ {
+ TestSignals::FloatRet3ValueParamSignal signal;
+
+ DALI_TEST_CHECK( signal.Empty() );
+
+ TestEmitDuringCallback handler1;
+ handler1.FloatRet3ParamConnect( signal );
+
+ // Test that this does not result in an infinite loop!
+ signal.Emit( 1.f,1.f,1.f );
+ }
+ END_TEST;
+}
+
+int UtcDaliSignalDeleteDuringEmit(void)
+{
+ // testing a signal deletion during an emit
+ // need to dynamically allocate the signal for this to work
+
+ TestApplication app; // Create core for debug logging
+
+ TestSignals::VoidRetNoParamSignal* signal = new TestSignals::VoidRetNoParamSignal;
TestEmitDuringCallback handler1;
- handler1.VoidConnectVoid( signal );
+ handler1.DeleteDuringEmitConnect( *signal );
+
+ // should just log an error
+ signal->Emit();
+
+ tet_result( TET_PASS );
- // Test that this does not result in an infinite loop!
- signal.Emit();
END_TEST;
}
TestSlotDelegateHandler handlers;
signals.SignalVoid1Value().Connect( handlers.mSlotDelegate, &TestSlotDelegateHandler::VoidSlotIntValue );
DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
- signals.EmitVoidSignalIntValue(5);
+ signals.EmitVoidSignal1IntValue(5);
DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
DALI_TEST_EQUALS( handlers.mIntParam1, 5, TEST_LOCATION );
}
TestSlotDelegateHandler handlers;
signals.SignalVoid2Value().Connect( handlers.mSlotDelegate, &TestSlotDelegateHandler::VoidSlotIntValueIntValue );
DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
- signals.EmitVoidSignalIntValueIntValue(6, 7);
+ signals.EmitVoidSignal2IntValue(6, 7);
DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
DALI_TEST_EQUALS( handlers.mIntParam1, 6, TEST_LOCATION );
DALI_TEST_EQUALS( handlers.mIntParam2, 7, TEST_LOCATION );
{
TestSlotDelegateHandler handlers;
- signals.FloatSignalFloatValue3().Connect( handlers.mSlotDelegate, &TestSlotDelegateHandler::FloatSlotFloatValue3 );
+ signals.SignalFloat3Value().Connect( handlers.mSlotDelegate, &TestSlotDelegateHandler::FloatSlotFloatValue3 );
DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
handlers.mFloatReturn = 27.0f;
- float returnValue = signals.EmitFloatSignalFloatValue3(5, 33.0f, 100.0f);
+ float returnValue = signals.EmitFloat3VSignal(5, 33.0f, 100.0f);
DALI_TEST_EQUALS( returnValue, 27.0f, TEST_LOCATION );
DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
DALI_TEST_EQUALS( handlers.mFloatParam1, 5.0f, TEST_LOCATION );
signals.SignalVoid1Value().Connect(handlers.mSlotDelegate, &TestSlotDelegateHandler::VoidSlotIntValue);
DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
signals.SignalVoid1Value().Disconnect(handlers.mSlotDelegate, &TestSlotDelegateHandler::VoidSlotIntValue);
- signals.EmitVoidSignalIntValue(5);
+ signals.EmitVoidSignal1IntValue(5);
DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
DALI_TEST_EQUALS( handlers.mIntParam1, 0, TEST_LOCATION );
}
signals.SignalVoid2Value().Connect(handlers.mSlotDelegate, &TestSlotDelegateHandler::VoidSlotIntValueIntValue);
DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
signals.SignalVoid2Value().Disconnect(handlers.mSlotDelegate, &TestSlotDelegateHandler::VoidSlotIntValueIntValue);
- signals.EmitVoidSignalIntValueIntValue(5, 10);
+ signals.EmitVoidSignal2IntValue(5, 10);
DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
DALI_TEST_EQUALS( handlers.mIntParam1, 0, TEST_LOCATION );
DALI_TEST_EQUALS( handlers.mIntParam2, 0, TEST_LOCATION );
}
END_TEST;
}
+
+
+int UtcDaliCallbackBase(void)
+{
+ // simple constructor for coverage
+ CallbackBase base;
+ tet_result( TET_PASS );
+ END_TEST;
+}
+
+int UtcDaliSlotDelegateMethods(void)
+{
+ TestSignals signals;
+
+ TestSlotDelegateHandler handlers;
+ DALI_TEST_EQUALS( 0, handlers.mSlotDelegate.GetConnectionCount(), TEST_LOCATION );
+ signals.SignalFloat2Value().Connect(handlers.mSlotDelegate, &TestSlotDelegateHandler::FloatSlotFloatValueFloatValue);
+ DALI_TEST_EQUALS( 1, handlers.mSlotDelegate.GetConnectionCount(), TEST_LOCATION );
+ signals.SignalBool1Value().Connect(handlers.mSlotDelegate, &TestSlotDelegateHandler::BoolSlotFloatValue);
+ DALI_TEST_EQUALS( 2, handlers.mSlotDelegate.GetConnectionCount(), TEST_LOCATION );
+
+ handlers.mSlotDelegate.DisconnectAll();
+ DALI_TEST_EQUALS( 0, handlers.mSlotDelegate.GetConnectionCount(), TEST_LOCATION );
+
+ END_TEST;
+}