2 // Copyright (c) 2014 Samsung Electronics Co., Ltd.
4 // Licensed under the Flora License, Version 1.0 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://floralicense.org/license/
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an AS IS BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
23 #include <dali/public-api/common/dali-vector.h>
24 #include <dali/public-api/dali-core.h>
26 #include <dali-test-suite-utils.h>
30 static void Startup();
31 static void Cleanup();
34 void (*tet_startup)() = Startup;
35 void (*tet_cleanup)() = Cleanup;
39 POSITIVE_TC_IDX = 0x01,
43 #define MAX_NUMBER_OF_TESTS 10000
45 struct tet_testlist tet_testlist[MAX_NUMBER_OF_TESTS];
48 TEST_FUNCTION( UtcDaliSignalEmptyCheck, POSITIVE_TC_IDX );
49 TEST_FUNCTION( UtcDaliSignalEmptyCheckSlotDestruction, POSITIVE_TC_IDX );
50 TEST_FUNCTION( UtcDaliSignalConnectAndEmit, POSITIVE_TC_IDX );
51 TEST_FUNCTION( UtcDaliSignalDisconnect, POSITIVE_TC_IDX );
52 TEST_FUNCTION( UtcDaliSignalDisconnect2, NEGATIVE_TC_IDX );
53 TEST_FUNCTION( UtcDaliSignalDisconnect3, POSITIVE_TC_IDX );
54 TEST_FUNCTION( UtcDaliSignalCustomConnectionTracker, POSITIVE_TC_IDX );
55 TEST_FUNCTION( UtcDaliSignalMultipleConnections, POSITIVE_TC_IDX );
56 TEST_FUNCTION( UtcDaliSignalMultipleConnections2, NEGATIVE_TC_IDX );
57 TEST_FUNCTION( UtcDaliSignalMultipleConnections3, POSITIVE_TC_IDX );
59 TEST_FUNCTION( UtcDaliSignalDisconnectStatic, POSITIVE_TC_IDX );
60 TEST_FUNCTION( UtcDaliSignalDisconnectDuringCallback, POSITIVE_TC_IDX );
61 TEST_FUNCTION( UtcDaliSignalDisconnectDuringCallback2, POSITIVE_TC_IDX );
62 TEST_FUNCTION( UtcDaliSignalEmitDuringCallback, NEGATIVE_TC_IDX );
63 TEST_FUNCTION( UtcDaliSignalTestApp01, POSITIVE_TC_IDX );
64 TEST_FUNCTION( UtcDaliSignalTestApp02, POSITIVE_TC_IDX );
65 TEST_FUNCTION( UtcDaliSignalTestApp03, POSITIVE_TC_IDX );
66 TEST_FUNCTION( UtcDaliSignalTestApp04, POSITIVE_TC_IDX );
67 TEST_FUNCTION( UtcDaliSignalTestApp05, POSITIVE_TC_IDX );
68 TEST_FUNCTION( UtcDaliSignalTestApp06, POSITIVE_TC_IDX );
69 TEST_FUNCTION( UtcDaliSlotDelegateConnection, POSITIVE_TC_IDX );
71 TEST_FUNCTION( UtcDaliSignalSlotDelegateDestruction, POSITIVE_TC_IDX );
72 TEST_FUNCTION( UtcDaliSlotHandlerDisconnect, POSITIVE_TC_IDX );
74 // Called only once before first test is run.
79 // Called only once after last test is run
88 TestButton( unsigned int id )
95 mPanelDown.Emit( *this );
100 mPanelUp.Emit( *this );
103 typedef SignalV2< void (TestButton&) > PanelDownSignal;
104 typedef SignalV2< void (TestButton&) > PanelUpSignal;
106 PanelDownSignal& DownSignal()
111 PanelUpSignal& SignalUp()
124 PanelDownSignal mPanelDown;
125 PanelUpSignal mPanelUp;
128 class TestApp : public ConnectionTracker
133 : mButtonPressed( false ),
134 mVoidFunctionCalled( false )
138 void OnButtonPress( TestButton& button )
140 mButtonPressed = true;
141 mButtonId = button.GetId();
144 void OnButtonRelease( TestButton& button )
146 mButtonPressed = false;
147 mButtonId = button.GetId();
150 int GetButtonPressedId()
155 bool BoolReturnTestFalse()
160 bool BoolReturnTestTrue()
167 mVoidFunctionCalled = true;
171 bool mVoidFunctionCalled;
179 // Void return, no parameters
180 typedef SignalV2<void ()> VoidRetNoParamSignal;
182 // Void return, 1 value parameter
183 typedef SignalV2<void (int)> VoidRet1ValueParamSignal;
185 // Void return, 1 reference parameter
186 typedef SignalV2< void (int&)> VoidRet1RefParamSignal;
188 // Void return, 2 value parameters
189 typedef SignalV2<void (int, int)> VoidRet2ValueParamSignal;
191 // bool return, 1 value parameter
192 typedef SignalV2< bool (float)> BoolRet1ValueParamSignal;
194 // bool return, 2 value parameter
195 typedef SignalV2<bool (float, int) > BoolRet2ValueParamSignal;
197 // int return, 2 value parameter
198 typedef SignalV2<int (float, int)> IntRet2ValueParamSignal;
200 // float return, 0 parameters
201 typedef SignalV2< float () > FloatRet0ParamSignal;
203 // float return, 2 value parameters
204 typedef SignalV2<float (float, float) > FloatRet2ValueParamSignal;
206 // void return, 3 value parameters
207 typedef SignalV2<void (float, float, float) > VoidSignalTypeFloatValue3;
209 // float return, 3 value parameters
210 typedef SignalV2<float (float, float, float) > FloatSignalTypeFloatValue3;
212 VoidRetNoParamSignal& SignalVoidNone() { return mSignalVoid0; }
213 VoidRet1RefParamSignal& SignalVoid1Ref() { return mSignalVoid1R; }
214 VoidRet1ValueParamSignal& SignalVoid1Value() { return mSignalVoid1V; }
215 VoidRet2ValueParamSignal& SignalVoid2Value() { return mSignalVoid2V; }
217 BoolRet1ValueParamSignal& SignalBool1Value() { return mSignalBool1V; }
218 BoolRet2ValueParamSignal& SignalBool2Value() { return mSignalBool2V; }
219 IntRet2ValueParamSignal& SignalInt2Value() { return mSignalInt2V; }
220 FloatRet0ParamSignal& SignalFloat0() { return mSignalFloat0; }
221 FloatRet2ValueParamSignal& SignalFloat2Value() { return mSignalFloat2V; }
223 VoidSignalTypeFloatValue3& VoidSignalFloatValue3() { return mVoidSignalFloatValue3; }
224 FloatSignalTypeFloatValue3& FloatSignalFloatValue3() { return mFloatSignalFloatValue3; }
230 void CheckNoConnections()
232 DALI_TEST_EQUALS( mSignalVoid0.GetConnectionCount(), 0u, TEST_LOCATION );
233 DALI_TEST_EQUALS( mSignalVoid1R.GetConnectionCount(), 0u, TEST_LOCATION );
234 DALI_TEST_EQUALS( mSignalVoid1V.GetConnectionCount(), 0u, TEST_LOCATION );
235 DALI_TEST_EQUALS( mSignalVoid2V.GetConnectionCount(), 0u, TEST_LOCATION );
236 DALI_TEST_EQUALS( mSignalBool1V.GetConnectionCount(), 0u, TEST_LOCATION );
237 DALI_TEST_EQUALS( mSignalBool2V.GetConnectionCount(), 0u, TEST_LOCATION );
238 DALI_TEST_EQUALS( mSignalInt2V.GetConnectionCount(), 0u, TEST_LOCATION );
239 DALI_TEST_EQUALS( mSignalFloat0.GetConnectionCount(), 0u, TEST_LOCATION );
240 DALI_TEST_EQUALS( mSignalFloat2V.GetConnectionCount(), 0u, TEST_LOCATION );
241 DALI_TEST_EQUALS( mVoidSignalFloatValue3.GetConnectionCount(), 0u, TEST_LOCATION );
242 DALI_TEST_EQUALS( mFloatSignalFloatValue3.GetConnectionCount(), 0u, TEST_LOCATION );
245 void EmitVoidSignalVoid()
250 void EmitVoidSignalIntRef(int& ref)
252 mSignalVoid1R.Emit(ref);
255 void EmitVoidSignalIntValue(int p1)
257 mSignalVoid1V.Emit(p1);
260 void EmitVoidSignalIntValueIntValue(int p1, int p2)
262 mSignalVoid2V.Emit(p1,p2);
265 bool EmitBoolSignalFloatValue(float p1)
267 return mSignalBool1V.Emit(p1);
270 bool EmitBoolSignalFloatValueIntValue(float p1, int p2)
272 return mSignalBool2V.Emit(p1, p2);
275 int EmitIntSignalFloatValueIntValue(float p1, int p2)
277 return mSignalInt2V.Emit(p1, p2);
280 float EmitFloat2VSignal(float p1, float p2)
282 return mSignalFloat2V.Emit(p1, p2);
285 float EmitFloat0Signal()
287 return mSignalFloat0.Emit();
290 void EmitVoidSignalFloatValue3(float p1, float p2, float p3)
292 mVoidSignalFloatValue3.Emit(p1, p2, p3);
295 float EmitFloatSignalFloatValue3(float p1, float p2, float p3)
297 return mFloatSignalFloatValue3.Emit(p1, p2, p3);
302 VoidRetNoParamSignal mSignalVoid0;
303 VoidRet1RefParamSignal mSignalVoid1R;
304 VoidRet1ValueParamSignal mSignalVoid1V;
305 VoidRet2ValueParamSignal mSignalVoid2V;
306 BoolRet1ValueParamSignal mSignalBool1V;
307 BoolRet2ValueParamSignal mSignalBool2V;
308 IntRet2ValueParamSignal mSignalInt2V;
309 FloatRet0ParamSignal mSignalFloat0;
310 FloatRet2ValueParamSignal mSignalFloat2V;
311 VoidSignalTypeFloatValue3 mVoidSignalFloatValue3;
312 FloatSignalTypeFloatValue3 mFloatSignalFloatValue3;
316 * A helper class with various slots
318 class TestSlotHandler : public ConnectionTracker
326 mFloatParam1( 0.0f ),
327 mFloatParam2( 0.0f ),
328 mFloatParam3( 0.0f ),
329 mBoolReturn( false ),
331 mFloatReturn( 0.0f ),
357 void VoidSlotIntRef( int& p1 )
364 void VoidSlotIntValue( int p1 )
371 void VoidDuplicateSlotIntValue( int p1 )
378 void VoidSlotIntValueIntValue( int p1, int p2 )
386 bool BoolSlotFloatValue( float p1 )
394 bool BoolSlotFloatValueIntValue( float p1, int p2 )
403 int IntSlotFloatValueIntValue( float p1, int p2 )
412 float FloatSlotVoid()
419 float FloatSlotFloatValueFloatValue( float p1, float p2 )
428 void VoidSlotFloatValue3( float p1, float p2, float p3 )
437 float FloatSlotFloatValue3( float p1, float p2, float p3 )
447 int mIntParam1, mIntParam2, mIntParam3;
448 float mFloatParam1, mFloatParam2, mFloatParam3;
457 * A version of TestSlotHandler which disconnects during the callback
459 class TestSlotDisconnector : public ConnectionTracker
463 TestSlotDisconnector()
467 mFloatParam1( 0.0f ),
468 mFloatParam2( 0.0f ),
469 mBoolReturn( false ),
471 mFloatReturn( 0.0f ),
489 void VoidConnectVoid( TestSignals::VoidRetNoParamSignal& signal )
491 mVoidSignalVoid = &signal;
492 signal.Connect( this, &TestSlotDisconnector::VoidSlotVoid );
497 mVoidSignalVoid->Disconnect( this, &TestSlotDisconnector::VoidSlotVoid );
501 void VoidConnectIntRef( TestSignals::VoidRet1RefParamSignal& signal )
503 mVoidSignalIntRef = &signal;
504 signal.Connect( this, &TestSlotDisconnector::VoidSlotIntRef );
507 void VoidSlotIntRef( int& p1 )
509 mVoidSignalIntRef->Disconnect( this, &TestSlotDisconnector::VoidSlotIntRef );
514 void VoidSlotIntValue( int p1 )
520 void VoidSlotIntValueIntValue( int p1, int p2 )
527 bool BoolSlotFloatValue( float p1 )
534 bool BoolSlotFloatValueIntValue( float p1, int p2 )
542 int IntSlotFloatValueIntValue( float p1, int p2 )
550 float FloatSlotVoid()
556 float FloatSlotFloatValueFloatValue( float p1, float p2 )
564 TestSignals::VoidRetNoParamSignal* mVoidSignalVoid;
565 TestSignals::VoidRet1RefParamSignal* mVoidSignalIntRef;
567 int mIntParam1, mIntParam2, mIntParam3;
568 float mFloatParam1, mFloatParam2;
576 * A more complicated version of TestSlotDisconnector, which disconnects some but not all callbacks
578 class TestSlotMultiDisconnector : public ConnectionTracker
582 static const int NUM_SLOTS = 10;
584 TestSlotMultiDisconnector()
585 : mVoidSignalVoid( NULL )
592 for( int i=0; i<NUM_SLOTS; ++i )
594 mSlotHandled[i] = false;
598 void ConnectAll( TestSignals::VoidRetNoParamSignal& signal )
600 mVoidSignalVoid = &signal;
601 signal.Connect( this, &TestSlotMultiDisconnector::Slot0 );
602 signal.Connect( this, &TestSlotMultiDisconnector::Slot1 );
603 signal.Connect( this, &TestSlotMultiDisconnector::Slot2 );
604 signal.Connect( this, &TestSlotMultiDisconnector::Slot3 );
605 signal.Connect( this, &TestSlotMultiDisconnector::Slot4 );
606 signal.Connect( this, &TestSlotMultiDisconnector::Slot5 );
607 signal.Connect( this, &TestSlotMultiDisconnector::Slot6 );
608 signal.Connect( this, &TestSlotMultiDisconnector::Slot7 );
609 signal.Connect( this, &TestSlotMultiDisconnector::Slot8 );
610 signal.Connect( this, &TestSlotMultiDisconnector::Slot9 );
615 mSlotHandled[0] = true;
620 mSlotHandled[1] = true;
625 mSlotHandled[2] = true;
630 mSlotHandled[3] = true;
632 // Disconnect the odd numbered lots, because we can
633 mVoidSignalVoid->Disconnect( this, &TestSlotMultiDisconnector::Slot1 );
634 mVoidSignalVoid->Disconnect( this, &TestSlotMultiDisconnector::Slot3 );
635 mVoidSignalVoid->Disconnect( this, &TestSlotMultiDisconnector::Slot5 );
636 mVoidSignalVoid->Disconnect( this, &TestSlotMultiDisconnector::Slot7 );
637 mVoidSignalVoid->Disconnect( this, &TestSlotMultiDisconnector::Slot9 );
642 mSlotHandled[4] = true;
647 mSlotHandled[5] = true;
652 mSlotHandled[6] = true;
657 mSlotHandled[7] = true;
662 mSlotHandled[8] = true;
667 mSlotHandled[9] = true;
670 TestSignals::VoidRetNoParamSignal* mVoidSignalVoid;
672 bool mSlotHandled[NUM_SLOTS];
677 * A version of TestSlotHandler which disconnects during the callback
679 class TestEmitDuringCallback : public ConnectionTracker
683 TestEmitDuringCallback()
684 : mVoidSignalVoid( NULL ),
689 void VoidConnectVoid( TestSignals::VoidRetNoParamSignal& signal )
691 mVoidSignalVoid = &signal;
692 signal.Connect( this, &TestEmitDuringCallback::VoidSlotVoid );
697 // Emitting during Emit is very bad!
698 mVoidSignalVoid->Emit();
703 TestSignals::VoidRetNoParamSignal* mVoidSignalVoid;
710 * A version of TestSlotHandler which uses SlotDelegate
712 class TestSlotDelegateHandler // This does not inherit from ConnectionTrackerInterface!
716 TestSlotDelegateHandler()
717 : mSlotDelegate( this ),
721 mFloatParam1( 0.0f ),
722 mFloatParam2( 0.0f ),
723 mFloatParam3( 0.0f ),
724 mBoolReturn( false ),
726 mFloatReturn( 0.0f ),
752 void VoidSlotIntRef( int& p1 )
759 void VoidSlotIntValue( int p1 )
766 void VoidDuplicateSlotIntValue( int p1 )
773 void VoidSlotIntValueIntValue( int p1, int p2 )
781 bool BoolSlotFloatValue( float p1 )
789 bool BoolSlotFloatValueIntValue( float p1, int p2 )
798 int IntSlotFloatValueIntValue( float p1, int p2 )
807 float FloatSlotVoid()
814 float FloatSlotFloatValueFloatValue( float p1, float p2 )
823 void VoidSlotFloatValue3( float p1, float p2, float p3 )
832 float FloatSlotFloatValue3( float p1, float p2, float p3 )
842 SlotDelegate<TestSlotDelegateHandler> mSlotDelegate;
844 int mIntParam1, mIntParam2, mIntParam3;
845 float mFloatParam1, mFloatParam2, mFloatParam3;
854 * Test that reimplmenting ConnectionTrackerInterface actually works.
855 * This basic connection tracker only allows one callback to be connected.
857 class TestBasicConnectionTrackerInterface : public ConnectionTrackerInterface
861 TestBasicConnectionTrackerInterface()
862 : mCallbackHandled( false ),
864 mSlotObserver( NULL )
868 ~TestBasicConnectionTrackerInterface()
872 // Notify signal since the slot has been destroyed
873 mSlotObserver->SlotDisconnected( mCallback );
883 mCallbackHandled = true;
887 * @copydoc ConnectionTrackerInterface::GetConnectionCount
889 virtual std::size_t GetConnectionCount() const
900 * @copydoc ConnectionTrackerInterface::SignalConnected
902 virtual void SignalConnected( SlotObserver* slotObserver, CallbackBase* callback )
904 DALI_ASSERT_ALWAYS( NULL == mCallback && "Only one connection supported!" );
906 mCallback = callback;
907 mSlotObserver = slotObserver;
911 * @copydoc ConnectionTrackerInterface::SignalDisconnected
913 virtual void SignalDisconnected( SlotObserver* slotObserver, CallbackBase* callback )
915 if( mSlotObserver == slotObserver )
917 mSlotObserver = NULL;
926 TestBasicConnectionTrackerInterface( const TestBasicConnectionTrackerInterface& ); ///< undefined copy constructor
927 TestBasicConnectionTrackerInterface& operator=( const TestBasicConnectionTrackerInterface& ); ///< undefined assignment operator
931 bool mCallbackHandled;
935 CallbackBase* mCallback; ///< callback, has ownership
936 SlotObserver* mSlotObserver; ///< a pointer to the slot observer (not owned)
939 static void UtcDaliSignalEmptyCheck()
941 // Test that Empty() check works before & after signal connection
944 TestSignals::VoidRetNoParamSignal signal;
945 DALI_TEST_CHECK( signal.Empty() );
946 TestSlotHandler handler;
947 signal.Connect( &handler, &TestSlotHandler::VoidSlotVoid );
948 DALI_TEST_CHECK( ! signal.Empty() );
952 TestSignals::VoidRet1ValueParamSignal signal;
953 DALI_TEST_CHECK( signal.Empty() );
954 TestSlotHandler handler;
955 signal.Connect( &handler, &TestSlotHandler::VoidSlotIntValue );
956 DALI_TEST_CHECK( ! signal.Empty() );
960 TestSignals::VoidRet1RefParamSignal signal;
961 DALI_TEST_CHECK( signal.Empty() );
962 TestSlotHandler handler;
963 signal.Connect( &handler, &TestSlotHandler::VoidSlotIntRef );
964 DALI_TEST_CHECK( ! signal.Empty() );
968 TestSignals::VoidRet2ValueParamSignal signal;
969 DALI_TEST_CHECK( signal.Empty() );
970 TestSlotHandler handler;
971 signal.Connect( &handler, &TestSlotHandler::VoidSlotIntValueIntValue );
972 DALI_TEST_CHECK( ! signal.Empty() );
976 TestSignals::BoolRet1ValueParamSignal signal;
977 DALI_TEST_CHECK( signal.Empty() );
978 TestSlotHandler handler;
979 signal.Connect( &handler, &TestSlotHandler::BoolSlotFloatValue );
980 DALI_TEST_CHECK( ! signal.Empty() );
984 TestSignals::BoolRet2ValueParamSignal signal;
985 DALI_TEST_CHECK( signal.Empty() );
986 TestSlotHandler handler;
987 signal.Connect( &handler, &TestSlotHandler::BoolSlotFloatValueIntValue );
988 DALI_TEST_CHECK( ! signal.Empty() );
992 TestSignals::IntRet2ValueParamSignal signal;
993 DALI_TEST_CHECK( signal.Empty() );
994 TestSlotHandler handler;
995 signal.Connect( &handler, &TestSlotHandler::IntSlotFloatValueIntValue );
996 DALI_TEST_CHECK( ! signal.Empty() );
1000 TestSignals::FloatRet0ParamSignal signal;
1001 DALI_TEST_CHECK( signal.Empty() );
1002 TestSlotHandler handler;
1003 signal.Connect( &handler, &TestSlotHandler::FloatSlotVoid );
1004 DALI_TEST_CHECK( ! signal.Empty() );
1008 TestSignals::FloatRet2ValueParamSignal signal;
1009 DALI_TEST_CHECK( signal.Empty() );
1010 TestSlotHandler handler;
1011 signal.Connect(&handler, &TestSlotHandler::FloatSlotFloatValueFloatValue);
1012 DALI_TEST_CHECK( ! signal.Empty() );
1016 static void UtcDaliSignalEmptyCheckSlotDestruction()
1018 // Test that signal disconnect works when slot is destroyed (goes out of scope)
1021 TestSignals::VoidRetNoParamSignal signal;
1023 DALI_TEST_CHECK( signal.Empty() );
1024 TestSlotHandler handler;
1025 signal.Connect( &handler, &TestSlotHandler::VoidSlotVoid );
1026 DALI_TEST_CHECK( ! signal.Empty() );
1028 // End of slot lifetime
1029 DALI_TEST_CHECK( signal.Empty() );
1031 // Signal emission should be a NOOP
1036 TestSignals::VoidRet1ValueParamSignal signal;
1038 DALI_TEST_CHECK( signal.Empty() );
1039 TestSlotHandler handler;
1040 signal.Connect( &handler, &TestSlotHandler::VoidSlotIntValue );
1041 DALI_TEST_CHECK( ! signal.Empty() );
1043 // End of slot lifetime
1044 DALI_TEST_CHECK( signal.Empty() );
1046 // Signal emission should be a NOOP
1051 TestSignals::VoidRet1RefParamSignal signal;
1053 DALI_TEST_CHECK( signal.Empty() );
1054 TestSlotHandler handler;
1055 signal.Connect( &handler, &TestSlotHandler::VoidSlotIntRef );
1056 DALI_TEST_CHECK( ! signal.Empty() );
1058 // End of slot lifetime
1059 DALI_TEST_CHECK( signal.Empty() );
1061 // Signal emission should be a NOOP
1063 signal.Emit( temp );
1067 TestSignals::VoidRet2ValueParamSignal signal;
1069 DALI_TEST_CHECK( signal.Empty() );
1070 TestSlotHandler handler;
1071 signal.Connect( &handler, &TestSlotHandler::VoidSlotIntValueIntValue );
1072 DALI_TEST_CHECK( ! signal.Empty() );
1074 // End of slot lifetime
1075 DALI_TEST_CHECK( signal.Empty() );
1077 // Signal emission should be a NOOP
1078 signal.Emit( 1, 2 );
1082 TestSignals::BoolRet1ValueParamSignal signal;
1084 DALI_TEST_CHECK( signal.Empty() );
1085 TestSlotHandler handler;
1086 signal.Connect( &handler, &TestSlotHandler::BoolSlotFloatValue );
1087 DALI_TEST_CHECK( ! signal.Empty() );
1089 // End of slot lifetime
1090 DALI_TEST_CHECK( signal.Empty() );
1092 // Signal emission should be a NOOP
1093 bool blah = signal.Emit( 1.0f );
1094 DALI_TEST_CHECK( ! blah );
1098 TestSignals::BoolRet2ValueParamSignal signal;
1100 DALI_TEST_CHECK( signal.Empty() );
1101 TestSlotHandler handler;
1102 signal.Connect( &handler, &TestSlotHandler::BoolSlotFloatValueIntValue );
1103 DALI_TEST_CHECK( ! signal.Empty() );
1105 // End of slot lifetime
1106 DALI_TEST_CHECK( signal.Empty() );
1108 // Signal emission should be a NOOP
1109 bool blah = signal.Emit( 1.0f, 2 );
1110 DALI_TEST_CHECK( ! blah );
1114 TestSignals::IntRet2ValueParamSignal signal;
1116 DALI_TEST_CHECK( signal.Empty() );
1117 TestSlotHandler handler;
1118 signal.Connect( &handler, &TestSlotHandler::IntSlotFloatValueIntValue );
1119 DALI_TEST_CHECK( ! signal.Empty() );
1121 // End of slot lifetime
1122 DALI_TEST_CHECK( signal.Empty() );
1124 // Signal emission should be a NOOP
1125 int blah = signal.Emit( 10.0f, 100 );
1126 DALI_TEST_CHECK( 0 == blah );
1130 TestSignals::FloatRet0ParamSignal signal;
1132 DALI_TEST_CHECK( signal.Empty() );
1133 TestSlotHandler handler;
1134 signal.Connect( &handler, &TestSlotHandler::FloatSlotVoid );
1135 DALI_TEST_CHECK( ! signal.Empty() );
1137 // End of slot lifetime
1138 DALI_TEST_CHECK( signal.Empty() );
1140 // Signal emission should be a NOOP
1141 float blah = signal.Emit();
1142 DALI_TEST_CHECK( 0.0f == blah );
1146 TestSignals::FloatRet2ValueParamSignal signal;
1148 DALI_TEST_CHECK( signal.Empty() );
1149 TestSlotHandler handler;
1150 signal.Connect(&handler, &TestSlotHandler::FloatSlotFloatValueFloatValue);
1151 DALI_TEST_CHECK( ! signal.Empty() );
1153 // End of slot lifetime
1154 DALI_TEST_CHECK( signal.Empty() );
1156 // Signal emission should be a NOOP
1157 float blah = signal.Emit( 3.0f, 4.0f );
1158 DALI_TEST_CHECK( 0.0f == blah );
1162 // Positive test case for a method
1163 static void UtcDaliSignalConnectAndEmit()
1165 // Test basic signal emission for each slot type
1167 TestSignals signals;
1170 TestSlotHandler handlers;
1171 signals.SignalVoidNone().Connect(&handlers, &TestSlotHandler::VoidSlotVoid);
1172 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1173 signals.EmitVoidSignalVoid();
1174 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
1176 // Test double emission
1177 handlers.mHandled = false;
1178 signals.EmitVoidSignalVoid();
1179 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
1181 signals.CheckNoConnections();
1184 TestSlotHandler handlers;
1185 signals.SignalVoid1Ref().Connect(&handlers, &TestSlotHandler::VoidSlotIntRef);
1186 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1188 signals.EmitVoidSignalIntRef(x);
1189 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
1190 DALI_TEST_EQUALS( handlers.mIntParam1, 7, TEST_LOCATION );
1192 signals.CheckNoConnections();
1195 TestSlotHandler handlers;
1196 signals.SignalVoid1Value().Connect(&handlers, &TestSlotHandler::VoidSlotIntValue);
1197 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1198 signals.EmitVoidSignalIntValue(5);
1199 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
1200 DALI_TEST_EQUALS( handlers.mIntParam1, 5, TEST_LOCATION );
1202 signals.CheckNoConnections();
1205 TestSlotHandler handlers;
1206 signals.SignalVoid2Value().Connect(&handlers, &TestSlotHandler::VoidSlotIntValueIntValue);
1207 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1208 signals.EmitVoidSignalIntValueIntValue(6, 7);
1209 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
1210 DALI_TEST_EQUALS( handlers.mIntParam1, 6, TEST_LOCATION );
1211 DALI_TEST_EQUALS( handlers.mIntParam2, 7, TEST_LOCATION );
1213 signals.CheckNoConnections();
1216 TestSlotHandler handlers;
1217 signals.SignalBool1Value().Connect(&handlers, &TestSlotHandler::BoolSlotFloatValue);
1218 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1220 handlers.mBoolReturn = true;
1221 DALI_TEST_EQUALS( signals.EmitBoolSignalFloatValue(5.0f), true, TEST_LOCATION );
1222 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
1223 DALI_TEST_EQUALS( handlers.mFloatParam1, 5.0f, TEST_LOCATION );
1225 // repeat with opposite return value
1226 handlers.mBoolReturn = false;
1227 handlers.mHandled = false;
1228 DALI_TEST_EQUALS( signals.EmitBoolSignalFloatValue(6.0f), false, TEST_LOCATION );
1229 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
1230 DALI_TEST_EQUALS( handlers.mFloatParam1, 6.0f, TEST_LOCATION );
1232 signals.CheckNoConnections();
1235 TestSlotHandler handlers;
1236 signals.SignalBool2Value().Connect(&handlers, &TestSlotHandler::BoolSlotFloatValueIntValue);
1237 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1238 handlers.mBoolReturn = true;
1239 DALI_TEST_EQUALS( signals.EmitBoolSignalFloatValueIntValue(5.0f, 10), true, TEST_LOCATION );
1240 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
1241 DALI_TEST_EQUALS( handlers.mFloatParam1, 5.0f, TEST_LOCATION );
1242 DALI_TEST_EQUALS( handlers.mIntParam2, 10, TEST_LOCATION );
1244 signals.CheckNoConnections();
1247 TestSlotHandler handlers;
1248 signals.SignalInt2Value().Connect(&handlers, &TestSlotHandler::IntSlotFloatValueIntValue);
1249 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1250 handlers.mIntReturn = 27;
1251 int x = signals.EmitIntSignalFloatValueIntValue(33.5f, 5);
1252 DALI_TEST_EQUALS( x, 27, TEST_LOCATION );
1253 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
1254 DALI_TEST_EQUALS( handlers.mFloatParam1, 33.5f, TEST_LOCATION );
1255 DALI_TEST_EQUALS( handlers.mIntParam2, 5, TEST_LOCATION );
1257 signals.CheckNoConnections();
1260 TestSlotHandler handlers;
1261 signals.SignalFloat0().Connect(&handlers, &TestSlotHandler::FloatSlotVoid);
1262 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1263 handlers.mFloatReturn = 27.0f;
1264 float f = signals.EmitFloat0Signal();
1265 DALI_TEST_EQUALS( f, 27.0f, TEST_LOCATION );
1266 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
1267 DALI_TEST_EQUALS( handlers.mFloatParam1, 0.0f, TEST_LOCATION );
1268 DALI_TEST_EQUALS( handlers.mFloatParam2, 0.0f, 0.001f, TEST_LOCATION );
1270 signals.CheckNoConnections();
1273 TestSlotHandler handlers;
1274 signals.SignalFloat2Value().Connect(&handlers, &TestSlotHandler::FloatSlotFloatValueFloatValue);
1275 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1276 handlers.mFloatReturn = 27.0f;
1277 float f = signals.EmitFloat2VSignal(5, 33.0f);
1278 DALI_TEST_EQUALS( f, 27.0f, TEST_LOCATION );
1279 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
1280 DALI_TEST_EQUALS( handlers.mFloatParam1, 5.0f, TEST_LOCATION );
1281 DALI_TEST_EQUALS( handlers.mFloatParam2, 33.0f, 0.001f, TEST_LOCATION );
1283 signals.CheckNoConnections();
1286 TestSlotHandler handlers;
1287 signals.VoidSignalFloatValue3().Connect(&handlers, &TestSlotHandler::VoidSlotFloatValue3);
1288 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1289 signals.EmitVoidSignalFloatValue3(5, 33.0f, 100.0f);
1290 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
1291 DALI_TEST_EQUALS( handlers.mFloatParam1, 5.0f, TEST_LOCATION );
1292 DALI_TEST_EQUALS( handlers.mFloatParam2, 33.0f, 0.001f, TEST_LOCATION );
1293 DALI_TEST_EQUALS( handlers.mFloatParam3, 100.0f, 0.001f, TEST_LOCATION );
1295 signals.CheckNoConnections();
1298 TestSlotHandler handlers;
1299 signals.FloatSignalFloatValue3().Connect(&handlers, &TestSlotHandler::FloatSlotFloatValue3);
1300 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1301 handlers.mFloatReturn = 27.0f;
1302 float returnValue = signals.EmitFloatSignalFloatValue3(5, 33.0f, 100.0f);
1303 DALI_TEST_EQUALS( returnValue, 27.0f, TEST_LOCATION );
1304 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
1305 DALI_TEST_EQUALS( handlers.mFloatParam1, 5.0f, TEST_LOCATION );
1306 DALI_TEST_EQUALS( handlers.mFloatParam2, 33.0f, 0.001f, TEST_LOCATION );
1307 DALI_TEST_EQUALS( handlers.mFloatParam3, 100.0f, 0.001f, TEST_LOCATION );
1309 signals.CheckNoConnections();
1312 static void UtcDaliSignalDisconnect()
1314 // Test that callbacks don't occur if a signal is disconnected before emission
1316 TestSignals signals;
1319 TestSlotHandler handlers;
1320 signals.SignalVoidNone().Connect(&handlers, &TestSlotHandler::VoidSlotVoid);
1321 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1322 signals.SignalVoidNone().Disconnect(&handlers, &TestSlotHandler::VoidSlotVoid);
1323 signals.EmitVoidSignalVoid();
1324 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1328 TestSlotHandler handlers;
1329 signals.SignalVoid1Ref().Connect(&handlers, &TestSlotHandler::VoidSlotIntRef);
1330 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1332 handlers.mIntReturn = 5;
1333 signals.SignalVoid1Ref().Disconnect(&handlers, &TestSlotHandler::VoidSlotIntRef);
1334 signals.EmitVoidSignalIntRef(r);
1335 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1336 DALI_TEST_EQUALS( handlers.mIntParam1, 0, TEST_LOCATION );
1337 DALI_TEST_EQUALS( r, 7, TEST_LOCATION );
1341 TestSlotHandler handlers;
1342 signals.SignalVoid1Value().Connect(&handlers, &TestSlotHandler::VoidSlotIntValue);
1343 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1344 signals.SignalVoid1Value().Disconnect(&handlers, &TestSlotHandler::VoidSlotIntValue);
1345 signals.EmitVoidSignalIntValue(5);
1346 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1347 DALI_TEST_EQUALS( handlers.mIntParam1, 0, TEST_LOCATION );
1351 TestSlotHandler handlers;
1352 signals.SignalVoid2Value().Connect(&handlers, &TestSlotHandler::VoidSlotIntValueIntValue);
1353 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1354 signals.SignalVoid2Value().Disconnect(&handlers, &TestSlotHandler::VoidSlotIntValueIntValue);
1355 signals.EmitVoidSignalIntValueIntValue(5, 10);
1356 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1357 DALI_TEST_EQUALS( handlers.mIntParam1, 0, TEST_LOCATION );
1358 DALI_TEST_EQUALS( handlers.mIntParam2, 0, TEST_LOCATION );
1362 TestSlotHandler handlers;
1363 signals.SignalBool1Value().Connect(&handlers, &TestSlotHandler::BoolSlotFloatValue);
1364 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1365 handlers.mBoolReturn = true;
1366 signals.SignalBool1Value().Disconnect(&handlers, &TestSlotHandler::BoolSlotFloatValue);
1367 DALI_TEST_EQUALS( signals.EmitBoolSignalFloatValue(5.0f), false, TEST_LOCATION );
1368 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1369 DALI_TEST_EQUALS( handlers.mFloatParam1, 0.0f, TEST_LOCATION );
1373 TestSlotHandler handlers;
1374 signals.SignalBool2Value().Connect(&handlers, &TestSlotHandler::BoolSlotFloatValueIntValue);
1375 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1376 handlers.mBoolReturn = true;
1377 signals.SignalBool2Value().Disconnect(&handlers, &TestSlotHandler::BoolSlotFloatValueIntValue);
1378 DALI_TEST_EQUALS( signals.EmitBoolSignalFloatValueIntValue(5.0f, 10), false, TEST_LOCATION );
1379 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1380 DALI_TEST_EQUALS( handlers.mFloatParam1, 0.0f, TEST_LOCATION );
1381 DALI_TEST_EQUALS( handlers.mIntParam2, 0, TEST_LOCATION );
1385 TestSlotHandler handlers;
1386 signals.SignalInt2Value().Connect(&handlers, &TestSlotHandler::IntSlotFloatValueIntValue);
1387 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1388 handlers.mIntReturn = 27;
1389 signals.SignalInt2Value().Disconnect(&handlers, &TestSlotHandler::IntSlotFloatValueIntValue);
1390 signals.EmitIntSignalFloatValueIntValue(5, 33.0f);
1391 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1392 DALI_TEST_EQUALS( handlers.mIntParam1, 0, TEST_LOCATION );
1393 DALI_TEST_EQUALS( handlers.mFloatParam2, 0.0f, 0.001f, TEST_LOCATION );
1397 TestSlotHandler handlers;
1398 signals.SignalFloat0().Connect(&handlers, &TestSlotHandler::FloatSlotVoid);
1399 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1400 handlers.mFloatReturn = 27.0f;
1401 signals.SignalFloat0().Disconnect(&handlers, &TestSlotHandler::FloatSlotVoid);
1402 signals.EmitFloat0Signal();
1403 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1404 DALI_TEST_EQUALS( handlers.mFloatParam1, 0.0f, 0.001f, TEST_LOCATION );
1405 DALI_TEST_EQUALS( handlers.mFloatParam2, 0.0f, 0.001f, TEST_LOCATION );
1409 TestSlotHandler handlers;
1410 signals.SignalFloat2Value().Connect(&handlers, &TestSlotHandler::FloatSlotFloatValueFloatValue);
1411 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1412 handlers.mFloatReturn = 27.0f;
1413 signals.SignalFloat2Value().Disconnect(&handlers, &TestSlotHandler::FloatSlotFloatValueFloatValue);
1414 signals.EmitFloat2VSignal(5, 33.0f);
1415 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1416 DALI_TEST_EQUALS( handlers.mFloatParam1, 0.0f, 0.001f, TEST_LOCATION );
1417 DALI_TEST_EQUALS( handlers.mFloatParam2, 0.0f, 0.001f, TEST_LOCATION );
1421 static void UtcDaliSignalDisconnect2()
1423 // Test that nothing happens when attempting to disconnect an unconnected slot
1425 TestSignals signals;
1427 TestSlotHandler handlers;
1428 signals.SignalVoidNone().Disconnect(&handlers, &TestSlotHandler::VoidSlotVoid);
1429 signals.EmitVoidSignalVoid();
1430 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1434 TestSlotHandler handlers;
1436 signals.SignalVoid1Ref().Disconnect(&handlers, &TestSlotHandler::VoidSlotIntRef);
1437 signals.EmitVoidSignalIntRef(r);
1438 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1439 DALI_TEST_EQUALS( handlers.mIntParam1, 0, TEST_LOCATION );
1440 DALI_TEST_EQUALS( r, 7, TEST_LOCATION );
1444 TestSlotHandler handlers;
1445 signals.SignalVoid1Value().Disconnect(&handlers, &TestSlotHandler::VoidSlotIntValue);
1446 signals.EmitVoidSignalIntValue(5);
1447 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1448 DALI_TEST_EQUALS( handlers.mIntParam1, 0, TEST_LOCATION );
1452 TestSlotHandler handlers;
1453 signals.SignalVoid2Value().Disconnect(&handlers, &TestSlotHandler::VoidSlotIntValueIntValue);
1454 signals.EmitVoidSignalIntValueIntValue(5, 10);
1455 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1456 DALI_TEST_EQUALS( handlers.mIntParam1, 0, TEST_LOCATION );
1457 DALI_TEST_EQUALS( handlers.mIntParam2, 0, TEST_LOCATION );
1461 TestSlotHandler handlers;
1462 handlers.mBoolReturn = true;
1463 signals.SignalBool1Value().Disconnect(&handlers, &TestSlotHandler::BoolSlotFloatValue);
1464 DALI_TEST_EQUALS( signals.EmitBoolSignalFloatValue(5.0f), false, TEST_LOCATION );
1465 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1466 DALI_TEST_EQUALS( handlers.mFloatParam1, 0.0f, TEST_LOCATION );
1470 TestSlotHandler handlers;
1471 handlers.mBoolReturn = true;
1472 signals.SignalBool2Value().Disconnect(&handlers, &TestSlotHandler::BoolSlotFloatValueIntValue);
1473 DALI_TEST_EQUALS( signals.EmitBoolSignalFloatValueIntValue(5.0f, 10), false, TEST_LOCATION );
1474 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1475 DALI_TEST_EQUALS( handlers.mFloatParam1, 0.0f, TEST_LOCATION );
1476 DALI_TEST_EQUALS( handlers.mIntParam2, 0, TEST_LOCATION );
1480 TestSlotHandler handlers;
1481 handlers.mIntReturn = 27;
1482 signals.SignalInt2Value().Disconnect(&handlers, &TestSlotHandler::IntSlotFloatValueIntValue);
1483 signals.EmitIntSignalFloatValueIntValue(5, 33.0f);
1484 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1485 DALI_TEST_EQUALS( handlers.mIntParam1, 0, TEST_LOCATION );
1486 DALI_TEST_EQUALS( handlers.mFloatParam2, 0.0f, 0.001f, TEST_LOCATION );
1490 TestSlotHandler handlers;
1491 handlers.mFloatReturn = 27.0f;
1492 signals.SignalFloat2Value().Disconnect(&handlers, &TestSlotHandler::FloatSlotFloatValueFloatValue);
1493 signals.EmitFloat2VSignal(5, 33.0f);
1494 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1495 DALI_TEST_EQUALS( handlers.mFloatParam1, 0.0f, 0.001f, TEST_LOCATION );
1496 DALI_TEST_EQUALS( handlers.mFloatParam2, 0.0f, 0.001f, TEST_LOCATION );
1500 TestSlotHandler handlers;
1501 handlers.mFloatReturn = 27.0f;
1502 signals.SignalFloat0().Disconnect(&handlers, &TestSlotHandler::FloatSlotVoid);
1503 signals.EmitFloat0Signal();
1504 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1505 DALI_TEST_EQUALS( handlers.mFloatParam1, 0.0f, 0.001f, TEST_LOCATION );
1506 DALI_TEST_EQUALS( handlers.mFloatParam2, 0.0f, 0.001f, TEST_LOCATION );
1510 static void UtcDaliSignalDisconnect3()
1512 // Test that callbacks stop after a signal is disconnected
1514 TestSignals signals;
1517 TestSlotHandler handlers;
1518 signals.SignalVoidNone().Connect(&handlers, &TestSlotHandler::VoidSlotVoid);
1519 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1522 signals.EmitVoidSignalVoid();
1523 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
1525 // Disconnect and emit again
1526 handlers.mHandled = false;
1527 signals.SignalVoidNone().Disconnect(&handlers, &TestSlotHandler::VoidSlotVoid);
1528 signals.EmitVoidSignalVoid();
1529 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1533 TestSlotHandler handlers;
1534 signals.SignalVoid1Ref().Connect(&handlers, &TestSlotHandler::VoidSlotIntRef);
1535 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1539 signals.EmitVoidSignalIntRef(r);
1540 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
1541 DALI_TEST_EQUALS( handlers.mIntParam1, 7, TEST_LOCATION );
1543 // Disconnect and emit again
1544 handlers.mHandled = false;
1545 handlers.mIntParam1 = 0;
1546 signals.SignalVoid1Ref().Disconnect(&handlers, &TestSlotHandler::VoidSlotIntRef);
1547 signals.EmitVoidSignalIntRef(r);
1548 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
1549 DALI_TEST_EQUALS( handlers.mIntParam1, 0, TEST_LOCATION );
1550 DALI_TEST_EQUALS( r, 7, TEST_LOCATION );
1554 static void UtcDaliSignalCustomConnectionTracker()
1556 // Test slot destruction
1558 TestSignals::VoidRetNoParamSignal signal;
1560 DALI_TEST_CHECK( signal.Empty() );
1561 TestBasicConnectionTrackerInterface customTracker;
1562 signal.Connect( &customTracker, &TestBasicConnectionTrackerInterface::VoidSlotVoid );
1563 DALI_TEST_CHECK( ! signal.Empty() );
1565 // End of slot lifetime
1566 DALI_TEST_CHECK( signal.Empty() );
1568 // Signal emission should be a NOOP
1572 TestBasicConnectionTrackerInterface customTracker2;
1574 // Test signal emission & destruction
1576 TestSignals::VoidRetNoParamSignal signal;
1577 DALI_TEST_CHECK( signal.Empty() );
1578 DALI_TEST_EQUALS( 0u, customTracker2.GetConnectionCount(), TEST_LOCATION );
1580 signal.Connect( &customTracker2, &TestBasicConnectionTrackerInterface::VoidSlotVoid );
1581 DALI_TEST_CHECK( ! signal.Empty() );
1582 DALI_TEST_EQUALS( 1u, customTracker2.GetConnectionCount(), TEST_LOCATION );
1584 DALI_TEST_EQUALS( customTracker2.mCallbackHandled, false, TEST_LOCATION );
1586 DALI_TEST_EQUALS( customTracker2.mCallbackHandled, true, TEST_LOCATION );
1588 DALI_TEST_EQUALS( 0u, customTracker2.GetConnectionCount(), TEST_LOCATION );
1591 static void UtcDaliSignalMultipleConnections()
1593 // Test that multiple callbacks can be connected to the same signal
1595 TestSignals signals;
1598 TestSlotHandler handler1;
1599 signals.SignalVoidNone().Connect( &handler1, &TestSlotHandler::VoidSlotVoid );
1600 DALI_TEST_EQUALS( handler1.mHandled, false, TEST_LOCATION );
1602 TestSlotHandler handler2;
1603 signals.SignalVoidNone().Connect( &handler2, &TestSlotHandler::VoidSlotVoid );
1604 DALI_TEST_EQUALS( handler2.mHandled, false, TEST_LOCATION );
1606 signals.EmitVoidSignalVoid();
1607 DALI_TEST_EQUALS( handler1.mHandled, true, TEST_LOCATION );
1608 DALI_TEST_EQUALS( handler2.mHandled, true, TEST_LOCATION );
1610 // Remove first connection and repeat
1613 signals.SignalVoidNone().Disconnect( &handler1, &TestSlotHandler::VoidSlotVoid );
1615 signals.EmitVoidSignalVoid();
1616 DALI_TEST_EQUALS( handler1.mHandled, false, TEST_LOCATION );
1617 DALI_TEST_EQUALS( handler2.mHandled, true, TEST_LOCATION );
1621 TestSlotHandler handler1;
1622 signals.SignalVoid1Ref().Connect( &handler1, &TestSlotHandler::VoidSlotIntRef );
1623 DALI_TEST_EQUALS( handler1.mHandled, false, TEST_LOCATION );
1625 TestSlotHandler handler2;
1626 signals.SignalVoid1Ref().Connect( &handler2, &TestSlotHandler::VoidSlotIntRef );
1627 DALI_TEST_EQUALS( handler2.mHandled, false, TEST_LOCATION );
1630 signals.EmitVoidSignalIntRef(x);
1631 DALI_TEST_EQUALS( handler1.mHandled, true, TEST_LOCATION );
1632 DALI_TEST_EQUALS( handler2.mHandled, true, TEST_LOCATION );
1633 DALI_TEST_EQUALS( handler1.mIntParam1, 7, TEST_LOCATION );
1634 DALI_TEST_EQUALS( handler2.mIntParam1, 7, TEST_LOCATION );
1636 // Remove second connection and repeat
1640 signals.SignalVoid1Ref().Disconnect( &handler2, &TestSlotHandler::VoidSlotIntRef );
1642 signals.EmitVoidSignalIntRef(x);
1643 DALI_TEST_EQUALS( handler1.mHandled, true, TEST_LOCATION );
1644 DALI_TEST_EQUALS( handler2.mHandled, false, TEST_LOCATION );
1645 DALI_TEST_EQUALS( handler1.mIntParam1, 8, TEST_LOCATION );
1646 DALI_TEST_EQUALS( handler2.mIntParam1, 0, TEST_LOCATION );
1650 TestSlotHandler handler1;
1651 signals.SignalVoid1Value().Connect( &handler1, &TestSlotHandler::VoidSlotIntValue );
1652 DALI_TEST_EQUALS( handler1.mHandled, false, TEST_LOCATION );
1654 TestSlotHandler handler2;
1655 signals.SignalVoid1Value().Connect( &handler2, &TestSlotHandler::VoidSlotIntValue );
1656 DALI_TEST_EQUALS( handler2.mHandled, false, TEST_LOCATION );
1658 TestSlotHandler handler3;
1659 signals.SignalVoid1Value().Connect( &handler3, &TestSlotHandler::VoidSlotIntValue );
1660 DALI_TEST_EQUALS( handler3.mHandled, false, TEST_LOCATION );
1662 signals.EmitVoidSignalIntValue( 5 );
1663 DALI_TEST_EQUALS( handler1.mHandled, true, TEST_LOCATION );
1664 DALI_TEST_EQUALS( handler1.mIntParam1, 5, TEST_LOCATION );
1665 DALI_TEST_EQUALS( handler2.mHandled, true, TEST_LOCATION );
1666 DALI_TEST_EQUALS( handler2.mIntParam1, 5, TEST_LOCATION );
1667 DALI_TEST_EQUALS( handler3.mHandled, true, TEST_LOCATION );
1668 DALI_TEST_EQUALS( handler3.mIntParam1, 5, TEST_LOCATION );
1670 // Remove middle connection and repeat
1674 signals.SignalVoid1Value().Disconnect( &handler2, &TestSlotHandler::VoidSlotIntValue );
1676 signals.EmitVoidSignalIntValue( 6 );
1677 DALI_TEST_EQUALS( handler1.mHandled, true, TEST_LOCATION );
1678 DALI_TEST_EQUALS( handler1.mIntParam1, 6, TEST_LOCATION );
1679 DALI_TEST_EQUALS( handler2.mHandled, false, TEST_LOCATION );
1680 DALI_TEST_EQUALS( handler2.mIntParam1, 0, TEST_LOCATION );
1681 DALI_TEST_EQUALS( handler3.mHandled, true, TEST_LOCATION );
1682 DALI_TEST_EQUALS( handler3.mIntParam1, 6, TEST_LOCATION );
1685 // Test that multiple callbacks are disconnected when a signal is destroyed
1687 TestSlotHandler handler4;
1688 TestSlotHandler handler5;
1689 TestSlotHandler handler6;
1692 TestSignals::VoidRet1ValueParamSignal tempSignal;
1694 DALI_TEST_EQUALS( handler4.GetConnectionCount(), 0u, TEST_LOCATION );
1695 DALI_TEST_EQUALS( handler5.GetConnectionCount(), 0u, TEST_LOCATION );
1696 DALI_TEST_EQUALS( handler6.GetConnectionCount(), 0u, TEST_LOCATION );
1698 tempSignal.Connect( &handler4, &TestSlotHandler::VoidSlotIntValue );
1699 tempSignal.Connect( &handler5, &TestSlotHandler::VoidSlotIntValue );
1700 tempSignal.Connect( &handler6, &TestSlotHandler::VoidSlotIntValue );
1702 DALI_TEST_EQUALS( handler4.GetConnectionCount(), 1u, TEST_LOCATION );
1703 DALI_TEST_EQUALS( handler5.GetConnectionCount(), 1u, TEST_LOCATION );
1704 DALI_TEST_EQUALS( handler6.GetConnectionCount(), 1u, TEST_LOCATION );
1706 // End of tempSignal lifetime
1708 DALI_TEST_EQUALS( handler4.GetConnectionCount(), 0u, TEST_LOCATION );
1709 DALI_TEST_EQUALS( handler5.GetConnectionCount(), 0u, TEST_LOCATION );
1710 DALI_TEST_EQUALS( handler6.GetConnectionCount(), 0u, TEST_LOCATION );
1713 static void UtcDaliSignalMultipleConnections2()
1715 TestSignals signals;
1717 // Test that connecting the same callback twice is a NOOP
1719 TestSlotHandler handler1;
1721 // Note the double connection is intentional
1722 signals.SignalVoid1Value().Connect( &handler1, &TestSlotHandler::VoidSlotIntValue );
1723 signals.SignalVoid1Value().Connect( &handler1, &TestSlotHandler::VoidSlotIntValue );
1724 DALI_TEST_EQUALS( handler1.mHandledCount, 0, TEST_LOCATION );
1726 signals.EmitVoidSignalIntValue( 6 );
1727 DALI_TEST_EQUALS( handler1.mHandledCount, 1, TEST_LOCATION );
1728 DALI_TEST_EQUALS( handler1.mIntParam1, 6, TEST_LOCATION );
1730 // Calling Disconnect once should be enough
1731 signals.SignalVoid1Value().Disconnect( &handler1, &TestSlotHandler::VoidSlotIntValue );
1732 DALI_TEST_CHECK( signals.SignalVoid1Value().Empty() );
1733 handler1.mIntParam1 = 0;
1735 signals.EmitVoidSignalIntValue( 7 );
1736 DALI_TEST_EQUALS( handler1.mHandledCount, 1/*not incremented since last check*/, TEST_LOCATION );
1737 DALI_TEST_EQUALS( handler1.mIntParam1, 0, TEST_LOCATION );
1740 // Test automatic disconnect after multiple Connect() calls
1742 TestSlotHandler handler2;
1743 signals.SignalVoid1Value().Connect( &handler2, &TestSlotHandler::VoidSlotIntValue );
1744 signals.SignalVoid1Value().Connect( &handler2, &TestSlotHandler::VoidSlotIntValue );
1746 TestSlotHandler handler3;
1747 signals.SignalBool1Value().Connect( &handler3, &TestSlotHandler::BoolSlotFloatValue );
1748 signals.SignalBool1Value().Connect( &handler3, &TestSlotHandler::BoolSlotFloatValue );
1750 DALI_TEST_EQUALS( handler2.mHandledCount, 0, TEST_LOCATION );
1751 DALI_TEST_EQUALS( handler3.mHandledCount, 0, TEST_LOCATION );
1752 DALI_TEST_CHECK( ! signals.SignalVoid1Value().Empty() );
1753 DALI_TEST_CHECK( ! signals.SignalBool1Value().Empty() );
1755 DALI_TEST_CHECK( signals.SignalVoid1Value().Empty() );
1756 DALI_TEST_CHECK( signals.SignalBool1Value().Empty() );
1759 signals.EmitVoidSignalIntValue( 1 );
1760 signals.EmitBoolSignalFloatValue( 1.0f );
1762 // Test that connecting the same callback 10 times is a NOOP
1763 TestSlotHandler handler4;
1764 DALI_TEST_EQUALS( handler4.mHandledCount, 0, TEST_LOCATION );
1765 DALI_TEST_EQUALS( handler4.mFloatParam1, 0.0f, TEST_LOCATION );
1767 signals.SignalBool1Value().Connect( &handler4, &TestSlotHandler::BoolSlotFloatValue );
1768 signals.SignalBool1Value().Connect( &handler4, &TestSlotHandler::BoolSlotFloatValue );
1769 signals.SignalBool1Value().Connect( &handler4, &TestSlotHandler::BoolSlotFloatValue );
1770 signals.SignalBool1Value().Connect( &handler4, &TestSlotHandler::BoolSlotFloatValue );
1771 signals.SignalBool1Value().Connect( &handler4, &TestSlotHandler::BoolSlotFloatValue );
1772 signals.SignalBool1Value().Connect( &handler4, &TestSlotHandler::BoolSlotFloatValue );
1773 signals.SignalBool1Value().Connect( &handler4, &TestSlotHandler::BoolSlotFloatValue );
1774 signals.SignalBool1Value().Connect( &handler4, &TestSlotHandler::BoolSlotFloatValue );
1775 signals.SignalBool1Value().Connect( &handler4, &TestSlotHandler::BoolSlotFloatValue );
1776 signals.SignalBool1Value().Connect( &handler4, &TestSlotHandler::BoolSlotFloatValue );
1778 signals.EmitBoolSignalFloatValue( 2.0f );
1779 DALI_TEST_EQUALS( handler4.mHandledCount, 1, TEST_LOCATION );
1780 DALI_TEST_EQUALS( handler4.mFloatParam1, 2.0f, TEST_LOCATION );
1782 // Calling Disconnect once should be enough
1783 signals.SignalBool1Value().Disconnect( &handler4, &TestSlotHandler::BoolSlotFloatValue );
1784 DALI_TEST_CHECK( signals.SignalBool1Value().Empty() );
1786 signals.EmitBoolSignalFloatValue( 3.0f );
1787 DALI_TEST_EQUALS( handler4.mHandledCount, 1/*not incremented since last check*/, TEST_LOCATION );
1788 DALI_TEST_EQUALS( handler4.mFloatParam1, 2.0f, TEST_LOCATION );
1791 static void UtcDaliSignalMultipleConnections3()
1793 TestSignals signals;
1795 // Test connecting two difference callbacks for the same ConnectionTracker
1797 TestSlotHandler handler1;
1800 TestSignals::VoidRet1ValueParamSignal tempSignal;
1802 DALI_TEST_EQUALS( handler1.GetConnectionCount(), 0u, TEST_LOCATION );
1803 DALI_TEST_EQUALS( handler1.mHandledCount, 0, TEST_LOCATION );
1804 DALI_TEST_EQUALS( handler1.mIntParam1, 0, TEST_LOCATION );
1806 // Note that the duplicate connection is deliberate
1807 tempSignal.Connect( &handler1, &TestSlotHandler::VoidSlotIntValue );
1808 tempSignal.Connect( &handler1, &TestSlotHandler::VoidDuplicateSlotIntValue );
1810 DALI_TEST_EQUALS( handler1.GetConnectionCount(), 2u, TEST_LOCATION );
1811 DALI_TEST_EQUALS( handler1.mHandledCount, 0, TEST_LOCATION );
1813 tempSignal.Emit( 10 );
1815 DALI_TEST_EQUALS( handler1.mHandledCount, 2, TEST_LOCATION );
1816 DALI_TEST_EQUALS( handler1.mIntParam1, 10, TEST_LOCATION );
1817 DALI_TEST_EQUALS( handler1.mIntParam2, 10, TEST_LOCATION );
1819 // End of tempSignal lifetime
1821 DALI_TEST_EQUALS( handler1.GetConnectionCount(), 0u, TEST_LOCATION );
1824 bool wasStaticVoidCallbackVoidCalled = false;
1825 bool wasStaticFloatCallbackVoidCalled = false;
1826 bool wasStaticVoidCallbackIntValueCalled = false;
1827 int staticIntValue = 0;
1828 bool wasStaticFloatCallbackFloatValueFloatValueCalled = false;
1829 float staticFloatValue1 = 0.0f;
1830 float staticFloatValue2 = 0.0f;
1832 static void StaticVoidCallbackVoid()
1834 wasStaticVoidCallbackVoidCalled = true;
1837 static float StaticFloatCallbackVoid()
1839 wasStaticFloatCallbackVoidCalled = true;
1843 static void StaticVoidCallbackIntValue( int value )
1845 wasStaticVoidCallbackIntValueCalled = true;
1846 staticIntValue = value;
1849 static float StaticFloatCallbackFloatValueFloatValue( float value1, float value2 )
1851 wasStaticFloatCallbackFloatValueFloatValueCalled = true;
1852 staticFloatValue1 = value1;
1853 staticFloatValue2 = value2;
1854 return value1 + value2;
1857 static void UtcDaliSignalDisconnectStatic()
1862 TestSignals::VoidRetNoParamSignal signal;
1863 DALI_TEST_CHECK( signal.Empty() );
1865 signal.Connect( StaticVoidCallbackVoid );
1866 DALI_TEST_CHECK( ! signal.Empty() );
1868 wasStaticVoidCallbackVoidCalled = false;
1870 DALI_TEST_EQUALS( wasStaticVoidCallbackVoidCalled, true, TEST_LOCATION );
1872 signal.Disconnect( StaticVoidCallbackVoid );
1873 DALI_TEST_CHECK( signal.Empty() );
1875 wasStaticVoidCallbackVoidCalled = false;
1877 DALI_TEST_EQUALS( wasStaticVoidCallbackVoidCalled, false, TEST_LOCATION );
1883 TestSignals::FloatRet0ParamSignal signal;
1884 DALI_TEST_CHECK( signal.Empty() );
1886 signal.Connect( StaticFloatCallbackVoid );
1887 DALI_TEST_CHECK( ! signal.Empty() );
1889 wasStaticFloatCallbackVoidCalled = false;
1890 float result = signal.Emit();
1891 DALI_TEST_EQUALS( wasStaticFloatCallbackVoidCalled, true, TEST_LOCATION );
1892 DALI_TEST_EQUALS( result, 7.0f, TEST_LOCATION );
1894 signal.Disconnect( StaticFloatCallbackVoid );
1895 DALI_TEST_CHECK( signal.Empty() );
1897 wasStaticFloatCallbackVoidCalled = false;
1898 result = signal.Emit();
1899 DALI_TEST_EQUALS( wasStaticFloatCallbackVoidCalled, false, TEST_LOCATION );
1900 DALI_TEST_EQUALS( result, 0.0f, TEST_LOCATION );
1906 TestSignals::VoidRet1ValueParamSignal signal;
1907 DALI_TEST_CHECK( signal.Empty() );
1909 signal.Connect( StaticVoidCallbackIntValue );
1910 DALI_TEST_CHECK( ! signal.Empty() );
1912 wasStaticVoidCallbackIntValueCalled = false;
1915 DALI_TEST_EQUALS( wasStaticVoidCallbackIntValueCalled, true, TEST_LOCATION );
1916 DALI_TEST_EQUALS( staticIntValue, 10, TEST_LOCATION );
1918 signal.Disconnect( StaticVoidCallbackIntValue );
1919 DALI_TEST_CHECK( signal.Empty() );
1921 wasStaticVoidCallbackIntValueCalled = false;
1924 DALI_TEST_EQUALS( wasStaticVoidCallbackIntValueCalled, false, TEST_LOCATION );
1925 DALI_TEST_EQUALS( staticIntValue, 0, TEST_LOCATION );
1928 // float Func( float, float )
1931 TestSignals::FloatRet2ValueParamSignal signal;
1932 DALI_TEST_CHECK( signal.Empty() );
1934 signal.Connect( StaticFloatCallbackFloatValueFloatValue );
1935 DALI_TEST_CHECK( ! signal.Empty() );
1937 wasStaticFloatCallbackFloatValueFloatValueCalled = false;
1938 staticFloatValue1 = 0.0f;
1939 staticFloatValue2 = 0.0f;
1940 float result = signal.Emit( 5.0f, 6.0f );
1941 DALI_TEST_EQUALS( wasStaticFloatCallbackFloatValueFloatValueCalled, true, TEST_LOCATION );
1942 DALI_TEST_EQUALS( staticFloatValue1, 5.0f, TEST_LOCATION );
1943 DALI_TEST_EQUALS( staticFloatValue2, 6.0f, TEST_LOCATION );
1944 DALI_TEST_EQUALS( result, 5.0f+6.0f, TEST_LOCATION );
1946 signal.Disconnect( StaticFloatCallbackFloatValueFloatValue );
1947 DALI_TEST_CHECK( signal.Empty() );
1949 wasStaticFloatCallbackFloatValueFloatValueCalled = false;
1950 staticFloatValue1 = 0.0f;
1951 staticFloatValue2 = 0.0f;
1952 result = signal.Emit( 7.0f, 8.0f );
1953 DALI_TEST_EQUALS( wasStaticFloatCallbackFloatValueFloatValueCalled, false, TEST_LOCATION );
1954 DALI_TEST_EQUALS( staticFloatValue1, 0.0f, TEST_LOCATION );
1955 DALI_TEST_EQUALS( staticFloatValue2, 0.0f, TEST_LOCATION );
1956 DALI_TEST_EQUALS( result, 0.0f, TEST_LOCATION );
1960 static void UtcDaliSignalDisconnectDuringCallback()
1962 // Test disconnection during each callback
1964 TestSignals::VoidRetNoParamSignal signal;
1965 DALI_TEST_CHECK( signal.Empty() );
1967 TestSlotDisconnector handler1;
1968 handler1.VoidConnectVoid( signal );
1969 DALI_TEST_EQUALS( handler1.mHandled, false, TEST_LOCATION );
1970 DALI_TEST_CHECK( ! signal.Empty() );
1973 DALI_TEST_EQUALS( handler1.mHandled, true, TEST_LOCATION );
1974 DALI_TEST_CHECK( signal.Empty() );
1976 // Repeat with 2 callbacks
1978 handler1.mHandled = false;
1980 TestSlotDisconnector handler2;
1981 handler1.VoidConnectVoid( signal );
1982 handler2.VoidConnectVoid( signal );
1983 DALI_TEST_EQUALS( handler1.mHandled, false, TEST_LOCATION );
1984 DALI_TEST_EQUALS( handler2.mHandled, false, TEST_LOCATION );
1985 DALI_TEST_CHECK( ! signal.Empty() );
1988 DALI_TEST_EQUALS( handler1.mHandled, true, TEST_LOCATION );
1989 DALI_TEST_EQUALS( handler2.mHandled, true, TEST_LOCATION );
1990 DALI_TEST_CHECK( signal.Empty() );
1992 // Repeat with no callbacks
1994 handler1.mHandled = false;
1995 handler2.mHandled = false;
1998 DALI_TEST_EQUALS( handler1.mHandled, false, TEST_LOCATION );
1999 DALI_TEST_EQUALS( handler2.mHandled, false, TEST_LOCATION );
2001 // Repeat with 3 callbacks
2003 TestSlotDisconnector handler3;
2004 handler1.VoidConnectVoid( signal );
2005 handler2.VoidConnectVoid( signal );
2006 handler3.VoidConnectVoid( signal );
2007 DALI_TEST_EQUALS( handler1.mHandled, false, TEST_LOCATION );
2008 DALI_TEST_EQUALS( handler2.mHandled, false, TEST_LOCATION );
2009 DALI_TEST_EQUALS( handler3.mHandled, false, TEST_LOCATION );
2010 DALI_TEST_CHECK( ! signal.Empty() );
2013 DALI_TEST_EQUALS( handler1.mHandled, true, TEST_LOCATION );
2014 DALI_TEST_EQUALS( handler2.mHandled, true, TEST_LOCATION );
2015 DALI_TEST_EQUALS( handler3.mHandled, true, TEST_LOCATION );
2016 DALI_TEST_CHECK( signal.Empty() );
2018 // Repeat with no callbacks
2020 handler1.mHandled = false;
2021 handler2.mHandled = false;
2022 handler3.mHandled = false;
2025 DALI_TEST_EQUALS( handler1.mHandled, false, TEST_LOCATION );
2026 DALI_TEST_EQUALS( handler2.mHandled, false, TEST_LOCATION );
2027 DALI_TEST_EQUALS( handler3.mHandled, false, TEST_LOCATION );
2030 static void UtcDaliSignalDisconnectDuringCallback2()
2032 // Test disconnection of some (but not all) callbacks during sigmal emission
2034 TestSignals::VoidRetNoParamSignal signal;
2035 DALI_TEST_CHECK( signal.Empty() );
2037 TestSlotMultiDisconnector handler;
2038 handler.ConnectAll( signal );
2039 DALI_TEST_EQUALS( handler.mSlotHandled[0], false, TEST_LOCATION );
2040 DALI_TEST_EQUALS( handler.mSlotHandled[1], false, TEST_LOCATION );
2041 DALI_TEST_EQUALS( handler.mSlotHandled[2], false, TEST_LOCATION );
2042 DALI_TEST_EQUALS( handler.mSlotHandled[3], false, TEST_LOCATION );
2043 DALI_TEST_EQUALS( handler.mSlotHandled[4], false, TEST_LOCATION );
2044 DALI_TEST_EQUALS( handler.mSlotHandled[5], false, TEST_LOCATION );
2045 DALI_TEST_EQUALS( handler.mSlotHandled[6], false, TEST_LOCATION );
2046 DALI_TEST_EQUALS( handler.mSlotHandled[7], false, TEST_LOCATION );
2047 DALI_TEST_EQUALS( handler.mSlotHandled[8], false, TEST_LOCATION );
2048 DALI_TEST_EQUALS( handler.mSlotHandled[9], false, TEST_LOCATION );
2049 DALI_TEST_CHECK( ! signal.Empty() );
2053 // Slots 5, 7, & 9 should be disconnected before being called
2054 DALI_TEST_EQUALS( handler.mSlotHandled[0], true, TEST_LOCATION );
2055 DALI_TEST_EQUALS( handler.mSlotHandled[1], true, TEST_LOCATION );
2056 DALI_TEST_EQUALS( handler.mSlotHandled[2], true, TEST_LOCATION );
2057 DALI_TEST_EQUALS( handler.mSlotHandled[3], true, TEST_LOCATION );
2058 DALI_TEST_EQUALS( handler.mSlotHandled[4], true, TEST_LOCATION );
2059 DALI_TEST_EQUALS( handler.mSlotHandled[5], false, TEST_LOCATION );
2060 DALI_TEST_EQUALS( handler.mSlotHandled[6], true, TEST_LOCATION );
2061 DALI_TEST_EQUALS( handler.mSlotHandled[7], false, TEST_LOCATION );
2062 DALI_TEST_EQUALS( handler.mSlotHandled[8], true, TEST_LOCATION );
2063 DALI_TEST_EQUALS( handler.mSlotHandled[9], false, TEST_LOCATION );
2064 DALI_TEST_CHECK( ! signal.Empty() );
2066 // Odd slots are disconnected
2067 DALI_TEST_EQUALS( handler.GetConnectionCount(), 5u, TEST_LOCATION );
2070 static void UtcDaliSignalEmitDuringCallback()
2072 TestApplication app; // Create core for debug logging
2074 TestSignals::VoidRetNoParamSignal signal;
2075 DALI_TEST_CHECK( signal.Empty() );
2077 TestEmitDuringCallback handler1;
2078 handler1.VoidConnectVoid( signal );
2080 // Test that this does not result in an infinite loop!
2084 static void UtcDaliSignalTestApp01()
2086 // Test 1 signal connected to 1 Slot.
2087 // Signal dies first.
2089 TestButton* button = new TestButton(1);
2091 button->DownSignal().Connect(&app,&TestApp::OnButtonPress);
2093 // check we have both the button, and the app have 1 connection
2094 DALI_TEST_EQUALS( app.GetConnectionCount(), 1u, TEST_LOCATION );
2095 DALI_TEST_EQUALS( button->DownSignal().GetConnectionCount(), 1u, TEST_LOCATION );
2097 delete button; // should automatically destroy the connection
2099 // check we have a 0 connections
2100 DALI_TEST_EQUALS( app.GetConnectionCount(), 0u, TEST_LOCATION );
2103 static void UtcDaliSignalTestApp02()
2105 // Test 1 signal connected to 1 Slot.
2106 // Slot owning object dies first.
2108 TestButton button(1);
2109 TestApp *app = new TestApp;
2110 button.DownSignal().Connect( app, &TestApp::OnButtonPress);
2112 // check we have a 1 connection
2113 DALI_TEST_EQUALS( app->GetConnectionCount(), 1u, TEST_LOCATION );
2114 DALI_TEST_EQUALS( button.DownSignal().GetConnectionCount(), 1u, TEST_LOCATION );
2116 delete app; // should automatically destroy the connection
2118 // check we have a 0 connections
2119 DALI_TEST_EQUALS( button.DownSignal().GetConnectionCount(), 0u, TEST_LOCATION );
2122 static void UtcDaliSignalTestApp03()
2124 // Test 1 Signal connect to 2 slots
2125 // 1 of the slot owners dies. Then the second slot owner dies
2127 TestButton button(1);
2128 TestApp *app1 = new TestApp;
2129 TestApp *app2 = new TestApp;
2131 button.DownSignal().Connect( app1, &TestApp::OnButtonPress);
2132 button.DownSignal().Connect( app2, &TestApp::OnButtonPress);
2134 // check we have a 2 connections to the signal
2135 DALI_TEST_EQUALS( button.DownSignal().GetConnectionCount(), 2u, TEST_LOCATION );
2137 // kill the first slot
2138 delete app1; // should automatically destroy the connection
2140 // check we have 1 connection left
2141 DALI_TEST_EQUALS( button.DownSignal().GetConnectionCount(), 1u, TEST_LOCATION );
2143 button.Press(); // emit the signal (to ensure it doesn't seg fault)
2145 // kill the second slot
2146 delete app2; // should automatically destroy the connection
2148 // check we have 1 connection left
2149 DALI_TEST_EQUALS( button.DownSignal().GetConnectionCount(), 0u, TEST_LOCATION );
2152 static void UtcDaliSignalTestApp04()
2154 // Test 1 Signal connected to 2 slots (with different owners)
2155 // The Signal dies, check the 2 slots disconnect automatically
2157 TestButton* button = new TestButton(1);
2161 button->DownSignal().Connect(&app1,&TestApp::OnButtonPress);
2162 button->DownSignal().Connect(&app2,&TestApp::OnButtonPress);
2164 // check the connection counts
2165 DALI_TEST_EQUALS( app1.GetConnectionCount(), 1u, TEST_LOCATION );
2166 DALI_TEST_EQUALS( app2.GetConnectionCount(), 1u, TEST_LOCATION );
2167 DALI_TEST_EQUALS( button->DownSignal().GetConnectionCount(), 2u, TEST_LOCATION );
2169 delete button; // should automatically destroy the connection
2171 // check both slot owners have zero connections
2172 DALI_TEST_EQUALS( app1.GetConnectionCount(), 0u, TEST_LOCATION );
2173 DALI_TEST_EQUALS( app2.GetConnectionCount(), 0u, TEST_LOCATION );
2176 static void UtcDaliSignalTestApp05()
2178 // Test 2 Signals (with different owners) connected to 1 slots
2179 // 1 Signal dies, check that the remaining connection is valid
2181 TestButton* button1 = new TestButton(1); // use for signal 1
2182 TestButton* button2 = new TestButton(2); // use for signal 2
2186 button1->DownSignal().Connect(&app,&TestApp::OnButtonPress);
2187 button2->DownSignal().Connect(&app,&TestApp::OnButtonPress);
2189 // check the connection counts
2190 DALI_TEST_EQUALS( app.GetConnectionCount(), 2u, TEST_LOCATION );
2191 DALI_TEST_EQUALS( button1->DownSignal().GetConnectionCount(), 1u, TEST_LOCATION );
2192 DALI_TEST_EQUALS( button2->DownSignal().GetConnectionCount(), 1u, TEST_LOCATION );
2194 // make sure both signals emit ok
2196 DALI_TEST_EQUALS( app.GetButtonPressedId() , 2 , TEST_LOCATION );
2199 DALI_TEST_EQUALS( app.GetButtonPressedId() , 1 , TEST_LOCATION );
2201 delete button1; // should automatically destroy 1 connection
2203 // check both slot owners have zero connections
2204 DALI_TEST_EQUALS( app.GetConnectionCount(), 1u, TEST_LOCATION );
2206 // check remaining connection still works
2208 DALI_TEST_EQUALS( app.GetButtonPressedId() , 2 , TEST_LOCATION );
2210 // kill the last signal
2212 DALI_TEST_EQUALS( app.GetConnectionCount(), 0u, TEST_LOCATION );
2215 static void UtcDaliSignalTestApp06()
2217 SignalV2< bool () > boolSignal;
2221 // connect a slot which will return false
2222 boolSignal.Connect( &app, &TestApp::BoolReturnTestFalse);
2223 result = boolSignal.Emit();
2224 DALI_TEST_EQUALS( result, false, TEST_LOCATION );
2226 // disconnect last slot, and connect a slot which returns true
2227 boolSignal.Disconnect( &app, &TestApp::BoolReturnTestFalse);
2228 boolSignal.Connect( &app, &TestApp::BoolReturnTestTrue);
2229 result = boolSignal.Emit();
2230 DALI_TEST_EQUALS( result, true, TEST_LOCATION );
2233 static void UtcDaliSlotDelegateConnection()
2235 TestSignals signals;
2238 TestSlotDelegateHandler handlers;
2239 signals.SignalVoidNone().Connect( handlers.mSlotDelegate, &TestSlotDelegateHandler::VoidSlotVoid );
2240 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2241 signals.EmitVoidSignalVoid();
2242 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
2244 // Test double emission
2245 handlers.mHandled = false;
2246 signals.EmitVoidSignalVoid();
2247 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
2249 signals.CheckNoConnections();
2252 TestSlotDelegateHandler handlers;
2253 signals.SignalVoid1Ref().Connect( handlers.mSlotDelegate, &TestSlotDelegateHandler::VoidSlotIntRef );
2254 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2256 signals.EmitVoidSignalIntRef(x);
2257 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
2258 DALI_TEST_EQUALS( handlers.mIntParam1, 7, TEST_LOCATION );
2260 signals.CheckNoConnections();
2263 TestSlotDelegateHandler handlers;
2264 signals.SignalVoid1Value().Connect( handlers.mSlotDelegate, &TestSlotDelegateHandler::VoidSlotIntValue );
2265 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2266 signals.EmitVoidSignalIntValue(5);
2267 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
2268 DALI_TEST_EQUALS( handlers.mIntParam1, 5, TEST_LOCATION );
2270 signals.CheckNoConnections();
2273 TestSlotDelegateHandler handlers;
2274 signals.SignalVoid2Value().Connect( handlers.mSlotDelegate, &TestSlotDelegateHandler::VoidSlotIntValueIntValue );
2275 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2276 signals.EmitVoidSignalIntValueIntValue(6, 7);
2277 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
2278 DALI_TEST_EQUALS( handlers.mIntParam1, 6, TEST_LOCATION );
2279 DALI_TEST_EQUALS( handlers.mIntParam2, 7, TEST_LOCATION );
2281 signals.CheckNoConnections();
2284 TestSlotDelegateHandler handlers;
2285 signals.SignalBool1Value().Connect( handlers.mSlotDelegate, &TestSlotDelegateHandler::BoolSlotFloatValue );
2286 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2288 handlers.mBoolReturn = true;
2289 DALI_TEST_EQUALS( signals.EmitBoolSignalFloatValue(5.0f), true, TEST_LOCATION );
2290 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
2291 DALI_TEST_EQUALS( handlers.mFloatParam1, 5.0f, TEST_LOCATION );
2293 // repeat with opposite return value
2294 handlers.mBoolReturn = false;
2295 handlers.mHandled = false;
2296 DALI_TEST_EQUALS( signals.EmitBoolSignalFloatValue(6.0f), false, TEST_LOCATION );
2297 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
2298 DALI_TEST_EQUALS( handlers.mFloatParam1, 6.0f, TEST_LOCATION );
2300 signals.CheckNoConnections();
2303 TestSlotDelegateHandler handlers;
2304 signals.SignalBool2Value().Connect( handlers.mSlotDelegate, &TestSlotDelegateHandler::BoolSlotFloatValueIntValue );
2305 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2306 handlers.mBoolReturn = true;
2307 DALI_TEST_EQUALS( signals.EmitBoolSignalFloatValueIntValue(5.0f, 10), true, TEST_LOCATION );
2308 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
2309 DALI_TEST_EQUALS( handlers.mFloatParam1, 5.0f, TEST_LOCATION );
2310 DALI_TEST_EQUALS( handlers.mIntParam2, 10, TEST_LOCATION );
2312 signals.CheckNoConnections();
2315 TestSlotDelegateHandler handlers;
2316 signals.SignalInt2Value().Connect( handlers.mSlotDelegate, &TestSlotDelegateHandler::IntSlotFloatValueIntValue );
2317 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2318 handlers.mIntReturn = 27;
2319 int x = signals.EmitIntSignalFloatValueIntValue(33.5f, 5);
2320 DALI_TEST_EQUALS( x, 27, TEST_LOCATION );
2321 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
2322 DALI_TEST_EQUALS( handlers.mFloatParam1, 33.5f, TEST_LOCATION );
2323 DALI_TEST_EQUALS( handlers.mIntParam2, 5, TEST_LOCATION );
2325 signals.CheckNoConnections();
2328 TestSlotDelegateHandler handlers;
2329 signals.SignalFloat0().Connect( handlers.mSlotDelegate, &TestSlotDelegateHandler::FloatSlotVoid );
2330 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2331 handlers.mFloatReturn = 27.0f;
2332 float f = signals.EmitFloat0Signal();
2333 DALI_TEST_EQUALS( f, 27.0f, TEST_LOCATION );
2334 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
2335 DALI_TEST_EQUALS( handlers.mFloatParam1, 0.0f, TEST_LOCATION );
2336 DALI_TEST_EQUALS( handlers.mFloatParam2, 0.0f, 0.001f, TEST_LOCATION );
2338 signals.CheckNoConnections();
2341 TestSlotDelegateHandler handlers;
2342 signals.SignalFloat2Value().Connect( handlers.mSlotDelegate, &TestSlotDelegateHandler::FloatSlotFloatValueFloatValue );
2343 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2344 handlers.mFloatReturn = 27.0f;
2345 float f = signals.EmitFloat2VSignal(5, 33.0f);
2346 DALI_TEST_EQUALS( f, 27.0f, TEST_LOCATION );
2347 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
2348 DALI_TEST_EQUALS( handlers.mFloatParam1, 5.0f, TEST_LOCATION );
2349 DALI_TEST_EQUALS( handlers.mFloatParam2, 33.0f, 0.001f, TEST_LOCATION );
2351 signals.CheckNoConnections();
2354 TestSlotDelegateHandler handlers;
2355 signals.VoidSignalFloatValue3().Connect( handlers.mSlotDelegate, &TestSlotDelegateHandler::VoidSlotFloatValue3 );
2356 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2357 signals.EmitVoidSignalFloatValue3(5, 33.0f, 100.0f);
2358 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
2359 DALI_TEST_EQUALS( handlers.mFloatParam1, 5.0f, TEST_LOCATION );
2360 DALI_TEST_EQUALS( handlers.mFloatParam2, 33.0f, 0.001f, TEST_LOCATION );
2361 DALI_TEST_EQUALS( handlers.mFloatParam3, 100.0f, 0.001f, TEST_LOCATION );
2363 signals.CheckNoConnections();
2366 TestSlotDelegateHandler handlers;
2367 signals.FloatSignalFloatValue3().Connect( handlers.mSlotDelegate, &TestSlotDelegateHandler::FloatSlotFloatValue3 );
2368 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2369 handlers.mFloatReturn = 27.0f;
2370 float returnValue = signals.EmitFloatSignalFloatValue3(5, 33.0f, 100.0f);
2371 DALI_TEST_EQUALS( returnValue, 27.0f, TEST_LOCATION );
2372 DALI_TEST_EQUALS( handlers.mHandled, true, TEST_LOCATION );
2373 DALI_TEST_EQUALS( handlers.mFloatParam1, 5.0f, TEST_LOCATION );
2374 DALI_TEST_EQUALS( handlers.mFloatParam2, 33.0f, 0.001f, TEST_LOCATION );
2375 DALI_TEST_EQUALS( handlers.mFloatParam3, 100.0f, 0.001f, TEST_LOCATION );
2377 signals.CheckNoConnections();
2380 static void UtcDaliSignalSlotDelegateDestruction()
2382 // Test that signal disconnect works when slot-delegate is destroyed (goes out of scope)
2385 TestSignals::VoidRetNoParamSignal signal;
2387 DALI_TEST_CHECK( signal.Empty() );
2388 TestSlotDelegateHandler handler;
2389 signal.Connect( handler.mSlotDelegate, &TestSlotDelegateHandler::VoidSlotVoid );
2390 DALI_TEST_CHECK( ! signal.Empty() );
2392 // End of slot lifetime
2393 DALI_TEST_CHECK( signal.Empty() );
2395 // Signal emission should be a NOOP
2400 TestSignals::VoidRet1ValueParamSignal signal;
2402 DALI_TEST_CHECK( signal.Empty() );
2403 TestSlotDelegateHandler handler;
2404 signal.Connect( handler.mSlotDelegate, &TestSlotDelegateHandler::VoidSlotIntValue );
2405 DALI_TEST_CHECK( ! signal.Empty() );
2407 // End of slot lifetime
2408 DALI_TEST_CHECK( signal.Empty() );
2410 // Signal emission should be a NOOP
2415 TestSignals::VoidRet1RefParamSignal signal;
2417 DALI_TEST_CHECK( signal.Empty() );
2418 TestSlotDelegateHandler handler;
2419 signal.Connect( handler.mSlotDelegate, &TestSlotDelegateHandler::VoidSlotIntRef );
2420 DALI_TEST_CHECK( ! signal.Empty() );
2422 // End of slot lifetime
2423 DALI_TEST_CHECK( signal.Empty() );
2425 // Signal emission should be a NOOP
2427 signal.Emit( temp );
2431 TestSignals::VoidRet2ValueParamSignal signal;
2433 DALI_TEST_CHECK( signal.Empty() );
2434 TestSlotDelegateHandler handler;
2435 signal.Connect( handler.mSlotDelegate, &TestSlotDelegateHandler::VoidSlotIntValueIntValue );
2436 DALI_TEST_CHECK( ! signal.Empty() );
2438 // End of slot lifetime
2439 DALI_TEST_CHECK( signal.Empty() );
2441 // Signal emission should be a NOOP
2442 signal.Emit( 1, 2 );
2446 TestSignals::BoolRet1ValueParamSignal signal;
2448 DALI_TEST_CHECK( signal.Empty() );
2449 TestSlotDelegateHandler handler;
2450 signal.Connect( handler.mSlotDelegate, &TestSlotDelegateHandler::BoolSlotFloatValue );
2451 DALI_TEST_CHECK( ! signal.Empty() );
2453 // End of slot lifetime
2454 DALI_TEST_CHECK( signal.Empty() );
2456 // Signal emission should be a NOOP
2457 bool blah = signal.Emit( 1.0f );
2458 DALI_TEST_CHECK( ! blah );
2462 TestSignals::BoolRet2ValueParamSignal signal;
2464 DALI_TEST_CHECK( signal.Empty() );
2465 TestSlotDelegateHandler handler;
2466 signal.Connect( handler.mSlotDelegate, &TestSlotDelegateHandler::BoolSlotFloatValueIntValue );
2467 DALI_TEST_CHECK( ! signal.Empty() );
2469 // End of slot lifetime
2470 DALI_TEST_CHECK( signal.Empty() );
2472 // Signal emission should be a NOOP
2473 bool blah = signal.Emit( 1.0f, 2 );
2474 DALI_TEST_CHECK( ! blah );
2478 TestSignals::IntRet2ValueParamSignal signal;
2480 DALI_TEST_CHECK( signal.Empty() );
2481 TestSlotDelegateHandler handler;
2482 signal.Connect( handler.mSlotDelegate, &TestSlotDelegateHandler::IntSlotFloatValueIntValue );
2483 DALI_TEST_CHECK( ! signal.Empty() );
2485 // End of slot lifetime
2486 DALI_TEST_CHECK( signal.Empty() );
2488 // Signal emission should be a NOOP
2489 int blah = signal.Emit( 10.0f, 100 );
2490 DALI_TEST_CHECK( 0 == blah );
2494 TestSignals::FloatRet0ParamSignal signal;
2496 DALI_TEST_CHECK( signal.Empty() );
2497 TestSlotDelegateHandler handler;
2498 signal.Connect( handler.mSlotDelegate, &TestSlotDelegateHandler::FloatSlotVoid );
2499 DALI_TEST_CHECK( ! signal.Empty() );
2501 // End of slot lifetime
2502 DALI_TEST_CHECK( signal.Empty() );
2504 // Signal emission should be a NOOP
2505 float blah = signal.Emit();
2506 DALI_TEST_CHECK( 0.0f == blah );
2510 TestSignals::FloatRet2ValueParamSignal signal;
2512 DALI_TEST_CHECK( signal.Empty() );
2513 TestSlotDelegateHandler handler;
2514 signal.Connect(handler.mSlotDelegate, &TestSlotDelegateHandler::FloatSlotFloatValueFloatValue);
2515 DALI_TEST_CHECK( ! signal.Empty() );
2517 // End of slot lifetime
2518 DALI_TEST_CHECK( signal.Empty() );
2520 // Signal emission should be a NOOP
2521 float blah = signal.Emit( 3.0f, 4.0f );
2522 DALI_TEST_CHECK( 0.0f == blah );
2526 static void UtcDaliSlotHandlerDisconnect()
2528 // Test that callbacks don't occur if a signal is disconnected before emission
2530 TestSignals signals;
2533 TestSlotDelegateHandler handlers;
2534 signals.SignalVoidNone().Connect(handlers.mSlotDelegate, &TestSlotDelegateHandler::VoidSlotVoid);
2535 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2536 signals.SignalVoidNone().Disconnect(handlers.mSlotDelegate, &TestSlotDelegateHandler::VoidSlotVoid);
2537 signals.EmitVoidSignalVoid();
2538 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2542 TestSlotDelegateHandler handlers;
2543 signals.SignalVoid1Ref().Connect(handlers.mSlotDelegate, &TestSlotDelegateHandler::VoidSlotIntRef);
2544 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2546 handlers.mIntReturn = 5;
2547 signals.SignalVoid1Ref().Disconnect(handlers.mSlotDelegate, &TestSlotDelegateHandler::VoidSlotIntRef);
2548 signals.EmitVoidSignalIntRef(r);
2549 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2550 DALI_TEST_EQUALS( handlers.mIntParam1, 0, TEST_LOCATION );
2551 DALI_TEST_EQUALS( r, 7, TEST_LOCATION );
2555 TestSlotDelegateHandler handlers;
2556 signals.SignalVoid1Value().Connect(handlers.mSlotDelegate, &TestSlotDelegateHandler::VoidSlotIntValue);
2557 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2558 signals.SignalVoid1Value().Disconnect(handlers.mSlotDelegate, &TestSlotDelegateHandler::VoidSlotIntValue);
2559 signals.EmitVoidSignalIntValue(5);
2560 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2561 DALI_TEST_EQUALS( handlers.mIntParam1, 0, TEST_LOCATION );
2565 TestSlotDelegateHandler handlers;
2566 signals.SignalVoid2Value().Connect(handlers.mSlotDelegate, &TestSlotDelegateHandler::VoidSlotIntValueIntValue);
2567 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2568 signals.SignalVoid2Value().Disconnect(handlers.mSlotDelegate, &TestSlotDelegateHandler::VoidSlotIntValueIntValue);
2569 signals.EmitVoidSignalIntValueIntValue(5, 10);
2570 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2571 DALI_TEST_EQUALS( handlers.mIntParam1, 0, TEST_LOCATION );
2572 DALI_TEST_EQUALS( handlers.mIntParam2, 0, TEST_LOCATION );
2576 TestSlotDelegateHandler handlers;
2577 signals.SignalBool1Value().Connect(handlers.mSlotDelegate, &TestSlotDelegateHandler::BoolSlotFloatValue);
2578 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2579 handlers.mBoolReturn = true;
2580 signals.SignalBool1Value().Disconnect(handlers.mSlotDelegate, &TestSlotDelegateHandler::BoolSlotFloatValue);
2581 DALI_TEST_EQUALS( signals.EmitBoolSignalFloatValue(5.0f), false, TEST_LOCATION );
2582 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2583 DALI_TEST_EQUALS( handlers.mFloatParam1, 0.0f, TEST_LOCATION );
2587 TestSlotDelegateHandler handlers;
2588 signals.SignalBool2Value().Connect(handlers.mSlotDelegate, &TestSlotDelegateHandler::BoolSlotFloatValueIntValue);
2589 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2590 handlers.mBoolReturn = true;
2591 signals.SignalBool2Value().Disconnect(handlers.mSlotDelegate, &TestSlotDelegateHandler::BoolSlotFloatValueIntValue);
2592 DALI_TEST_EQUALS( signals.EmitBoolSignalFloatValueIntValue(5.0f, 10), false, TEST_LOCATION );
2593 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2594 DALI_TEST_EQUALS( handlers.mFloatParam1, 0.0f, TEST_LOCATION );
2595 DALI_TEST_EQUALS( handlers.mIntParam2, 0, TEST_LOCATION );
2599 TestSlotDelegateHandler handlers;
2600 signals.SignalInt2Value().Connect(handlers.mSlotDelegate, &TestSlotDelegateHandler::IntSlotFloatValueIntValue);
2601 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2602 handlers.mIntReturn = 27;
2603 signals.SignalInt2Value().Disconnect(handlers.mSlotDelegate, &TestSlotDelegateHandler::IntSlotFloatValueIntValue);
2604 signals.EmitIntSignalFloatValueIntValue(5, 33.0f);
2605 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2606 DALI_TEST_EQUALS( handlers.mIntParam1, 0, TEST_LOCATION );
2607 DALI_TEST_EQUALS( handlers.mFloatParam2, 0.0f, 0.001f, TEST_LOCATION );
2611 TestSlotDelegateHandler handlers;
2612 signals.SignalFloat0().Connect(handlers.mSlotDelegate, &TestSlotDelegateHandler::FloatSlotVoid);
2613 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2614 handlers.mFloatReturn = 27.0f;
2615 signals.SignalFloat0().Disconnect(handlers.mSlotDelegate, &TestSlotDelegateHandler::FloatSlotVoid);
2616 signals.EmitFloat0Signal();
2617 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2618 DALI_TEST_EQUALS( handlers.mFloatParam1, 0.0f, 0.001f, TEST_LOCATION );
2619 DALI_TEST_EQUALS( handlers.mFloatParam2, 0.0f, 0.001f, TEST_LOCATION );
2623 TestSlotDelegateHandler handlers;
2624 signals.SignalFloat2Value().Connect(handlers.mSlotDelegate, &TestSlotDelegateHandler::FloatSlotFloatValueFloatValue);
2625 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2626 handlers.mFloatReturn = 27.0f;
2627 signals.SignalFloat2Value().Disconnect(handlers.mSlotDelegate, &TestSlotDelegateHandler::FloatSlotFloatValueFloatValue);
2628 signals.EmitFloat2VSignal(5, 33.0f);
2629 DALI_TEST_EQUALS( handlers.mHandled, false, TEST_LOCATION );
2630 DALI_TEST_EQUALS( handlers.mFloatParam1, 0.0f, 0.001f, TEST_LOCATION );
2631 DALI_TEST_EQUALS( handlers.mFloatParam2, 0.0f, 0.001f, TEST_LOCATION );